2011-01-21 13 views
2

私は、Javaを使用してスタンドアロンアプリケーションを作成しています。そのため、ユーザーがファイルチューザから選択する画像のパスを挿入する必要があります。 ファイルのパスを取得していますが、データベース(mysql)に格納するときには\が格納されていないため、そのパスを取得するとファイルが表示されません。javaを使用してmysqlに\を含むファイルのパスを挿入します。

\\でファイルのパスを保存すると、Javaコードを使用してエスケープされます。

私はreplaceallメソッドを使用しようとしましたが、不正な文字セットのエラーが発生しました。

filename.replaceall("\","\\"); 

しかし、これはうまくいかなかった。

+0

あなたは別のJavaアプリケーションに保存されているパスを使用しようとしている、またはそれが何か他のもののために使用されていますか? –

答えて

5

Preparedステートメントを使用して、\を含むパスを格納します。 PreparedStatementは何もエスケープしません

+0

Thanx、それは働いた – yashbinani

+0

あなたは歓迎です:) –

0

スラッシュは問題ではありません。データベースに挿入する前に、パスにスラッシュが付いていることを確認してください。また、PreparedStatementを使用してデータを挿入していることを確認してください。 String以来

4

は不変であり、あなたはそれを呼び出すすべてのメソッドがリターン修正結果をStringの内部値を変更するのではなく、ていない、あなたは変数に置き換えるの結果を割り当てる必要があります。また、正規表現パターンではなく、文字を置換したいので、replace()メソッドで十分です。 replaceAll()は正規表現をとり、\は正規表現の特殊文字です。

filename = filename.replace("\\", "\\\\"); 

ただし、スラッシュはWindowsで正常に動作するはずです。

filename = filename.replace("\\", "/"); 

しかし#2、あなたはあなたのために悪いとSQLインジェクションの影響を受けやすい文字を離れてサニタイズPreparedStatementを使用してDBに保存することがあります。 Prepare here


具体的な問題とは関係なく、ファイルパスをDBに保存する理由を教えてください。これは移植性のエラーを起こしやすい。私は、(一意の)ファイル名だけを保存し、アプリケーション設定として構成可能な単一の共通パスに実際のファイルを保存することをお勧めします。

-1

あなたの投稿に関してはBalusCですが、私はあなたに同意できないと思います。確かに文字列は不変ですが、filename.replace( "a"、 "b")は文字列の新しいインスタンスを返します。

私は新しい変数に割り当てることは必要ではないと思いますか?我々はまた、ファイルパスを保存するためのaddslashes機能を使用することができます

-1

addslashes($filepath)