如何检查(java)我的数据库(postgres)中是否已经存在用户名?
我有一个客户端、一个服务器、一个RMI服务器和一个PostgreSQL数据库。 我正在创建一个新用户,因此我自然希望检查我的数据库中是否已经存在该用户名。这就是我正在做的:如何检查(java)我的数据库(postgres)中是否已经存在用户名?,java,postgresql,rmi,Java,Postgresql,Rmi,我有一个客户端、一个服务器、一个RMI服务器和一个PostgreSQL数据库。 我正在创建一个新用户,因此我自然希望检查我的数据库中是否已经存在该用户名。这就是我正在做的: 对要创建的用户名进行选择查询 如果我的RequestSet为null,这意味着DB返回的表是空的,因此没有任何具有该用户名的用户,我可以创建一个新用户 它不是空的,我无法创建新用户 然而,每当我尝试插入一个新用户时,无论它是否存在于数据库中,它总是说该用户已经存在 这是我在RMI服务器中使用的代码: String[] u
- 对要创建的用户名进行选择查询
- 如果我的RequestSet为null,这意味着DB返回的表是空的,因此没有任何具有该用户名的用户,我可以创建一个新用户
- 它不是空的,我无法创建新用户
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;
我不知道我做错了什么。有人能给我指一下正确的方向吗?
谢谢大家! 查询返回一个结果集。结果集就是。。。一套。即使是一个空的集合也是一个集合。您想知道的是“a行返回了吗?”。假设
username
列是唯一的(合理的假设),您的查询将返回一个包含0行或1行的结果集
rs.next
()方法前进到下一行(起始位置在第一行之前)。如果要前进到某一行,则返回true;如果结果集中的行已用完,则返回false
rs = request.executeQuery(query);
if (!rs.next())
{
// Insert the new user.
因为您只需要知道是否有1行返回,所以您的解决方案非常简单,只需调用rs.next()
并检查结果集即可
rs = request.executeQuery(query);
if (!rs.next())
{
// Insert the new user.
查询返回一个结果集。结果集就是。。。一套。即使是一个空的集合也是一个集合。您想知道的是“a行返回了吗?”。假设
username
列是唯一的(合理的假设),您的查询将返回一个包含0行或1行的结果集
rs.next
()方法前进到下一行(起始位置在第一行之前)。如果要前进到某一行,则返回true;如果结果集中的行已用完,则返回false
rs = request.executeQuery(query);
if (!rs.next())
{
// Insert the new user.
因为您只需要知道是否有1行返回,所以您的解决方案非常简单,只需调用rs.next()
并检查结果集即可
rs = request.executeQuery(query);
if (!rs.next())
{
// Insert the new user.
查询返回一个结果集。结果集就是。。。一套。即使是一个空的集合也是一个集合。您想知道的是“a行返回了吗?”。假设
username
列是唯一的(合理的假设),您的查询将返回一个包含0行或1行的结果集
rs.next
()方法前进到下一行(起始位置在第一行之前)。如果要前进到某一行,则返回true;如果结果集中的行已用完,则返回false
rs = request.executeQuery(query);
if (!rs.next())
{
// Insert the new user.
因为您只需要知道是否有1行返回,所以您的解决方案非常简单,只需调用rs.next()
并检查结果集即可
rs = request.executeQuery(query);
if (!rs.next())
{
// Insert the new user.
查询返回一个结果集。结果集就是。。。一套。即使是一个空的集合也是一个集合。您想知道的是“a行返回了吗?”。假设
username
列是唯一的(合理的假设),您的查询将返回一个包含0行或1行的结果集
rs.next
()方法前进到下一行(起始位置在第一行之前)。如果要前进到某一行,则返回true;如果结果集中的行已用完,则返回false
rs = request.executeQuery(query);
if (!rs.next())
{
// Insert the new user.
因为您只需要知道是否有1行返回,所以您的解决方案非常简单,只需调用rs.next()
并检查结果集即可
rs = request.executeQuery(query);
if (!rs.next())
{
// Insert the new user.
显式检查用户是否存在是不明智的。
username
上的唯一约束也做了同样的事情。同意。如果您对用户名
没有唯一的限制,总有一天您会后悔的。您也可以在不存在的地方执行插入选择。如果行数为1,则表示已成功注册。如果行计数为0,则用户名已存在。这不是约束的替代品。但这是一种将两条SQL语句组合在一起的方法,可以更优雅地处理潜在的约束冲突(并且代码行数更少)。显式检查用户是否存在不是很明智。username
上的唯一约束也做了同样的事情。同意。如果您对用户名
没有唯一的限制,总有一天您会后悔的。您也可以在不存在的地方执行插入选择。如果行数为1,则表示已成功注册。如果行计数为0,则用户名已存在。这不是约束的替代品。但这是一种将两条SQL语句组合在一起的方法,可以更优雅地处理潜在的约束冲突(并且代码行数更少)。显式检查用户是否存在不是很明智。username
上的唯一约束也做了同样的事情。同意。如果您对用户名
没有唯一的限制,总有一天您会后悔的。您也可以在不存在的地方执行插入选择。如果行数为1,则表示已成功注册。如果行计数为0,则用户名已存在。这不是约束的替代品。但这是一种将两条SQL语句组合在一起的方法,可以更优雅地处理潜在的约束冲突(并且代码行数更少)。显式检查用户是否存在不是很明智。username
上的唯一约束也做了同样的事情。同意。如果您对用户名
没有唯一的限制,总有一天您会后悔的。您也可以在不存在的地方执行插入选择。如果行数为1,则表示已成功注册。如果行计数为0,则用户名已存在。这不是约束的替代品。但这是一种将两条SQL语句组合在一起的方法,可以更优雅地处理潜在的约束冲突(并且代码行数更少)。