【问题标题】:Using SQL Database in Java [duplicate]在 Java 中使用 SQL 数据库 [重复]
【发布时间】:2021-10-22 17:34:42
【问题描述】:

我想访问我创建的表并在 Eclipse 控制台中打印它。但是,我不断收到一条错误消息,内容如下:

java.lang.NullPointerException:无法调用“java.sql.Connection.createStatement()”,因为“databaseSQL.conAdministrator”为空。

我还上传了一个jar文件:mysql-connector-java-8.0.26.jar

但是,我的openDataBaseConnection 方法返回数据库已连接。

我的代码:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.*;
import java.sql.DriverManager;

public class databaseSQL {
    private static Connection conAdministrator;

    public static void main(String[] args) {
        openDataBaseConnection(); 
        LoadListFromDatabase();
    }

    public static void LoadListFromDatabase() { 
        String strConnect = "jdbc:mysql://localhost:3306/DBexample";
        String sql = "SELECT * FROM employeeInfo";
        Statement sqlCommand = null;
        ResultSet rstTSource = null;
        openDataBaseConnection();
        try {
            sqlCommand = conAdministrator.createStatement();
            rstTSource = sqlCommand.executeQuery(sql);
            while(rstTSource.next()) {
                String name = rstTSource.getString(1);
                System.out.println(name);
            }
        } catch(Exception e) {
            System.out.println(e);
        }
    }

    public static boolean openDataBaseConnection() {
        Connection conAdministrator = null;
        String strConnect = "";
        boolean blnResult = false;
        try {
            strConnect = "jdbc:mysql://localhost:3306/DBexample";
            conAdministrator =  (Connection)DriverManager.getConnection(strConnect, "root", "Classof2017!");
            if(conAdministrator != null) {
                System.out.println("Database is Connected!");
                blnResult = true;
            }
        } catch(Exception e) {
            System.out.println("Not Connected!");
        }
        return blnResult;
    }

    public static boolean closeDataBaseConnection() {
        boolean blnResult = false;
        try {
            if(conAdministrator != null) {
                if(conAdministrator.isClosed() == false) {
                    conAdministrator.close();
                    conAdministrator = null;
                }
            }
            blnResult = true;
            System.out.println("Database is Closed.");
        } catch(Exception e) {
            System.out.println(e);
        }
        return blnResult;
    }
}

这是我试图在控制台中显示的 SQL 表:

USE DBexample;
CREATE TABLE employeeInfo(intEmployeeID INT,
                            strFirstName VARCHAR(20),
                            strLastName VARCHAR(20),
                            strHomePhone VARCHAR(20),
                            strEmail VARCHAR(30),
                            dtmDateOfBirth DATE);
INSERT INTO employeeInfo VALUE('123000','Brittney', 'Pugh', '(513)738-4730', 'pughb@email.com', '1998-12-01');
INSERT INTO employeeInfo VALUE('246000', 'Emilee', 'Peters', '(513)222-9876', 'emileep@email.com', '1990-05-21');
INSERT INTO employeeInfo VALUE('689000', 'Sally', 'Jenkins', '(513)456-2590', 'jenkinssally@email.com', '1985-03-23');
INSERT INTO employeeInfo VALUE('537000', 'John', 'Smith', '(513)889-0754', 'SmithJ@email.com','1995-07-07');
SELECT * FROM employeeInfo;

【问题讨论】:

    标签: java mysql sql jdbc


    【解决方案1】:

    因为你有两次变量conAdministrator。一次在类的属性部分,一次在方法的顶部openDataBaseConnection,所以连接被写入函数中的变量。

    删除方法的第一行应该可以解决该问题。 为避免以后出现此类错误,请尝试使用关键字this访问方法中不存在的变量

    【讨论】:

    • 谢谢!我现在才意识到!感谢您的帮助。
    【解决方案2】:

    注意你的 openDataBaseConnection() 方法。您再次声明 conAdministrator 变量 e,因此 openDataBaseConnection 使用 conAdministrator 作为方法变量而不是类变量。

    试试这个版本的 openDataBaseConnection:

    /**
     * Name: openDataBaseConnection
     * ABSTRACT: Opens the connection to the database
     * @return blnResult determining factor if the database is connected
     */
    public static boolean openDataBaseConnection() {
        // Connection conAdministrator = null;
        String strConnect = "";
        boolean blnResult = false;
        try {
            strConnect = "jdbc:mysql://localhost:3306/DBexample";
            conAdministrator = (Connection)DriverManager.getConnection(strConnect, "root", "Classof2017!");
            
            if(conAdministrator != null) {
                System.out.println("Database is Connected!");
                blnResult = true;
            }
        }
        catch(Exception e) {
            System.out.println("Not Connected!");
    
       }
           return blnResult;
        
    }
    

    希望能帮到你

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多