java - 使用Prepared插入MySQL数据库

标签 java mysql jdbc insert

我正在使用PreparedStatementinsert进入mysql,当我 checkin 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();
    }

最佳答案

您对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,以便该语句实际上正确关闭。

关于java - 使用Prepared插入MySQL数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22938817/

相关文章:

java - 如何使用 Weblogic 10.3 获取从 JNDI 数据源获取的 JDBC 连接以参与 UserTransaction?

java方法在LDAP的ssha中进行密码加密

java - JTextArea 滚动功能

java - 将两个列表组合成一个唯一的列表(基于一定的字段逻辑)

java - 使用终端中的文本创建数组

mysql - 如果 IS_CLOSED 为真,则显示 'closed'

mysql - 即将到来的生日年错误 (SQL)

php - MySql Select语句问题

java - 更新 SQL 查询在 Java Swing 中不起作用

mysql - Jmeter连接异常