Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC&x2013;create语句中的NULL指针异常_Java_Jdbc_Nullpointerexception - Fatal编程技术网

Java JDBC&x2013;create语句中的NULL指针异常

Java JDBC&x2013;create语句中的NULL指针异常,java,jdbc,nullpointerexception,Java,Jdbc,Nullpointerexception,我试图在我的数据库中为一年中的每个月生成一组表。我有一个单独的名为“DBConnection.java”的类,其中我从一个配置文件中获取详细信息,如jdbcServerType、用户名、密码、serverPort和应该创建表的数据库的名称,该配置文件通过一个名为RootTagsConfigList的类处理后遵循XML格式。下面是一个验证,用于检查数据库是否存在,如果不存在,请在继续创建表之前创建数据库。在调试过程中,我可以看到我的配置文件被完美地读取,并且在从RootTagsConfigList

我试图在我的数据库中为一年中的每个月生成一组表。我有一个单独的名为“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);