Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 JDBC插入不工作_Java_Mysql_Jdbc - Fatal编程技术网

Java JDBC插入不工作

Java JDBC插入不工作,java,mysql,jdbc,Java,Mysql,Jdbc,我只是想在表中从java应用程序插入一个新行到SQL数据库。我以前也使用过同样的代码,但由于某些原因,它不起作用。我通过将查询直接插入phpmyadmin来检查它,它可以正常工作。这是我的密码: 我实际尝试发送查询的位置: static Connection conn = MySQLAccess.connectDB(); static PreparedStatement pst = null; static ResultSet rs = null; public static String s

我只是想在表中从java应用程序插入一个新行到SQL数据库。我以前也使用过同样的代码,但由于某些原因,它不起作用。我通过将查询直接插入phpmyadmin来检查它,它可以正常工作。这是我的密码:

我实际尝试发送查询的位置:

static Connection conn = MySQLAccess.connectDB();
static PreparedStatement pst = null;
static ResultSet rs = null;

public static String submit(String usrn, String psw){
    String sql = "INSERT INTO tbl_user VALUES('', '"+usrn+"', '"+psw+"')";

    try {
       pst = conn.prepareStatement(sql);
       System.out.println(sql);
       rs=pst.executeQuery();

       if (rs.next()){
           return "ok";
       } else {
           return "fail";
       }
    } catch (Exception e){
        return "fail_connection";
    }
}
MySQLAccess.java(我确信它是有效的,因为我在代码的其他地方使用它):


我刚刚更改了代码(Luiggi Mendoza的建议),但没有结果:

public static String submit(String usrn, String psw){
        //String sql = "INSERT INTO tbl_user VALUES('', '"+usrn+"', '"+psw+"')";
        String sql = "INSERT INTO tbl_user VALUES('', '?', '?')";
        String result = "failed";
        try (Connection conn = MySQLAccess.connectDB();
             PreparedStatement pst = conn.prepareStatement(sql)) {
            pst.setString(1, usrn);
            pst.setString(2, psw);
            pst.executeUpdate();
            result = "worked";
        } catch (SQLException e) {
            //handle your exception...
        }
        return result;
    }

您应该使用executeUpdate,而不是executeQuery

三个问题:

  • 使用
    PreparedStatement#executeUpdate
    而不是
    PreparedStatement#executeQuery

  • 将变量保持在尽可能小的范围内。不要将它们设置为类中的
    静态
    变量

  • 不要将参数连接到查询字符串中。相反,请使用
    PreparedStatement#setXyz
    方法设置适当的参数

  • 将所有这些粘合在一起会生成以下代码:

    public static String submit(String usrn, String psw){
        //String sql = "INSERT INTO tbl_user VALUES('', '"+usrn+"', '"+psw+"')";
        String sql = "INSERT INTO tbl_user VALUES('', ?, ?)";
        String result = "failed";
        try (Connection conn = MySQLAccess.connectDB();
             PreparedStatement pst = conn.prepareStatement(sql)) {
            pst.setString(1, usrn);
            pst.setString(2, psw);
            pst.executeUpdate();
            result = "worked";
        } catch (SQLException e) {
            //handle your exception...
        }
        return result;
    }
    

    根据您的新代码,问题在于:

    String sql = "INSERT INTO tbl_user VALUES('', '?', '?')";
                                                  ^ ^  ^ ^
    
    您正在用引号将参数字符
    括起来
    。删除这些引号,如我的代码所示:

    String sql = "INSERT INTO tbl_user VALUES('', ?, ?)";
    //No quotes around ?
    

    当您应该使用
    PreparedStatement\executeUpdate
    时,您正在使用
    PreparedStatement\executeQuery
    。您的SQL查询易受SQL注入攻击。请使用PreparedStatement。它似乎在pst.setString(1,usrn)处出错;pst固定管柱(2,psw);我试图在这两行之后系统地找出一些东西,但什么也没有出现。它似乎在pst.setString(1,usrn)处出错;pst固定管柱(2,psw);我试图在这两行之后系统地找出一些东西,但什么也没有出现。您是否至少通过使用
    e.printStackTrace()
    来处理异常?您现在遇到了什么新问题?java.sql.SQLException:参数索引超出范围(1>参数数,即0)。我猜preparedStatement中有问题,我也尝试将1更改为0,将2更改为1,但没有成功OK它似乎可以正常工作,但我收到以下错误:java.sql.SQLException:不正确的整数值:''对于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)第1行的列“usr_id”我知道这是因为我试图插入错误的值,但我数据库中的“usr_id”是一个自动递增的数字。我该如何处理这个问题?@Rémi如果列是数字并且支持
    auto_increment
    ,那么在其中插入
    NULL
    (不是
    'NULL'
    ,它们是不同的!),数据库将为您生成新值。
    String sql = "INSERT INTO tbl_user VALUES('', ?, ?)";
    //No quotes around ?