我只是想在表中将一个新行从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;
}
答案 0 :(得分:2)
三个问题:
使用PreparedStatement#executeUpdate
而不是PreparedStatement#executeQuery
。
将变量保持在最窄的范围内。不要在班级中将它们设置为static
变量。
不要将参数连接到查询字符串中。相反,请使用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 ?
答案 1 :(得分:0)
你应该使用executeUpdate而不是executeQuery;