验证 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);
}
这里Pstat
是PreparedStatement
的实例,con
是Connection
的实例,rs
是[=17=的实例].
adminstrator
是 table 名称,name1
是列名称。
抱歉,我最近从 C++ 切换到 Java。对支票了解不多。
我收到一个错误
Please Enter Different Name
但是当我单击 确定 时,我又弹出了一个
Your data is entered
(此弹出窗口是用户制作的,所以不用担心 java 如何在数据输入方面变得如此智能)
是的,我对 next()
略知一二。但是我在if
声明中无法理解....
有人可以告诉我这个 if
语句的后端发生了什么吗?
if(rs.next())
的后端发生了什么:
- 当您的代码执行到
if()
时,它会执行
rs.next()
.
- 根据您的查询结果,ResultSet 对象
rs
有零个或多个结果。
rs
对象维护一个指向它包含的所有记录的指针。
最初,此指针指向之前的某种 "dummy" 位置
实际记录。
- 例如如果
rs
对象中有三个记录,比如 [0,1,2],
然后最初指针指向-1.
- 每次在
rs
上调用next()
,指针移动一位
转发,如果新位置上有记录,
next()
returns true
.
- 如果新位置上没有记录,
next()
returns
false
.
- 为了你的问题,假设有一条记录
可用,并且
rs.next()
returns true
.
- 因此,执行进入
if()
体内。
rs.next()
通常在一个循环内调用,如果有多个记录
预计来自 select 查询,但由于您的查询中没有循环
代码,rs.next()
只执行一次。就是这样,没有
发生的任何其他事情。然后到 if()
正文。
- 在这里,编译器执行您编写的代码,即设置
nameTextField
的文本发送到 null
并显示一个弹出窗口,其中包含您的
错误信息。
- 然后,编译器等待错误对话框关闭(我
想想,不确定这一步,因为它已经太长了,但是去看看 javadocs 看看
JOptionPane.showMessageDialog()
是非阻塞还是阻塞。
- 但是代码的执行并没有就此停止,这就是事情看起来的地方
让你的代码变得可疑。
- 在您为这个问题提供的代码中,在您的
if()
正文结束之前,您没有任何 return
或 throw
或 break
。
- 那么编译器所做的就是简单地退出
if()
主体并
继续执行下面的任何代码 - 我假设
用于插入数据,这就是您的“数据所在的位置
已插入”弹出窗口来自。
在 if(rs.next())
中的 JOptionPane.showMessageDialog()
正下方添加 return
语句或抛出 Exception
应该可以解决您的问题,假设我对缺失代码的假设是正确的.
Ciao!
我正在尝试检查用户名是否存在于我的数据库中。我使用了以下逻辑,虽然出现了错误,但它还在数据库中存储了用户的数据。
一般情况是,如果出现错误,除非错误已解决,否则不应继续任何过程。
但它仍然存储名称和其他内容。是的,我正在尝试申请支票(我不太擅长)
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
是[=17=的实例].
adminstrator
是 table 名称,name1
是列名称。
抱歉,我最近从 C++ 切换到 Java。对支票了解不多。
我收到一个错误
Please Enter Different Name
但是当我单击 确定 时,我又弹出了一个
Your data is entered
(此弹出窗口是用户制作的,所以不用担心 java 如何在数据输入方面变得如此智能)
是的,我对 next()
略知一二。但是我在if
声明中无法理解....
有人可以告诉我这个 if
语句的后端发生了什么吗?
if(rs.next())
的后端发生了什么:
- 当您的代码执行到
if()
时,它会执行rs.next()
. - 根据您的查询结果,ResultSet 对象
rs
有零个或多个结果。 rs
对象维护一个指向它包含的所有记录的指针。 最初,此指针指向之前的某种 "dummy" 位置 实际记录。- 例如如果
rs
对象中有三个记录,比如 [0,1,2], 然后最初指针指向-1. - 每次在
rs
上调用next()
,指针移动一位 转发,如果新位置上有记录,next()
returnstrue
. - 如果新位置上没有记录,
next()
returnsfalse
. - 为了你的问题,假设有一条记录
可用,并且
rs.next()
returnstrue
. - 因此,执行进入
if()
体内。 rs.next()
通常在一个循环内调用,如果有多个记录 预计来自 select 查询,但由于您的查询中没有循环 代码,rs.next()
只执行一次。就是这样,没有 发生的任何其他事情。然后到if()
正文。- 在这里,编译器执行您编写的代码,即设置
nameTextField
的文本发送到null
并显示一个弹出窗口,其中包含您的 错误信息。 - 然后,编译器等待错误对话框关闭(我
想想,不确定这一步,因为它已经太长了,但是去看看 javadocs 看看
JOptionPane.showMessageDialog()
是非阻塞还是阻塞。 - 但是代码的执行并没有就此停止,这就是事情看起来的地方 让你的代码变得可疑。
- 在您为这个问题提供的代码中,在您的
if()
正文结束之前,您没有任何return
或throw
或break
。 - 那么编译器所做的就是简单地退出
if()
主体并 继续执行下面的任何代码 - 我假设 用于插入数据,这就是您的“数据所在的位置 已插入”弹出窗口来自。
在 if(rs.next())
中的 JOptionPane.showMessageDialog()
正下方添加 return
语句或抛出 Exception
应该可以解决您的问题,假设我对缺失代码的假设是正确的.
Ciao!