2016-03-27 18 views
1

私のプログラムで、組み込みH2データベースとのJDBC接続をしようとしています。問題は、 "WHERE ID ="で簡単なクエリを実行できなかったことです。私のdatabseでは、IDは整数ではありません(私の例では 'D58BE')。H2データベースのSELECT * 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'"); 

問題は、同じクエリが(「MILESTONE WHERE IDを= 『D58BE』 SELECT * FROM」)私の埋め込まデータベースで完璧に動作していることである(私が結果を検証データベースを管理するために提供されるh2.jar)。日食で、私はこの例外を持っていたものの:

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

、それを直接実行文を作成し、SQLを実行するには...

+0

:あなたのケースのためにhttps://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html

それはの線に沿って何かする必要があります一重引用符 '' 'は削除されたか、二重引用符' ''で置換されたように見えます。実際にD50BEを(存在しない)列名に変換します。なぜなら、探検するべきものです。そして、いくつかの不規則なJavaソース変換と関連があります。 –

答えて

4

を私は多くのことをしようとしたが、それはまだ動作しません:

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(); 

EDIT詳しい例えば

ともResultSetをどのように処理するか、次のチュートリアルを見ることができます:

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