0

- を使用して Java ファイルから Mysql データベースに値を挿入しています。

String query = "INSERT INTO genes (sent, title) VALUES ('"+sent+"','"+title+"')";
Statement stmt = con.createStatement();
int rs = stmt.executeUpdate(query);

ここでsent、 とtitleは、何らかのアルゴリズムを適用した後に抽出された可変文字列です。しかし、これは単一のqoutessentまたはそれを含む場合にSQLエラーを引き起こします。title

4

6 に答える 6

4

パラメーターを使用して準備済みステートメントを使用することを検討してください。

PreparedStatement pstmt = con.prepareStatement(
    "INSERT INTO genes (sent, title) VALUES (?, ?)");
pstmt.setString(1, sent);
pstmt.setString(2, title);
pstmt.executeUpdate();
于 2012-07-04T05:01:41.223 に答える
3

クエリ パラメータを入力するには、 PreparedStatementを使用する必要があります。入力パラメーターに単一引用符がある場合は、それをエスケープします。

クエリとステートメント オブジェクトを次のように変更すると、機能するはずです。

String query = "INSERT INTO genes (sent, title) VALUES (? , ?)";
PreparedStatement pst = con.prepareStatement( query );
pst.setString( 1, sent );
pst.setString( 2, title );

int insertResult = pst.executeUpdate();
于 2012-07-04T05:01:52.907 に答える
1

そのために使うべきPreparedStatementsです。PreparedStatementjava.sql.*名前空間の下にあります。

String insertString = "INSERT INTO genes (sent, title) VALUES (?,?)";
// con is your active connection
PreparedStatement insertX = con.prepareStatement(updateString); 
insertX.setString(1, sent);
insertX.setString(2, title);
insertX.executeUpdate();
于 2012-07-04T05:02:39.227 に答える
1

このような SQL ステートメントを連結しないでください。代わりに、準備済みステートメントを使用してください。

String query = "INSERT INTO genes (sent, title) VALUES (?,?)";
PreparedStatement stmt = con.prepareStatement(query);

p.setString(1, sent);
p.setString(2, title);
p.executeUpdate();

文字列連結方式を使用すると、危険なsql-injection攻撃にさらされることになります。

于 2012-07-04T05:03:03.147 に答える
1
String query = "INSERT INTO genes (sent, title) VALUES (?, ?)";
PreparedStatement pt = con.prepareStatement(query);
pt.setString(1, sent);
pt.setString(2, title);
pt.executeUpdate();
于 2012-07-04T05:44:28.780 に答える
0

文字列から削除するか、 from'に置き換えてください。\''

Mysql は\'、特殊文字の形式でのみ許可します。

于 2012-07-04T05:06:43.683 に答える