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

Validation of repetition of name in sql DB?

我正在尝试检查用户名是否存在于我的数据库中。我使用了以下逻辑,虽然出现了错误,但它还在数据库中存储了用户的数据。

一般情况是,如果出现错误,除非错误已解决,否则不应继续任何过程。

但它仍然存储名称和其他内容。是的,我正在尝试申请支票(我不太擅长)

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

这里PstatPreparedStatement的实例,conConnection的实例,rs是[=17=的实例].

adminstrator 是 table 名称,name1 是列名称。

抱歉,我最近从 C++ 切换到 Java。对支票了解不多。

我收到一个错误

Please Enter Different Name

但是当我单击 确定 时,我又弹出了一个

Your data is entered

(此弹出窗口是用户制作的,所以不用担心 java 如何在数据输入方面变得如此智能)

是的,我对 next() 略知一二。但是我在if声明中无法理解....

有人可以告诉我这个 if 语句的后端发生了什么吗?

if(rs.next()) 的后端发生了什么:

  1. 当您的代码执行到 if() 时,它会执行 rs.next().
  2. 根据您的查询结果,ResultSet 对象 rs 有零个或多个结果。
  3. rs 对象维护一个指向它包含的所有记录的指针。 最初,此指针指向之前的某种 "dummy" 位置 实际记录。
  4. 例如如果 rs 对象中有三个记录,比如 [0,1,2], 然后最初指针指向-1.
  5. 每次在rs上调用next(),指针移动一位 转发,如果新位置上有记录, next() returns true.
  6. 如果新位置上没有记录,next() returns false.
  7. 为了你的问题,假设有一条记录 可用,并且 rs.next() returns true.
  8. 因此,执行进入if()体内。
  9. rs.next() 通常在一个循环内调用,如果有多个记录 预计来自 select 查询,但由于您的查询中没有循环 代码,rs.next() 只执行一次。就是这样,没有 发生的任何其他事情。然后到 if() 正文。
  10. 在这里,编译器执行您编写的代码,即设置 nameTextField 的文本发送到 null 并显示一个弹出窗口,其中包含您的 错误信息。
  11. 然后,编译器等待错误对话框关闭(我 想想,不确定这一步,因为它已经太长了,但是去看看 javadocs 看看 JOptionPane.showMessageDialog() 是非阻塞还是阻塞。
  12. 但是代码的执行并没有就此停止,这就是事情看起来的地方 让你的代码变得可疑。
  13. 在您为这个问题提供的代码中,在您的 if() 正文结束之前,您没有任何 returnthrowbreak
  14. 那么编译器所做的就是简单地退出 if() 主体并 继续执行下面的任何代码 - 我假设 用于插入数据,这就是您的“数据所在的位置 已插入”弹出窗口来自。

if(rs.next()) 中的 JOptionPane.showMessageDialog() 正下方添加 return 语句或抛出 Exception 应该可以解决您的问题,假设我对缺失代码的假设是正确的.

Ciao!