标题:[求助]为什么会有空指针异常JDBC
只看楼主
NiceGirl
Rank: 2
等 级:新手上路
威 望:4
帖 子:909
专家分:0
注 册:2006-6-18
 问题点数:0 回复次数:10 
[求助]为什么会有空指针异常JDBC

编写一个程序,根据用户输入的产品代码,在Product 表中搜索特定的产品,并显示产品的详细信息。该程序还应允许根据数量进行搜索并显示数量大于用户输入的值的产品详细信息。此外,还应该提供一个菜单,以便用户可以选择是根据产品代码还是数量进行搜索。Product表的结构如表所示
列名称 数据类型
ProductCode varchar
ProductName varchar
Quantity Numeric

向表中添加数据
ProductCode ProductName Quantity
A001 奥迪A6 550
A002 桑塔那2000 100
A003 奔驰SL500 80

提示:
使用PreparedStatement类搜索记录
使用非DSN连接建立与数据库的连接

以下是我写的代码,编译能过,执行的时候会报空指针异常,大家指点指点

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.PreparedStatement;

class ProductDetails {
private Connection con;
private String url;
private String serverName;
private String portNumber;
private String databaseName;
private String userName;
private String password;
private String sql;
private BufferedReader br;

ProductDetails() {
url = "jdbc:microsoft:sqlserver://";
serverName = "MICROSOF-F690DY";
portNumber = "1433";
databaseName = "test";
userName = " ";
password = " ";
}

private String getConnectionUrl() {
return url + serverName + ":" + portNumber + ";databaseName=" + databaseName + ";";
}

private Connection getConnection() {
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection(getConnectionUrl(),userName,password);

if (con != null) {
System.out.println("连接成功!");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("getConnection()内的错误跟踪:" + e.getMessage());
}
return con;
}

private void menudisplay() throws IOException {
char choice;

while (true) {
System.out.println();
System.out.println("1.根据产品代码进行搜索");
System.out.println("2.根据数量进行搜索");
System.out.println("3.退出");
System.out.println();
System.out.print("请输入您的选择:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
choice = (char) br.read();

switch(choice) {
case '1':
searchRecordByProductCode();
break;
case '2':
searchRecordByQuantity();
break;
default:
System.out.println("\n请输入一个有效数字");
break;
}
}
}

private void searchRecordByProductCode() throws IOException {
try {
System.out.println();
System.out.println("请输入产品代码:");
String code = br.readLine();
System.out.println("根据产品代码进行搜索。。。");
con = getConnection();
sql = "select * from product where ProductCode like '" +code+ "'";
PreparedStatement pstmt = con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println("");
System.out.println("产品代码" + rs.getString(1));
System.out.println("产品名称" + rs.getString(2));
System.out.println("数量" + rs.getString(3));
}
} catch (SQLException ce) {
System.out.println(ce);
}
}

private void searchRecordByQuantity() throws IOException {
try {
System.out.println();
System.out.println("请输入数量:");
int quantity = br.read();
System.out.println("根据数量进行搜索。。。");
con = getConnection();
sql = "select * form product where Quantity>" + quantity;
PreparedStatement pstmt = con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println("");
System.out.println("产品代码" + rs.getString(1));
System.out.println("产品名称" + rs.getString(2));
System.out.println("数量" + rs.getString(3));
}
} catch (SQLException ce) {
System.out.println(ce);
}
}

public static void main(String[] args) throws IOException {
ProductDetails productObj = new ProductDetails();
productObj.getConnectionUrl();
productObj.menudisplay();
}
}

搜索更多相关主题的帖子: JDBC 指针 Quantity Product 搜索 
2006-06-29 22:46
NiceGirl
Rank: 2
等 级:新手上路
威 望:4
帖 子:909
专家分:0
注 册:2006-6-18
得分:0 
还没人回啊

曾经以为百般艰难,蓦然回首,才发现已飞渡千山。。!
2006-06-29 23:51
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
在哪一行会报错,你还没有说呢,这些关系到数据库连接的程序
我们都不好调试,因为没有装特定的数据库
所以这个时候,最好能把详细的错误信息打出来

