Java 访问数据库时出现空指针异常

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

我正在为学校做我的第一个数据库项目。我原以为自己进展得很顺利,但却遇到了一个空指针异常,我不知道在这种情况下如何修复它。任务是打开并读取access数据库,并从中提取信息以找到余额最小的客户

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);