Java JDBC插入不工作
我只是想在表中从java应用程序插入一个新行到SQL数据库。我以前也使用过同样的代码,但由于某些原因,它不起作用。我通过将查询直接插入phpmyadmin来检查它,它可以正常工作。这是我的密码: 我实际尝试发送查询的位置: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
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 ?