插入查询中由单引号引起的错误

时间:2012-07-04 04:56:52

标签: java mysql sql

我使用 -

从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错误。

6 个答案:

答案 0 :(得分:4)

考虑使用带参数的预准备语句:

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

答案 1 :(得分: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();

答案 2 :(得分:1)

您应该使用PreparedStatements PreparedStatement 位于java.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();

答案 3 :(得分:1)

你永远不应该像这样连接SQL语句,而是使用prepared statements

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

请从字符串中删除'或从\' '替换。

Mysql仅允许以\'格式表示特殊字符。