繁体   English   中英

使用Prepared插入MySQL数据库

[英]Inserting into MySQL database using Prepared

我正在使用PreparedStatement insert到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并得到此错误

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

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

您使用语句插入的Sql查询不正确。 您错过了objkey变量的开头'。 正确的查询是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM