Java MySQLSyntaxError插入MySQL数据库
我想将数据插入我正在使用的MySQL数据库。我得到了这个。这是我的代码:Java MySQLSyntaxError插入MySQL数据库,java,mysql,jdbc,insert,Java,Mysql,Jdbc,Insert,我想将数据插入我正在使用的MySQL数据库。我得到了这个。这是我的代码: public boolean insertValues(String gisuniqkey,String objtype,String objkey,String lat,String lng) { int rc=-1; try { if(conn==null) { System.out.println("The connection was not
public boolean insertValues(String gisuniqkey,String objtype,String objkey,String lat,String lng)
{
int rc=-1;
try {
if(conn==null)
{
System.out.println("The connection was not initialized.");
return false;
}
Statement st=(Statement) conn.createStatement();
//lots of String concatenation,very expensive...BAD...use StringBuilder instead
String sql="Insert into ZMAPERP_GIS_DB (GISUNIQKEY,OBJTYPE,OBJKEY,LATITUDE,LONGITUDE) values("+gisuniqkey+","+objtype+","+objkey+","+lat+","+lng+");";
System.out.println(sql);
rc=st.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rc>0?true:false;
}
我认为insert语句应该是这样的,在值周围使用单引号:
"Insert into ZMAPERP_GIS_DB (GISUNIQKEY,OBJTYPE,OBJKEY,LATITUDE,LONGITUDE) values('"+gisuniqkey+"','"+objtype+"','"+objkey+"','"+lat+"','"+lng+"');";
编辑
在命令中自己尝试一下。什么会起作用:
备选案文1:
INSERT INTO ZMAPERP_GIS_DB (GISUNIQKEY,OBJTYPE,OBJKEY,LATITUDE,LONGITUDE)
VALUES(asdasd,asdasd,asdasd,asdasd);
备选案文2:
INSERT INTO ZMAPERP_GIS_DB (GISUNIQKEY,OBJTYPE,OBJKEY,LATITUDE,LONGITUDE)
VALUES('asdasd','asdasd','asdasd','asdasd');
我认为选择2会奏效
编辑2
但正如评论中提到的那样。建议使用prepare语句。因为这对sql注入是开放的
参考:
尽管如此,我还是建议您使用preparedstatement注入变量值。您应该使用PreparedStatements来避免生成查询字符串的问题
PreparedStatement statement = null;
String insertSql = "Insert into ZMAPERP_GIS_DB (GISUNIQKEY,OBJTYPE,OBJKEY,LATITUDE,LONGITUDE) values (?,?,?,?,?)";
conn.setAutoCommit(false);
statement = conn.prepareStatement(insertSql);
statement.setString(1, gisuniqkey);
statement.setString(2, objtype);
statement.setString(3, objkey);
statement.setString(4, lat);
statement.setString(5, lng);
con.commit();
你失踪了commas@Strawberry倒逗号但是在哪里,这个字符串的正确版本是什么?我建议改为PreparedStatement,而不是构建查询字符串。为什么使用单引号?是的。否则,它将不会被认为是SQL命令,值得一提的是,他应该考虑准备好的语句。
PreparedStatement statement = null;
String insertSql = "Insert into ZMAPERP_GIS_DB (GISUNIQKEY,OBJTYPE,OBJKEY,LATITUDE,LONGITUDE) values (?,?,?,?,?)";
conn.setAutoCommit(false);
statement = conn.prepareStatement(insertSql);
statement.setString(1, gisuniqkey);
statement.setString(2, objtype);
statement.setString(3, objkey);
statement.setString(4, lat);
statement.setString(5, lng);
con.commit();