Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MySQLSyntaxError插入MySQL数据库_Java_Mysql_Jdbc_Insert - Fatal编程技术网

Java MySQLSyntaxError插入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

我想将数据插入我正在使用的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;
}

我认为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();