[英]How to use prepared statement for select query in Java?
我曾多次嘗試使用准備好的語句,但它返回 SQL 異常。 這是我的代碼:
public ArrayList<String> name(String mobile, String password) {
ArrayList<String> getdata = new ArrayList<String>();
PreparedStatement stmt = null;
try {
String login = "select mobile, password from tbl_1 join tbl_2 on tbl_1.fk_id=2.Pk_ID where mobile=? and password=?";
String data = "select * from tbl_2 where password='" + password + "'";
PreparedStatement preparedStatement = conn.prepareStatement(login);
preparedStatement.setString(1, mobile);
preparedStatement.setString(1, password);
ResultSet rs = preparedStatement.executeQuery(login);
Statement stmts = (Statement) conn.createStatement();
if (rs.next()) {
System.out.println("Db inside RS");
ResultSet data = stmts.executeQuery(data);
while (data.next()) { /* looping through the resultset */
getdata.add(data.getString("name"));
getdata.add(data.getString("place"));
getdata.add(data.getString("age"));
getdata.add(data.getString("job"));
}
}
} catch (Exception e) {
System.out.println(e);
}
return getdata;
}
運行此程序時,我收到以下 SQL 異常:
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 '? and password=?' at line 1.
有什么建議可以使這項工作? 任何一段代碼都值得贊賞。
您需要使用:
preparedStatement.executeQuery();
代替
preparedStatement.executeQuery(login);
當您將字符串傳遞給executeQuery()
,該查詢按字面執行,因此?
發送到數據庫,然后創建錯誤。 通過傳遞查詢字符串,您不會執行為其傳遞值的“緩存”准備好的語句。
對於這兩個參數,您使用preparedStatement.setString(1, ..);
所以第一個參數設置了兩次。 但您從未設置第二個參數的值。
所以改變
preparedStatement.setString(1, mobile);
preparedStatement.setString(1, password);
到
preparedStatement.setString(1, mobile);
preparedStatement.setString(2, password);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.