繁体   English   中英

为什么此查询返回NULL?

[英]Why does this Query return NULL?

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

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

这是我的代码:

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 ...) {...}
    }

我将pw和用户名都设置为“ test”的测试用户尝试了多次; 但我总是遇到同样的错误。 为什么记录集始终为Null?

谢谢你的帮助 :)

文件

ResultSet getGeneratedKeys()引发SQLException

检索由于执行此Statement对象而创建的任何自动生成的键。

如果此Statement对象未生成任何键,则返回一个空的ResultSet对象

您的select语句未生成任何键,这就是它返回空ResultSet的原因。 您不会插入任何内容,因此不会生成任何密钥。

您可以尝试ResultSet rs = sql.executeQuery(); 它应该工作。

您以错误的方式使用它。

生成的键概念仅应在insert类型查询的DML情况下使用,而在select查询的情况下则不应使用。

select只需从表中选择行。 在这种情况下,不会生成任何密钥。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM