2014-04-08 131 views
0

我想将数据插入,我using.I获得MySQL数据库这ERROR。这是我的代码:MySQLSyntaxError插入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 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; 
} 
+0

你缺少引号 – Strawberry

+0

@Strawberry引号,但在那里,这将是这串 – vamsiampolu

+1

的正确版本,我会建议更改为一个PreparedStatement而不是建立您的查询字符串。 –

回答

3

我想插入语句应该是这样的,使用单引号括起来的值:

"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

但作为在评论中提到。建议使用准备语句。因为这是开放的SQL注入

参考:

+0

为什么要用单引号? – vamsiampolu

+1

是的。因为否则它不会被识别为一个sql命令 – Arion

+0

真的值得提及他应该考虑准备语句。 –

0
String sql="Insert into ZMAPERP_GIS_DB (GISUNIQKEY,OBJTYPE,OBJKEY,LATITUDE,LONGITUDE) values('"+gisuniqkey+"','"+objtype+"','"+objkey+"','"+lat+"','"+lng+"');"; 

虽然,我会建议你使用准备好的声明中注入的变量值。

1

您应该使用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();