我正在检查我的数据库中是否存在用户名。我使用了以下逻辑,虽然出现了错误,但它也将用户的数据存储在数据库中。
一般的情况是,如果出现错误,除非错误得到解决,否则任何进程都不应继续进行。
但它仍然保存着名字和其他东西。是的,我正在申请支票(我不太擅长)
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
声明?
1条答案
按热度按时间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!