sql数据库中名称重复的java验证?

p3rjfoxz  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(343)

我正在检查我的数据库中是否存在用户名。我使用了以下逻辑,虽然出现了错误,但它也将用户的数据存储在数据库中。
一般的情况是,如果出现错误,除非错误得到解决,否则任何进程都不应继续进行。
但它仍然保存着名字和其他东西。是的,我正在申请支票(我不太擅长)

String checkName="SELECT * FROM administrator WHERE name1='"+name+"'";
Pstat = con.prepareStatement(checkName);
rs = Pstat.executeQuery();

if(rs.next())
{
    nameTextField.setText(null);
    JOptionPane.showMessageDialog(null,"Please Enter Different Name","Error", JOptionPane.ERROR_MESSAGE);
}

在这里 Pstat 是的示例 PreparedStatement , con 是的示例 Connection ,和 rs 是的示例 ResultSet . adminstrator 是表名和 name1 是列名。
抱歉,我最近从c++转到了java。对支票不太了解。
我出错了
请输入其他名称
但是当我点击ok时,我会弹出另一个窗口
您的数据已输入
(这个弹出窗口是用户制作的,所以不用担心java在数据输入方面是如何变得如此智能的)
是的,我知道一点 next() . 但我无法理解 if 声明。。。。
有人能告诉我这个系统的后端发生了什么吗 if 声明?

tjrkku2a

tjrkku2a1#

系统后端发生了什么 if(rs.next()) :
当代码执行到达 if() ,它执行 rs.next() .
根据查询的结果,resultset对象 rs 要么有零个或多个结果。
这个 rs 对象维护指向它所包含的所有记录的指针。最初,该指针指向实际记录之前的某种“虚拟”位置。
e、 g.如果记录中有三条记录 rs 对象,比如说[0,1,2],那么最初指针指向-1。
每次你打电话 next()rs ,指针向前移动一个位置,如果新位置上存在记录, next() 退货 true .
如果新位置上没有记录, next() 退货 false .
为了回答您的问题,假设有一个可用的记录,并且 rs.next() 退货 true .
因此,执行进入 if() 身体。 rs.next() 如果select查询需要多个记录,则通常在循环内调用,但由于代码中没有循环, rs.next() 只执行一次。就这样,没有别的事情发生了。在 if() 那尸体呢。
在这里,编译器执行您编写的代码,即设置 nameTextField 的文本到 null 并显示一个带有错误消息的弹出窗口。
然后,编译器等待错误对话框被关闭(我想,这一步不太确定,因为它太长了,但是去看看javadocs是否 JOptionPane.showMessageDialog() 是非阻塞或阻塞)。
但是代码的执行并没有到此为止,这就是代码中的可疑之处。
在这个问题提供的代码中,您没有 return 或者 throw 或者 break 在你的 if() 身体末端。
所以编译器只需退出 if() 然后继续执行下面的代码——我假设是用于插入数据的,这就是“数据已插入”弹出窗口的来源。
添加 return 陈述或抛出 Exception 就在下面 JOptionPane.showMessageDialog() ,在 if(rs.next()) 假设我对缺失代码的假设是正确的,我应该可以解决你的问题。 Ciao!

相关问题