2016-03-27 43 views
1

我想在我的程序中使用我的Embedded H2數據庫執行JDBC連接。問題是我無法用「WHERE ID =」執行一個簡單的查詢。在我的數據庫中,ID是字符串不是整數(在我的例子中是'D58BE')。在H2數據庫中選擇* WHERE數據庫

有我的代碼:

public Milestone findbyId(String id) throws ClassNotFoundException, SQLException { 

    Class.forName("org.h2.Driver"); 
    Connection connection = DriverManager.getConnection("jdbc:h2:~/dao_db", "sa", ""); 
    PreparedStatement prepareStatement = connection.prepareStatement("SELECT * FROM MILESTONE WHERE ID= 'D58BE'"); 

的問題是相同的查詢(「SELECT * FROM MILESTONE WHERE ID =‘D58BE’」)完全在我的嵌入式數據庫(我驗證與結果h2.jar提供來管理數據庫)。雖然在Eclipse中,我有這樣的例外:

Exception in thread "main" org.h2.jdbc.JdbcSQLException: Column "D58BE" not found [42122-191] 

我試過的東西很多,但它仍然沒有工作...

+0

似乎單引號'''被刪除或被雙引號替換''' - 實際上將D50BE轉換爲(不存在的)列名稱。爲什麼這是一件值得探討的事情。而且還有一些不規則的java源代碼轉換。 –

回答

4

直接執行它,創建一個語句並執行SQL:

Statement statement = connection.createStatement(); 
statement.executeQuery("SELECT * FROM MILESTONE WHERE ID= 'D58BE'"); 

您使用的是事先準備好的聲明,所以你需要使用佔位符:

PreparedStatement statement = connection.prepareStatement("SELECT * FROM MILESTONE WHERE ID=?); 
statement.setString(1, "D58BE"); 
statement.executeQuery(); 

編輯

對於一個詳細的例子,以及如何處理一個結果,你可以看看下面的教程:https://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html

對於你的情況應該是沿着線的東西:

ResultSet rs = stmt.executeQuery(); 
while (rs.next()) { 
    String id = rs.getString("ID"); 
    String name = rs.getNamex("NAME"); // Assuming there is a column called name. 
    System.out.println(id); 
} 
+0

它的作品謝謝!但是你能告訴我嗎?如果我想在恢復它的ID後創建對象的一個​​實例,我該如何使用ResultSet(在這個例子中)。或者我應該創建另一個話題? – salamanka44

+0

感謝您的編輯! – salamanka44