2017-01-16 5 views
0

Oracle DBテーブルにINSERT操作を実行します。Oracle DBテーブルに文字列を格納します。

私は挿入するサンプル文字列は、HTTPリクエストです:

a=5&b=hello&date=2016/12/31 

次のようにこの文字列が格納されている:

a=5&b=hello&date=2016%2F12%2F31 

URLエンコードされた文字ではなく、UTF-8エンコードを使用して、あること文字列。

以前は、私の文字列が期待どおりにUTF-8形式で保存されていました。 だから、私が取得することができたし、プロセス、それは

string.split('/') 

を使用して問題は何ですか?私の開発環境では何が変わることがありますか? これはDBMS側の問題ですか?

おかげ

EDIT:

public static String func(HttpServletRequest request) { 

    String date = request.getParameter("date"); 

    date.split("/");  IT WORKS!!! 
} 

public static String func(String url_stored_into_DB) { 

    String date = getDateFromUrl(url_stored_into_DB); 

    date.split("/");  IT DOESN'T WORK!!! 
         since it was stored with %2F 
} 

DBにURLを保存するために:

//HttpServletRequest request comes in to the server 
String url = request.toString().substring(beginIndex, endIndex); 
stmt = conn.prepareStatement("INSERT INTO table (URL) VALUES (?)"); 
stmt.setString(1, url); 
stmt.executeQuery(); 
stmt.close(); 
+0

2番目の文字列は、ブラウザのURLに表示されるようにエンコードされています。関連するJavaコードを表示できますか? –

+0

@TimBiegeleisen HTTPリクエストがサーバに到着したら、すべてがOKです。例えば、dateパラメータを取得し、その上でsplit関数を使用することができます。 URLをデータベースに保存すると、エスケープ文字が格納されるため、分割機能は機能しません。 – Fab

+0

データベースに保存するコードを表示しますか? –

答えて

4

あなたは使用して何の '/' 文字を含まないテキスト文字列を分割しようとしていますキャラクター。もちろん、それは動作しません。あなたの文字列に '/'文字が含まれていないと言うのはなぜですか? URLエンコードされているためです。 URLエンコーディングの目的は、文字列にURLに意味を持つさまざまな文字が含まれないようにすることです。

URLデコードする必要があります。このような何かがトリックを行う必要があります。

String date = getDateFromUrl(url_stored_into_DB); 
date = java.net.URLDecoder.decode(date, "UTF-8"); 

date.split ("/"); 
関連する問題