Java JDBC&x2013;create语句中的NULL指针异常
我试图在我的数据库中为一年中的每个月生成一组表。我有一个单独的名为“DBConnection.java”的类,其中我从一个配置文件中获取详细信息,如jdbcServerType、用户名、密码、serverPort和应该创建表的数据库的名称,该配置文件通过一个名为RootTagsConfigList的类处理后遵循XML格式。下面是一个验证,用于检查数据库是否存在,如果不存在,请在继续创建表之前创建数据库。在调试过程中,我可以看到我的配置文件被完美地读取,并且在从RootTagsConfigList读取之后,上述所有值都存储在相应的变量中Java JDBC&x2013;create语句中的NULL指针异常,java,jdbc,nullpointerexception,Java,Jdbc,Nullpointerexception,我试图在我的数据库中为一年中的每个月生成一组表。我有一个单独的名为“DBConnection.java”的类,其中我从一个配置文件中获取详细信息,如jdbcServerType、用户名、密码、serverPort和应该创建表的数据库的名称,该配置文件通过一个名为RootTagsConfigList的类处理后遵循XML格式。下面是一个验证,用于检查数据库是否存在,如果不存在,请在继续创建表之前创建数据库。在调试过程中,我可以看到我的配置文件被完美地读取,并且在从RootTagsConfigList
public DBConnection(RootTagsConfigList rootTagsConfigListObj) {
try {
String jdbcServerType = rootTagsConfigListObj.getRootTagsConfigList().get(0).getJDBCServerType();
String userName = rootTagsConfigListObj.getRootTagsConfigList().get(0).getUsername();
String password = rootTagsConfigListObj.getRootTagsConfigList().get(0).getPassword();
String dbserver = rootTagsConfigListObj.getRootTagsConfigList().get(0).getDbserver();
String serverPort = rootTagsConfigListObj.getRootTagsConfigList().get(0).getServerPort();
database = rootTagsConfigListObj.getRootTagsConfigList().get(0).getDatabaseName();
Class.forName("com.mysql.jdbc.Driver").newInstance();
create.execute("CREATE SCHEMA IF NOT EXISTS " +database);
String url = "jdbc:" + jdbcServerType + "://" + dbserver + ":" + serverPort + "/" + database;
conn = DriverManager.getConnection(url, userName, password);
} catch (Exception e) {
e.printStackTrace();
}
}
几天前,我的代码运行得很好,我能够在一年内生成整个表。但是,今天我运行了代码,在create语句中发现了一个空指针异常。在调试期间,每次遇到create.execute时,程序都会出现异常。我试着打印StackTrace结果如下
at program.main.DBConnection.(DBConnection.java:40)
在program.Main.Main(Main.java:64)
当我追溯到Main:64时,它将我指向dbConnectionObj,它应该将我的所有数据存储为null。然后我转到DBConnection:40(上面代码中有create.execute的行),它指向我的create.execute语句,该语句也是空的。或者,我尝试将sql语句分配给一个变量,并打印打印出要正确执行的sql语句的查询,但在本例中,当它遇到create.execute时,它会向我抛出一个空指针异常
下面是我的Main:64代码(其中dbConnectionObj似乎为null)
同样在上述代码中,我所有的变量都被完美地读取并存储在各自的变量中。我很惊讶,当代码以前运行良好并且我没有做任何更改时,它竟然会给我带来一个错误,但我真的很想知道我哪里出了错,因为我主要使用python编写代码,而且还不太熟悉Java
如果我没有很好地解释我的问题,请告诉我是否需要任何额外的信息。感谢您的帮助
提前谢谢 首先建立连接,然后在构造函数中执行语句DBConnection
首先建立连接,然后在构造函数中执行语句DBConnection
在创建
语句之前
检查dbConnectionObj
是否为null
或非null
。如果null
则问题在于连接
创建类。调试并找出未创建连接的原因。在创建语句之前,请检查dbConnectionObj
是否为null
或非null
。如果null
则问题在于连接
创建类。调试并找出未创建连接的原因。只需删除mysql.jar并添加againI即可,但这并不能解决问题:(哪一行代码是64?您使用的是哪个版本的jar,其中create被分配给代码中除null以外的任何对象?此外,如果dbConnectionObj为null,则dbConnectionObj.createStatement()(假设它在某处被调用)应该在调用execute()之前引发异常)。如果对这些问题有疑问,可以使用System.out.println(create==null)来跟踪对象。只需删除mysql.jar并添加againI即可,但这并不能解决问题:(哪一行代码是64?您使用的是哪个版本的jar,其中create被分配给代码中除null以外的任何对象?此外,如果dbConnectionObj为null,则dbConnectionObj.createStatement()(假设它在某处被调用)应该在调用execute()之前引发异常)。如果对这些内容有疑问,请使用System.out.println(create==null)跟踪对象。我想我的问题是,我试图在声明url和conn值之前调用create.execute语句。我更改了代码顺序,并包含了conn.createStatement()在create.execute之前的行,现在它似乎工作得很好。谢谢你的建议!是的…干杯,很高兴它有帮助!!我想我的问题是,我试图在声明url和conn值之前调用create.execute语句。我更改了代码的顺序,并包含了conn.createStatement()在create.execute之前的行。现在它似乎工作得很好。感谢您的建议!是的…干杯,很高兴它起到了作用!!我听从了您的建议,并确定我调用create语句时没有实际传递任何值,从而使其为空。感谢您的帮助!如果它解决了您的问题,请投票。对不起,我没有enough reputation points to up vote,但一旦我符合条件,我会回到问题上来。我遵循了你的建议,并确定我正在调用create语句,而没有实际传递任何值,从而使其为空。感谢你的帮助!如果它解决了你的问题,请向上投票。很抱歉,我没有足够的reputation points to up v注意,但一旦我符合条件,我会回到问题上来。
try {
Statement create = null;
new ReadXMLConfig();
RootTagsConfigList rootTagsConfigListObj = new RootTagsConfigList();
dbConnectionObj = new DBConnection(rootTagsConfigListObj);
String tableAction = rootTagsConfigListObj.getRootTagsConfigList().get(0).getTableAction();
String deleteProgramId = rootTagsConfigListObj.getRootTagsConfigList().get(0).getDeleteProgramId();
String createForTheYear = rootTagsConfigListObj.getRootTagsConfigList().get(0).getcreateForTheYear();
String strStartDate = rootTagsConfigListObj.getRootTagsConfigList().get(0).getStartDateTime();
String strEndDate = rootTagsConfigListObj.getRootTagsConfigList().get(0).getEndDateTime();
String url = "jdbc:" + jdbcServerType + "://" + dbserver + ":" + serverPort + "//" + database;
conn = DriverManager.getConnection(url, userName, password);
//I guess create is Object of Statement
Statement create= conn.createStatement();
create.execute("CREATE SCHEMA IF NOT EXISTS " +database);