我尝试使用JDBC使用以下方法使用PreparedStatement插入userId(int)和userName(String):
public boolean saveUser(int userId, String userName){
boolean saveStatus = false;
try {
connection.setAutoCommit(true);
String sql = "insert into testtable values(?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, userId);
statement.setString(2, userName);
saveStatus = statement.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}finally{
Connector.closeConnections();
}
return saveStatus;
}
我得到以下stacktrace:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in
your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near '?,?)' at line 1
我做错了什么?
答案 0 :(得分:13)
试试这个应该有效:
try {
connection.setAutoCommit(true);
String sql = "insert into testtable values(?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, userId);
statement.setString(2, userName);
saveStatus = statement.execute();
} catch (SQLException e) {
e.printStackTrace();
}
return saveStatus;
}
PreparedStatement是预编译语句。你不必在执行时提供sql字符串。
答案 1 :(得分:5)
您的代码存在根本性错误。
创建PreparedStatement
后,我们需要调用preparedStatement.executeUpdate();
而不再传递SQL
以下是您问题的完整代码。
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class SampleMysql {
public static Connection getConnection() throws SQLException {
Driver drv = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(drv);
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sample","sample", "sample");
return con;
}
public static int saveUser(int userId, String userName){
int saveStatus = 0;
Connection connection = null;
try {
connection = getConnection();
connection.setAutoCommit(true);
String sql = "INSERT INTO testtable VALUES(?,?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, userId);
preparedStatement.setString(2, userName);
saveStatus = preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return saveStatus;
}
public static void main(String[] a) {
System.out.println(saveUser(1, "sample"));
}
}
表格脚本如下。
CREATE TABLE testtable(user_ID INT(10), user_name VARCHAR(10));