gpt4 book ai didi

java - main 中出现奇怪的 NullPointer 异常

转载 作者:行者123 更新时间:2023-11-29 09:54:57 26 4
gpt4 key购买 nike

我正在尝试根据 Java 书籍做一个练习。代码按原样提供,除了设置数据库路径外,我没有向代码添加任何内容。我在 OSX 上,所以我必须安装 Apache Derby。每次我构建并运行程序时,我都会得到这个:

Derby has been started.

Product list:
bvbn Murach's Beginning Visual Basic .NET $49.50
cshp Murach's C# $49.50
java Murach's Beginning Java $49.50
jsps Murach's Java Servlets and JSP $49.50
mcb2 Murach's Mainframe COBOL $59.50
sqls Murach's SQL for SQL Server $49.50
zjcl Murach's OS/390 and z/OS JCL $62.50

Exception in thread "main" java.lang.NullPointerException
First product:
at DBTesterApp.printProduct(DBTesterApp.java:117)
at DBTesterApp.printFirstProduct(DBTesterApp.java:66)
at DBTesterApp.main(DBTesterApp.java:16)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)

我很困惑为什么这个异常一直发生。我似乎没有发现“主要”代码有任何问题(见下文),我觉得我已经尝试了一切。关于可能导致此问题的任何线索?

import java.sql.*;

public class DBTesterApp
{
private static Connection connection = null;

public static void main(String args[])
{
// get the connection and start the Derby engine
connection = MurachDB.getConnection();
if (connection != null)
System.out.println("Derby has been started.\n");

// select data from database
printProducts();
printFirstProduct();
printLastProduct();
printProductByCode("java");

// modify data in the database
Product p = new Product("test", "Test Product", 49.50);
insertProduct(p);
printProducts();

deleteProduct(p);
printProducts();

// disconnect from the database
if (MurachDB.disconnect())
System.out.println("Derby has been shut down.\n");
}

public static void printProducts()
{
try (Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery("SELECT * FROM Products"))
{
Product p = null;

System.out.println("Product list:");
while(rs.next())
{
String code = rs.getString("ProductCode");
String description = rs.getString("Description");
double price = rs.getDouble("Price");

p = new Product(code, description, price);

printProduct(p);
}
System.out.println();
}
catch(SQLException e)
{
e.printStackTrace(); // for debugging
}
}

public static void printFirstProduct()
{
Product p = null;

// add code that prints the record for the first product in the Products table

System.out.println("First product:");
printProduct(p);
System.out.println();
}

public static void printLastProduct()
{
Product p = null;

// add code that prints the record for the last product in the Products table

System.out.println("Last product:");
printProduct(p);
System.out.println();
}

public static void printProductByCode(String productCode)
{
Product p = null;

// add code that prints the product with the specified code

System.out.println("Product by code: " + productCode);
printProduct(p);
System.out.println();
}

public static void insertProduct(Product p)
{
System.out.println("Insert test: ");

// add code that inserts the specified product into the database
// if a product with the specifed code already exists, display an error message

printProduct(p);
System.out.println();
}

private static void deleteProduct(Product p)
{
System.out.println("Delete test: ");

// add code that deletes the specified product from the database
// if a product with the specified code doesn't exist, display an error message

printProduct(p);
System.out.println();
}

// use this method to print a Product object on a single line
private static void printProduct(Product p)
{
String productString =
StringUtils.padWithSpaces(p.getCode(), 8) +
StringUtils.padWithSpaces(p.getDescription(), 44) +
p.getFormattedPrice();

System.out.println(productString);
}
}

最佳答案

由于 Product p 尚未实例化,此代码序列将产生一个 NPE:

Product p = null;

System.out.println("First product:");
printProduct(p);

关于java - main 中出现奇怪的 NullPointer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16549928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com