gpt4 book ai didi

java - JDBC - 尝试插入值时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 17:28:46 25 4
gpt4 key购买 nike

我想将值插入到在 ms access 中创建的数据库表中。这段代码以前可以工作,我不明白为什么现在会出现一些错误。

Exception in thread "main" java.lang.NullPointerException
at storeapp.Trylog.<init>(Trylog.java:28)
at storeapp.Trylog.main(Trylog.java:45)

我相信我正确配置了驱动程序。

我有一个名为 ACCOUNT 的表,其中包含用户名和密码列..

这是代码......

public class Trylog extends JFrame{
Connection con;
Statement st;
ResultSet rs;

public Trylog(){
connect();

String u = "Katherine";
String p = "kat";

String sql = "Insert into ACCOUNT(Username, Password) Values ('"+u+"' , '"+p+"' ) ";
try {
rs = st.executeQuery(sql);
} catch (SQLException ex) {
}
}

public void connect(){
try {
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
String db = "jdbc:odbc:access";
con = DriverManager.getConnection(db);
st = con.createStatement();
}
catch (Exception ex){}
}

public static void main(String[] args) {
Trylog r = new Trylog();
r.setVisible(true);
r.setSize(600, 800);
r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

有谁知道为什么我会收到这样的错误?

这是导致第 28 和 46 行异常的行

rs = st.executeQuery(sql);

 Trylog r = new Trylog();

打印

Exception in thread "main" java.lang.RuntimeException: java.sql.SQLException: No ResultSet was produced

原因:java.sql.SQLException:未生成结果集

最佳答案

您的具体问题是由错误的异常处理引起的(更重要的是,根本没有异常处理)。您有完全吞没异常的 catch block ,如下所示:

catch (Exception ex){}

这样,代码在发生异常时继续运行,可能会导致 try block 中的变量(例如 st)未初始化。之后,那些未初始化的(即它们仍然是 null)变量被 Access ,进而导致 NullPointerException

这不应该发生。当捕获到异常时,代码应该正确处理它。在这种情况下,它应该立即停止并以某种方式显示错误详细信息。此时,最简单的方法是将其作为运行时异常重新抛出,这样您至少可以获得有关该问题的所有必要信息:

catch (Exception ex) { 
throw new RuntimeException(ex);
}

(例如,您始终可以通过记录堆栈跟踪并显示一些用户友好的消息对话框,然后退出程序来改进这一点)

抛出的异常基本上是问题根本原因的完整答案。艺术在于能够解释和理解堆栈跟踪。

<小时/>

更新根据您的更新,您得到了

java.sql.SQLException: No ResultSet was produced

看,这就是你的答案!对于给定的查询,根本没有生成 ResultSet,而您希望生成它。事实上,INSERT 查询不会返回结果集。它最多将返回受影响的行数。

您需要更换

rs = st.executeQuery(sql);

st.executeUpdate(sql);

另请参阅the executeQuery() javadocthe executeUpdate() javadoc 。它们精确地告诉应该对哪些 SQL 语句使用该方法。

executeQuery

Executes the given SQL statement, which returns a single ResultSet object.

Parameters:sql - an SQL statement to be sent to the database, typically a static SQL SELECT statement

executeUpdate

Executes the given SQL statement, which may be an INSERT, UPDATE, or DELETE statement or an SQL statement that returns nothing, such as an SQL DDL statement.

Parameters:sql - an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or DELETE; or an SQL statement that returns nothing, such as a DDL statement.

关于java - JDBC - 尝试插入值时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994408/

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