我有一个客户端,一个服务器,一个RMI服务器和一个PostgreSQL数据库。 我正在创建一个新用户,所以我自然想检查我的数据库中是否已存在该用户名。所以这就是我在做的事情:
但是,每当我尝试插入一个新用户时,无论它是否存在于DB中,它总是说用户已经存在......
这是我在RMI服务器中使用的代码:
String[] userInfo = (String[]) clrqst.getRequest()[1];
clrqst.setStage(2);
myRequests.add(clrqst);
try
{
query = "SELECT * FROM utilizador WHERE username= '"+userInfo[2]+"'";
request = connection.createStatement();
rs = request.executeQuery(query);
if (rs == null)
{
try {
query = "INSERT INTO utilizador (nome, apelido, username, pass, saldo) VALUES (?,?,?,?,?)";
preparedstatement = connection.prepareStatement(query);
preparedstatement.setString(1, userInfo[0]);
preparedstatement.setString(2, userInfo[1]);
preparedstatement.setString(3, userInfo[2]);
preparedstatement.setString(4, userInfo[3]);
preparedstatement.setInt(5, 100);
preparedstatement.executeUpdate();
} catch (SQLException e) {
System.err.println("SQLException:" + e);
}
try {
query = "SELECT id FROM utilizador WHERE username='" + userInfo[0] + "'";
request = connection.createStatement();
rs = request.executeQuery(query);
rs.next();
resposta[0] = "infosave";
resposta[1] = rs.getInt(1);
clrqst.setResponse(resposta);
clrqst.setStage(3);
updateRequest(clrqst);
} catch (SQLException ex) {
System.err.println("Erro:" + ex);
} finally {
if (request != null) {
try {
request.close();
} catch (SQLException ex) {
Logger.getLogger(RMIServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
else{
resposta[0] = "user_already_exists";
resposta[1] = userInfo[2];
clrqst.setResponse(resposta);
clrqst.setStage(3);
}
} catch (SQLException e) {
System.err.println("SQLException:" + e);
}
return clrqst;
我无法弄清楚我做错了什么。有人能指出我正确的方向吗? 谢谢!
答案 0 :(得分:3)
查询返回结果集。结果集只是......一组。即使是空集仍然是一套。你想知道的是"连续返回?"。假设username
列是唯一的(公平假设),您的查询将返回0或1行的结果集。
rs.next
()方法前进到下一行(起始位置在第一行之前)。如果有要前进的行,则返回true;如果结果集中的行用尽,则返回false。
由于您只需要知道是否有1行回来,您的解决方案就像调用rs.next()
并检查结果集一样简单。
rs = request.executeQuery(query);
if (!rs.next())
{
// Insert the new user.