2014-04-08 175 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();