在 Java 中使用 SQL 数据库

Using SQL Database in Java

我想访问我创建的 table 并在 Eclipse 控制台中打印它。但是,我不断收到这样的错误消息:

java.lang.NullPointerException: Cannot invoke "java.sql.Connection.createStatement()" because "databaseSQL.conAdministrator" is null.

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

但是,我的openDataBaseConnection方法returns连接了数据库。

我的代码:

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 table:

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;

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

试试这个版本的 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;
    
}

希望能帮到你

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

删除方法的第一行应该可以解决该问题。 为避免将来出现此类错误,请尝试使用关键字 this

访问不在方法中的变量