使用Prepared插入MySQL数据库

时间:2014-04-08 13:38:52

标签: java mysql jdbc insert

我正在使用PreparedStatementinsert进入mysql,当我在mysql console检查Empty set时,我没有收到任何错误但未插入数据:

  public void insertGeometryValues(String gisuniqkey,String objkey,String objtype,String geometry)
{
    PreparedStatement statement=null;
    String sql="Insert into ZMAPERP_GIS_DB (GISUNIQKEY, GEOMETRY,OBJTYPE,OBJKEY) values(?,?,?,?);";
    try {
        conn.setAutoCommit(false);
        statement=(PreparedStatement) conn.prepareStatement(sql);
        statement.setString(1, gisuniqkey);
        statement.setString(2,geometry);
        statement.setString(3,objtype);
        statement.setString(4,objkey);
        conn.commit();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我也尝试使用这样的Statement并获得此ERROR

 try {
        if(conn==null)
        {
            System.out.println("The connection was not initialized.");
            return false;
        }
        Statement st=(Statement) conn.createStatement();
        String sql="Insert into ZMAPERP_GIS_DB (GISUNIQKEY, GEOMETRY,OBJTYPE,OBJKEY) values('"+gisuniqkey+"','"+geometry+"','"+objtype+"',"+objkey+"');";
        System.out.println(sql);
        rc=st.executeUpdate(sql);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:0)

您对PreparedStatement的使用从未实际执行过该语句。将您的代码更改为:

public void insertGeometryValues(String gisuniqkey,String objkey,String objtype,String geometry) {
    String sql="Insert into ZMAPERP_GIS_DB (GISUNIQKEY, GEOMETRY,OBJTYPE,OBJKEY) values(?,?,?,?);";
    conn.setAutoCommit(false);
    try (PreparedStatement statement = conn.prepareStatement(sql)) {
        statement.setString(1, gisuniqkey);
        statement.setString(2,geometry);
        statement.setString(3,objtype);
        statement.setString(4,objkey);
        statement.executeUpdate(); // <---- This is what is missing!
        conn.commit();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我还包含了try-with-resources,以便语句实际上已正确关闭。

答案 1 :(得分:0)

马克给出的答案是正确的。这应该可以帮助您使用预准备语句插入。

您使用Statement插入的SQL查询不正确。你错过了'objkey变量'的起点。正确的查询是

 String sql="Insert into ZMAPERP_GIS_DB (GISUNIQKEY, GEOMETRY,OBJTYPE,OBJKEY) values('"+gisuniqkey+"','"+geometry+"','"+objtype+"','"+objkey+"');";