H2数据库中的SELECT * WHERE

时间:2016-03-27 18:14:10

标签: java h2

我试图在我的程序中使用我的嵌入式H2数据库进行JDBC连接。问题是我无法使用" WHERE ID ="执行简单查询。在我的数据库中,ID是字符串而不是整数(' D58BE'在我的示例中)。

有我的代码:

   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'");

问题是SAME查询(" SELECT * FROM MILESTONE WHERE ID =' D58BE'")在我的嵌入式数据库中完美运行(我用h2验证结果)。用于管理数据库的jar)。在eclipse中,我有这个例外:

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

我尝试了很多东西,但它仍然没有用......

1 个答案:

答案 0 :(得分: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();

修改

有关详细示例以及如何处理ResultSet,您可以查看以下教程: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);
}