将整数文本字段值与java中的mysql数据进行比较
Posted
技术标签:
【中文标题】将整数文本字段值与java中的mysql数据进行比较【英文标题】:compare integer text field value with mysql data in java 【发布时间】:2012-09-16 14:32:27 【问题描述】:我要检查新输入的数据是否已经在表中
代码:
txtNo = new JTextField();
try
Class.forName("com.mysql.jdbc.Driver");
String srcurl1 = "jdbc:mysql://localhost:3306/DB_name";
Connection con = DriverManager.getConnection(srcurl1,"root","paswrd");
Statement stmt1 = con.createStatement();
ResultSet rs1 = stmt1.executeQuery("select No from bank where No='"+txtNo.getText()+"' ");
int ch =rs1.getInt("No");
int ch4= Integer.parseInt(txtNo.getText());
if(ch==ch4) // input 58 == 58
System.out.println("already exits");
catch(Exception e)
System.out.println("Exception:"+e);
错误:
Exception:java.sql.SQLException: Illegal operation on empty result set.
【问题讨论】:
数据库中No列的sql类型是什么?它是声明为整数还是 varchar? 【参考方案1】:你需要检查结果集是否有元素:
while(rs1.next())
int ch = rs1.getInt("No");
// ...
【讨论】:
while(rs1.next()) int ch =rs1.getInt("No"); int ch4=整数.parseInt(txtNo.getText()); if(ch==ch4) .... 在我出错的地方仍然出现异常【参考方案2】:当 select 语句返回一个空集时,您会遇到此异常。添加一个 try/catch 块,该块根据数据尚未在 catch 块中的表中起作用。
【讨论】:
【参考方案3】:您需要先检查ResultSet
以查看它是否包含行:
if (rs1.next())
int ch =rs1.getInt("No");
...
【讨论】:
【参考方案4】:检查数据库中是否存在特定记录的最简单方法可能如下:
Select 1 from bank where No = [your_supplied_value]
如果在您的数据库中找到包含所提供数据的行或返回空结果集,则此查询将返回 1。因此,您需要检查的是结果集中是否返回了 ANY 值,或者它是否为 emtpy。
以下是帮助您入门的示例代码:
txtNo = new JTextField();
try
String compareText = txtNo.getText().trim();
if(compareText.length() > 0)
Class.forName("com.mysql.jdbc.Driver");
String srcurl1 = "jdbc:mysql://localhost:3306/DB_name";
Connection con = DriverManager.getConnection(srcurl1,"root","paswrd");
Statement stmt1 = con.createStatement();
ResultSet rs1 = stmt1.executeQuery("select 1 from bank where No='"+txtNo.getText()+"' ");
boolean isPresent = rs1.next();
if(isPresent)
System.out.println("Already exists!!");
catch(Exception e)
System.out.println("Exception:"+e);
我希望这不是你的最终代码,因为它有几个问题:
您没有正确管理您的资源。完成对数据库的查询后,您应该考虑关闭结果集、语句和连接对象。
请注意,我检查了 JTextField 中的文本是否为空。当您知道文本字段中没有值时,这是防止调用数据库的好方法。
我建议使用 PreparedStatement 而不是 Statement 来查询您的数据库。
【讨论】:
【参考方案5】:ResultSet
最初位于第一行之前。所以在调用getXXX()
方法之一之前,您需要调用next()
将其移动到下一行(并检查它是否返回true
)。
【讨论】:
【参考方案6】:JTextField input = new JTextField();
ArrayList < Integer > list = new ArrayList < Integer > ();
int integerv = Integer.parseInt(input.getText());
try
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/DB_name", "root", "yourpassword");
Statement stm = con.createStatement();
ResultSet rs = stm.executeQuery("select column_name from table_name");
while (rs.next())
list.add(rs.getInt(1));
for (int a = 0; a < list.Size(); a++)
if (a.get(a) == integerv)
System.out.println("Match found");
break;
else
System.out.println("Match not found");
break;
catch (Exception e)
System.out.println("Error :" + e.getMessage());
【讨论】:
以上是关于将整数文本字段值与java中的mysql数据进行比较的主要内容,如果未能解决你的问题,请参考以下文章