我收到此错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以便在'?'附近使用正确的语法在第1行
public static Person getDetails(int id) {
Connection conn = null;
PreparedStatement stmt = null;
Person newPerson = new Person();
try{
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
//STEP 4: Execute a query
System.out.println("Creating statement...");
String sql = "SELECT firstName, lastName, birthday FROM person WHERE id=?";
System.out.println("SQL Statement:\n\t" + stmt);
stmt = conn.prepareStatement(sql);
System.out.println("Prepared Statement before bind variables set:\n\t" + stmt.toString());
//Bind values into the parameters.
System.out.println("ID " + id);
stmt.setInt(1, id); // This would set id
System.out.println("Prepared Statement after bind variables set:\n\t" + stmt.toString());
// Let us select all the records and display them.
ResultSet rs = stmt.executeQuery(sql);
//STEP 5: Extract data from result set
while(rs.next()){
//Retrieve by column name
String firstName = rs.getString("firstName");
String lastName = rs.getString("lastName");
Date birthday = rs.getDate("birthday");
newPerson.setBirthday(birthday);
newPerson.setFirstName(firstName);
newPerson.setLastName(lastName);
newPerson.setId(id);
//Display values
System.out.print("ID: " + id);
System.out.print(", First: " + firstName);
System.out.println(", Last: " + lastName);
System.out.println(", Birthday: " + birthday);
}
//STEP 6: Clean-up environment
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}finally{
//finally block used to close resources
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}// nothing we can do
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}//end finally try
}//end try
System.out.println("Goodbye!");
return newPerson;
}
我没有where子句就成功执行了查询。我看了很多例子,没有尝试解决这个问题。
答案 0 :(得分:2)
不要将executeQuery(String)
与预先准备的陈述一起使用......
而不是......
ResultSet rs = stmt.executeQuery(sql);
使用...
ResultSet rs = stmt.executeQuery();
答案 1 :(得分:1)
如果我理解您的问题,问题是您使用了Statement.executeQuery(String)
。我很确定你打算使用PreparedStatement.executeQuery()
,
// Let us select all the records and display them.
ResultSet rs = stmt.executeQuery(sql); // <-- adding sql here makes it use the
// Statement version.
您想使用
// Let us select all the records and display them.
ResultSet rs = stmt.executeQuery(); // <-- use the version from PreparedStatement
答案 2 :(得分:1)
更改
ResultSet rs = stmt.executeQuery(sql);
到
ResultSet rs = stmt.executeQuery();