为什么此查询 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";但我总是得到同样的错误。
为什么记录集总是空的?
感谢您的帮助:)
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();
我有一个 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";但我总是得到同样的错误。 为什么记录集总是空的?
感谢您的帮助:)
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();