Java Sql 结果集结束后出现异常
Java Sql Exception After End of Result Set
我的代码工作正常,但是当我尝试 运行 代码时,它首先显示 java.sql.SQLException:结果集结束后。我想知道是什么原因造成的,以及如何解决这个问题,因为这是一个评分项目。
public GenerateBill()
{
initComponents();
try
{
Class.forName("java.sql.DriverManager");
Connection con=(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstore","root","root");
Statement stmt=(Statement)con.createStatement();
String query, product;
query="select * from store;";
ResultSet rs=stmt.executeQuery(query);
while(rs.next());
{
product=rs.getString("productname");
jComboBox1.addItem(product);
}
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,e.toString());
}
}
当我执行代码时,首先出现 Message Dialog Box。
当我单击“确定”时,我尝试创建的页面将打开并正常执行。
所以,我对这意味着什么感到困惑。另外,我是这个网站的新手,所以我真的不知道我需要添加多少代码。其余代码用于不同的 jButton。该页面用于生成 Bills/Receipts.
您的代码中有些部分可以做得更好。具体来说,
使用 com.mysql.jdbc.Driver
因为你的数据库是 MySQL,而不是 java.sql.DriverManager
无需强制转换您的 Connection 对象。
在 /bookstore
之后你可以添加 ?useSSL=false
,虽然它不是强制性的,所以像 jdbc:mysql://localhost:3306/bookstore?useSSL=false
使用java.sql.PreparedStatement
而不是简单的Statement
。
捕获后在 finally
块中关闭连接。
最终,您的代码应该如下所示,
public GenerateBill() {
initComponents();
Connection con = null;
ResultSet rs = null;
PreparedStatement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstore?useSSL=false","root","root");
String query = "select * from store";
stmt = con.prepareStatement(query);
String product;
rs = stmt.executeQuery();
while(rs.next())
{
product = rs.getString("productname");
jComboBox1.addItem(product);
}
} catch(Exception e) {
JOptionPane.showMessageDialog(null,e.toString());
} finally {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (con != null) {
con.close();
}
} catch (Exception e) {
LOG.error("Error closing the connection with the database...");
e.printStackTrace();
}
}
}
试试上面的方法,如果可以的话告诉我。如果不是,请 post 整个异常以查看导致问题的原因。
我的代码工作正常,但是当我尝试 运行 代码时,它首先显示 java.sql.SQLException:结果集结束后。我想知道是什么原因造成的,以及如何解决这个问题,因为这是一个评分项目。
public GenerateBill()
{
initComponents();
try
{
Class.forName("java.sql.DriverManager");
Connection con=(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstore","root","root");
Statement stmt=(Statement)con.createStatement();
String query, product;
query="select * from store;";
ResultSet rs=stmt.executeQuery(query);
while(rs.next());
{
product=rs.getString("productname");
jComboBox1.addItem(product);
}
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,e.toString());
}
}
当我执行代码时,首先出现 Message Dialog Box。 当我单击“确定”时,我尝试创建的页面将打开并正常执行。 所以,我对这意味着什么感到困惑。另外,我是这个网站的新手,所以我真的不知道我需要添加多少代码。其余代码用于不同的 jButton。该页面用于生成 Bills/Receipts.
您的代码中有些部分可以做得更好。具体来说,
使用
com.mysql.jdbc.Driver
因为你的数据库是 MySQL,而不是java.sql.DriverManager
无需强制转换您的 Connection 对象。
在
/bookstore
之后你可以添加?useSSL=false
,虽然它不是强制性的,所以像jdbc:mysql://localhost:3306/bookstore?useSSL=false
使用
java.sql.PreparedStatement
而不是简单的Statement
。捕获后在
finally
块中关闭连接。
最终,您的代码应该如下所示,
public GenerateBill() {
initComponents();
Connection con = null;
ResultSet rs = null;
PreparedStatement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstore?useSSL=false","root","root");
String query = "select * from store";
stmt = con.prepareStatement(query);
String product;
rs = stmt.executeQuery();
while(rs.next())
{
product = rs.getString("productname");
jComboBox1.addItem(product);
}
} catch(Exception e) {
JOptionPane.showMessageDialog(null,e.toString());
} finally {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (con != null) {
con.close();
}
} catch (Exception e) {
LOG.error("Error closing the connection with the database...");
e.printStackTrace();
}
}
}
试试上面的方法,如果可以的话告诉我。如果不是,请 post 整个异常以查看导致问题的原因。