MySQLSyntaxError插入MySQL数据库

时间:2014-04-08 10:06:51

标签: java mysql jdbc insert

我想将数据插入到我正在使用的MySQL数据库中。我得到这个ERROR。这是我的代码:

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;
}

3 个答案:

答案 0 :(得分:3)

我认为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注射是开放的​​

参考:

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

答案 2 :(得分:0)

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

虽然,我建议你使用预准备语句注入变量值。