我使用 -
从java文件中插入Mysql数据库中的值String query = "INSERT INTO genes (sent, title) VALUES ('"+sent+"','"+title+"')";
Statement stmt = con.createStatement();
int rs = stmt.executeUpdate(query);
其中sent
和title
是应用某些算法后提取的变量字符串。但是,当sent
或title
包含单个qoutes时,这会导致sql错误。
答案 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仅允许以\'
格式表示特殊字符。