JDBC INSERT不起作用

时间:2015-04-20 15:54:11

标签: java mysql jdbc

我只是想在表中将一个新行从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(我肯定可以使用,因为我使用的是代码中的其他位置):

public class MySQLAccess {
    Connection conn=null;
    public static Connection connectDB (){
        try{
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/g52gui","root","");
            return conn;
        }catch(Exception e){
            return null;
        }
    }
}

我刚刚更改了我的代码(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;
    }

2 个答案:

答案 0 :(得分:2)

三个问题:

  1. 使用PreparedStatement#executeUpdate而不是PreparedStatement#executeQuery

  2. 将变量保持在最窄的范围内。不要在班级中将它们设置为static变量。

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

  4. 将所有这些粘合在一起会产生以下代码:

    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 ?
    

答案 1 :(得分:0)

你应该使用executeUpdate而不是executeQuery;