在 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
访问不在方法中的变量
我想访问我创建的 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