Java 访问数据库时出现空指针异常
我正在为学校做我的第一个数据库项目。我原以为自己进展得很顺利,但却遇到了一个空指针异常,我不知道在这种情况下如何修复它。任务是打开并读取access数据库,并从中提取信息以找到余额最小的客户Java 访问数据库时出现空指针异常,java,database,ms-access,Java,Database,Ms Access,我正在为学校做我的第一个数据库项目。我原以为自己进展得很顺利,但却遇到了一个空指针异常,我不知道在这种情况下如何修复它。任务是打开并读取access数据库,并从中提取信息以找到余额最小的客户 package dbproject; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.St
package dbproject;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MyFirstDB {
public static void main(String[] args)
{
ResultSet resultSet = null;
double totalPref = 0.0;
double lowestBalPref = 1000000;
String lowestBalCust = null;
double highestBalPref = 0.0;
String highestBalCust = null;
double totalBalance = 0.0;
ResultSet rs = null;
String convertTo = "";
double result = 0.0;
long lngCN = 0;
String query = null;
String url = "jdbc:ucanaccess://c:/cps/ms121.accdb";
try{
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Connection con = DriverManager.getConnection(url);
if(con!=null){
System.out.println("Connecton Successful!");
}
else{
System.out.println("Connection Unsuccesful!");
System.exit(0);
}
Statement statement = con.createStatement();
if(statement != null)
System.out.println("Statement is not null");
resultSet = statement.executeQuery("SELECT * FROM CUSTOMER where preferred = 'y'");
while(resultSet.next()){
// System.out.println(resultSet.getString("CustomerName"));
totalPref = totalPref + 1;
if(rs.getDouble("Balance") < lowestBalPref){
lowestBalCust = rs.getString("CustomerName");
// System.out.println(resultSet.getDouble("Balance"));
}
}
System.out.println("Total Preferred Customers is " + totalPref);
System.out.println("The Customer with the lowest balance is " + lowestBalCust);
if (con != null)
con.close();
}catch (Exception e)
{
e.printStackTrace();
}
}
}
包工程;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.sql.Statement;
公共类MyFirstDB{
公共静态void main(字符串[]args)
{
ResultSet ResultSet=null;
双重totalPref=0.0;
双下限BALPREF=1000000;
字符串lowestBalCust=null;
双高BALPREF=0.0;
字符串highestBalCust=null;
双倍总余额=0.0;
结果集rs=null;
字符串转换为“”;
双结果=0.0;
长lngCN=0;
字符串查询=null;
String url=“jdbc:ucanaccess://c:/cps/ms121.accdb”;
试一试{
类forName(“net.ucanaccess.jdbc.UcanaccessDriver”);
Connection con=DriverManager.getConnection(url);
如果(con!=null){
System.out.println(“连接成功!”);
}
否则{
System.out.println(“连接失败!”);
系统出口(0);
}
语句Statement=con.createStatement();
if(语句!=null)
System.out.println(“语句不为空”);
resultSet=statement.executeQuery(“从首选客户中选择*='y'”);
while(resultSet.next()){
//System.out.println(resultSet.getString(“CustomerName”);
totalPref=totalPref+1;
如果(rs.getDouble(“余额”)
这些行似乎特别导致了错误:
if(rs.getDouble("Balance") < lowestBalPref){
lowestBalCust = rs.getString("CustomerName");
if(rs.getDouble(“余额”)
在这行中
System.out.println(“余额最低的客户为”+最低余额客户)
您正试图打印lowerstbalcust
property,此属性以null开头:
String lowestBalCust = null;
如果此条件为false,您将获得一个空指针例外,因此,您必须在数据库中检查Balance
和CustomerName
的值是否存在
if(rs.getDouble("Balance") < lowestBalPref){
lowestBalCust = rs.getString("CustomerName");
}
摆脱未初始化的
rs
变量,改用resultSet
。为什么两个resultSet
?您的rs为空可能您的变量是resultSet而不是rsnull rs对象,避免在数据访问类中执行逻辑。从数据库中提取数据,将其返回到应用程序,并在那里执行逻辑。检查您的result集合(顺便说一下,您有两个)
resultSet = statement.executeQuery("SELECT * FROM CUSTOMER where preferred = 'y'");
while(resultSet.next()){
// System.out.println(resultSet.getString("CustomerName"));
totalPref = totalPref + 1;
if(resultSet .getDouble("Balance") < lowestBalPref){
lowestBalCust = resultSet .getString("CustomerName");
// System.out.println(resultSet.getDouble("Balance"));
}
}
System.out.println("Total Preferred Customers is " + totalPref);
System.out.println("The Customer with the lowest balance is " + lowestBalCust);