2016-12-07 15 views
0

Eclipse neon.1(4.6.1)java; のSQLite 3.8.7(sqliteの-JDBC-3.8.7.jar)アポストロフィを埋め込んだINSERT INTO

私は、次のコードスニペットを使用して、テーブルに顧客のデータを挿入しようとしています:

残念ながら
PreparedStatement ps; 
insertSQL = "INSERT INTO tbl_TotalPatent " 
    + "(Abstract, `Application/Filing Date`, `Application Number`) " 
    + "VALUES (" 
    + "'" + _field[0] + "', " 
    + "'" + _field[1] + "', " 
    + "'" + _field[2] + "');"; 
ps = con.prepareStatement(insertSQL); 
ps.execute(); 

、クライアントのデータを持っています埋め込まれたアポストロフィは変更できません。

ます。java.sql.SQLException:[SQLITE_ERROR] SQLエラーまたは欠落しているデータベース(「S」に近い:構文エラー)

アポストロフィを見つけたとき、それは単一引用符であると仮定すると、文の爆弾アウト「のINSERT INTO」

一重引用符に異なる文字を使用するためにINSERT INTOステートメントのさまざまな置換を試みましたが、無駄になりました。 「簡単な」回避策があると思いますが、見つけられません。解決策はおそらくスタックオーバーフローに投稿されていますが、見つけられません。誰かが私を正しい方向に向けることができますか?

+2

パラメータ化されたSQLを使用します。基本的には、SQLに直接値を入力しないでください。簡単な理由があります。 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html –

答えて

0

あなたが「単に次のスニペットwhithことを行う

+ "'" + _field[x].replaceAll("'", "''") + "', "  

あなたはまた、代わりに「使える」のための標準的なSQLエスケープシーケンスである二重のアポストロフィ、とのことアポストロフィを置き換えることができます

+0

ありがとうございます。私はreplaceを使用しようとしましたが、.replaceALLは使用しませんでした。それが問題の世話をした。私はあなたの助けに感謝します! – Paul

+0

今はうれしいです。私はupvoteを感謝します:) – Felix