0

我正在使用 java 文件在 Mysql 数据库中插入值 -

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

其中senttitle是应用某种算法后提取的变量字符串。但这会在senttitle包含单个 qoutes 时给出 sql 错误。

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 注入攻击。

于 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 回答