为什么此查询 return NULL?

Why does this Query return NULL?

我有一个 derby 用户数据库,当用户在应用程序上单击登录时,我会查询它。

但是,当我使用参数 [user] derby return 查询用户 table 时,它是一个空对象而不是记录,它应该 return。

这是我的代码:

String ssql = "SELECT * FROM USERS WHERE UNAME LIKE ?";
   try{
       DriverManager.registerDriver(new org.apache.derby.jdbc.EmbeddedDriver());
       con = DriverManager.getConnection(url);
       sql = con.prepareStatement(ssql, Statement.RETURN_GENERATED_KEYS);
       sql.setString(1, cbox_chooseUser.getSelectedItem().toString());
       sql.executeQuery();
       ResultSet rs = sql.getGeneratedKeys();
           try{
              while (rs.next()) {
                 if(rs.getString("PW").toCharArray().equals(txt_password.getPassword())){
                     sql.close();
                     con.close();
                     return true;
                  }
             } catch (NPE ...) {...}
    }

我与测试用户多次尝试,密码和用户名都设置为 "test";但我总是得到同样的错误。 为什么记录集总是空的?

感谢您的帮助:)

documentation

ResultSet getGeneratedKeys() throws SQLException

Retrieves any auto-generated keys created as a result of executing this Statement object.

If this Statement object did not generate any keys, an empty ResultSet object is returned.

您的 select 语句未生成任何键,这就是它返回空结果集的原因。您没有插入任何内容,因此没有生成密钥。

你可以试试ResultSet rs = sql.executeQuery();。它应该有效。

你用错了。

生成键的概念应该只用在insert类型查询的case DML中,而不是在select查询的情况下。

select 只是 select 来自 table 的行。在这种情况下,不可能生成任何密钥。

insert 查询的情况下,如果任何列配置为 auto increment 或某种功能,则将生成一些键。可以使用 java.

中的 Statement.RETURN_GENERATED_KEYS 捕获这些密钥

因为您正在使用 select 查询,所以不需要使用 Statement.RETURN_GENERATED_KEYS.

你只需要修改以下几行就可以了。

sql = con.prepareStatement(ssql, Statement.RETURN_GENERATED_KEYS);
sql.setString(1, cbox_chooseUser.getSelectedItem().toString());
sql.executeQuery();
ResultSet rs = sql.getGeneratedKeys();

sql = con.prepareStatement( ssql );
sql.setString( 1, cbox_chooseUser.getSelectedItem().toString() );
ResultSet rs = sql.executeQuery();