可惜不是你,陪我到最后
2006-06-30 10:23
NiceGirl
Rank: 2
等 级:新手上路
威 望:4
帖 子:909
专家分:0
注 册:2006-6-18
得分:0 
回复:(千里冰封)在哪一行会报错,你还没有说呢,这些...

错在这里
D:\>javac ProductDetails.java
D:\>java ProductDetails

1.根据产品代码进行搜索
2.根据数量进行搜索
3.退出

请输入您的选择:1
请输入产品代码:

Exception in thread "main" java.lang.NullPointerException.
at ProductDetails.searchRecoudByProductCode<ProductDetails.java:81>
at ProductDetails.menudisplay<ProductDetails.java:65>
at ProductDetails.main<ProductDetails:java:122>

谢谢千里了啊,帮我看看


曾经以为百般艰难,蓦然回首,才发现已飞渡千山。。!
2006-06-30 17:51
NiceGirl
Rank: 2
等 级:新手上路
威 望:4
帖 子:909
专家分:0
注 册:2006-6-18
得分:0 
怎么插图片啊,我打的好辛苦。。。

曾经以为百般艰难,蓦然回首,才发现已飞渡千山。。!
2006-06-30 17:51
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
这提示不是已经很清楚了吗?
空指针异常,说明你调用了某个你没有初始化的对象
在第81行,我看了一下,应该是
String code = br.readLine();
这句出了异常,你的这个br肯定没有初始化

建议以后能自己从错误信息中自己排除错误
像这种空指针异常是很好排除的,只要你使用的对象都初始化了就不会出这种异常了

可惜不是你,陪我到最后
2006-06-30 18:03
水影月圆
Rank: 4
等 级:贵宾
威 望:11
帖 子:738
专家分:0
注 册:2005-8-2
得分:0 

要学会自己看啊
Exception in thread "main" java.lang.NullPointerException.
at ProductDetails.searchRecoudByProductCode<ProductDetails.java:81>
at ProductDetails.menudisplay<ProductDetails.java:65>
at ProductDetails.main<ProductDetails:java:122>


NullPointerException 试图访问null对象引用
然后就是指到65行 看你65行是什么 是在调用searchRecordByProductCode类
然后找到searchRecordByProductCode类所在 你再继续看 现在指到81行 81行又正好是在searchRecordByProductCode类里面
所以千里才这么肯定的是81行错了

系统都告诉你问题所在 只要你仔细看 肯定能找出问题所在的


子非鱼,安知鱼之江湖?子非我,安知我之功夫 http://20681.
2006-06-30 18:26
NiceGirl
Rank: 2
等 级:新手上路
威 望:4
帖 子:909
专家分:0
注 册:2006-6-18
得分:0 
谢谢二位,问题解决了~~~~~~

曾经以为百般艰难,蓦然回首,才发现已飞渡千山。。!
2006-06-30 18:42
水影月圆
Rank: 4
等 级:贵宾
威 望:11
帖 子:738
专家分:0
注 册:2005-8-2
得分:0 
我想说句 以前我有不懂的 就象你这样发贴问 实际上都是些很简单的问题 后来 我也慢慢的学会了 这样老问不是办法 还是自己解决的快 只有自己看异常提示 自己找哪出了问题 自己看API 或者到网上找人家已经出过类似情况的问题 而不再象以前那样 一出个问题就发贴来问怎么解决啊 帮我改下啊 ,等等 其实J2SE就是JAVA的基础 如果我们学这个的连怎么去解决问题的能力都没有 那下面还怎么去学J2EE 和J2ME啊 到那时不会有人再告诉你什么 只会告诉你一句 自己看API去
自己摸索去 如果没有这能力 难道你上班了 有问题你还继续发贴问人家怎么办?那老板要是发现了 还不炒你鱿鱼啊

废话说多了 认为不对的 我马上删了

自己实在是搞不定了 再来发贴求助也不迟啊

[此贴子已经被作者于2006-6-30 18:52:28编辑过]


子非鱼,安知鱼之江湖?子非我,安知我之功夫 http://20681.
2006-06-30 18:51
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

同意你的说法,其实排除错误是很容易的事情
因为编译器已经告诉你哪一行出错了
你去这一行就可以找到了
并且编译器也会把错误的类型打印出来
根据这些排除错误应该是很容易的事情


可惜不是你,陪我到最后
2006-06-30 19:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-75762-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.118558 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved