[英]JDBC Question Mark in SQL Syntax
我在Java上是n00b,這是我使用JDBC的第一步(大約4天,大約12小時/天... <3 Java;)。 簡單的查詢肯定會出現問題。 我想編寫一個方法女巫返回ID大於參數的記錄列表。 如此寫道:
public List<Person> whereId(int id) {
List<Person> persons = new ArrayList<Person>();
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = DBConnection.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery("SELECT * FROM person WHERE id>?");
while(resultSet.next()) {
Person person = new Person();
person.setId(resultSet.getInt("id"));
person.setfirstName(resultSet.getString("firstName"));
person.setlastName(resultSet.getString("lastName"));
persons.add(person);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(resultSet!= null) {
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(statement!=null) {
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(connection!=null) {
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return persons;
}
}
控制台告訴我手冊中的語法與我的MariaDB相對應。 我在同一個類中寫了很少的方法,但是僅此一個問題。 如果您知道如何解決,請告訴我。 也許這是一個簡單的問題,但我沒有注意到。 我在這個網站上尋找答案,但沒有找到答案;(
問候 :)
嘗試更換...
statement = connection.createStatement();
resultSet = statement.executeQuery("SELECT FROM person WHERE id>?");
與
statement = connection.prepareStatement("SELECT * FROM person WHERE id > ?");
statement.setInt(1, minId);
resultSet = statement.executeQuery();
您還需要設置minId
。
好了,您正在使用Statement
執行查詢,但是Statement
不支持占位符(?)。 但是, Prepared Statement
支持占位符。
采用
PreparedStatement preparedstatement= connection.PreaparedStatement("SELECT * FROM person WHERE id > ?");
對於DQL, executeQuery()
是更好的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.