gpt4 book ai didi

Java:MySQL 对象在关闭连接时抛出错误

转载 作者:行者123 更新时间:2023-11-29 22:45:43 29 4
gpt4 key购买 nike

我对java相对陌生,我已经编写了一个对象(在http://www.tutorialspoint.com/jdbc/的帮助下)来处理MySQL数据库连接,如下所示:

package rekening.db;
import java.sql.*;

public class dbConnection1 {
private final String dbUrl;
private final String dbUser;
private final String dbPass;
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;

/**
* @param args the command line arguments
*/
//Constructor
public dbConnection1(String dbUrl, String dbUser, String dbPass) {
this.dbUrl = dbUrl;
this.dbUser = dbUser;
this.dbPass = dbPass;

}

public boolean initiateConnection() throws SQLException {
try{
//STEP 2: Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");

//STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(dbUrl,dbUser,dbPass);
return true;
}catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}
return false;
}

public ResultSet executeQuery(String dbStatement) throws SQLException {
try{
//STEP 4: Execute a query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = dbStatement;
ResultSet rs = stmt.executeQuery(sql);

//STEP 5: Extract data from result set
while(rs.next()){
//Retrieve by column name
String DESC_ORIGINAL = rs.getString("DESC_ORIGINAL");
String DESC_TRIMMED = rs.getString("DESC_TRIMMED");
String DESC_EDITED = rs.getString("DESC_EDITED");
String DESC_CATEGORY_EDITED = rs.getString("DESC_CATEGORY_EDITED");
String DESC_SUBCATEGORY = rs.getString("DESC_SUBCATEGORY");


//Display values
System.out.print("Orignal: " + DESC_ORIGINAL);
System.out.print(", Trimmed: " + DESC_TRIMMED);
System.out.print(", Edited: " + DESC_EDITED);
System.out.println(", Category: " + DESC_CATEGORY_EDITED);
System.out.println(", Subcategory: " + DESC_SUBCATEGORY);
}
return rs;
}catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}

return rs;
}

public void closeConnection() throws SQLException {
//STEP 6: Clean-up environment
try{
rs.close();
stmt.close();
conn.close();
}
catch (SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}
finally{
//finally block used to close resources
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}// nothing we can do
if(conn!=null)
conn.close();
}//end try
}
}

从 main 中我调用 dbConnection1 对象:

try {
dbConnection1 dbConn = new dbConnection1("jdbc:mysql://192.168.1.550/Finance","test","");
dbConn.initiateConnection();
dbConn.executeQuery("SELECT DESC_ORIGINAL, DESC_TRIMMED, DESC_EDITED, DESC_CATEGORY_EDITED, DESC_SUBCATEGORY FROM `TOOL.DESCRIPTION`");
dbConn.closeConnection();
} catch (SQLException ex) {
Logger.getLogger(Rekening.class.getName()).log(Level.SEVERE, null, ex);
}

输出返回以下错误。但奇怪的是它从数据库返回行。错误位于结果集之间。最后它说构建成功。有人可以帮我吗?谢谢!!

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at rekening.db.dbConnection1.closeConnection(dbConnection1.java:105)
at rekening.ui.Rekening$1.run(Rekening.java:85)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD SUCCESSFUL (total time: 1 second)

最佳答案

首先要注意的是,无论如何都要关闭 stmt 和连接两次。首先在 try block 中,然后在 finally block 中再次...很难说更多,因为您的代码没有第 105 行;-)

关于Java:MySQL 对象在关闭连接时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29153468/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com