求各位大神帮忙看一下 为啥会出现空指针异常

W_fat 2018-01-12 11:53:30
package com.p.jbit;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Test2{
private static final String driver = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://localhost:3306/demo1?useUnicode=true&&characterEncoding=utf-8";
private static final String user="root";
private static final String password="123";

private Connection conn=null;

private ResultSet res ;
PreparedStatement prpe=null;
/*
* 添加
*/
public void insret(Preson preson){
try {
//加载驱动
Class.forName(driver);

conn=DriverManager.getConnection(url, user, password);
//创建操作sql语句
prpe=conn.prepareStatement("insert into preson(pname,paddr,psex)values(?,?,?)");
//开始给占位符赋值操作
prpe.setString(1, preson.getPname());
prpe.setString(2, preson.getPaddr());
prpe.setString(3, preson.getPsex());

int i=prpe.executeUpdate();

if(i!=0){
System.out.println("添加成功!!");
}


} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* 删除
*/
public void Delete(int i){
try {
//加载驱动
Class.forName(driver);

conn=DriverManager.getConnection(url, user, password);
//创建操作sql语句
prpe=conn.prepareStatement("delete from preson where pid = ?");

prpe.setInt(1 , i);

int c = prpe.executeUpdate();
if(c!=0){
System.out.println("删除成功!");
}


} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* 修改
*/
public void update(Preson pe){
try {
//加载驱动
Class.forName(driver);

conn=DriverManager.getConnection(url, user, password);
//创建操作sql语句
prpe=conn.prepareStatement("update preson set pname='李四',paddr='上海',psex='女' where pid=1");

int j = prpe.executeUpdate();
if(j!=0){
System.out.println("添加成功!");
}

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* 查询
*/
public List<Preson>demed(){
List<Preson> list = new ArrayList<Preson>();
try {
//加载驱动
Class.forName(driver);

conn=DriverManager.getConnection(url, user, password);
//创建操作sql语句
prpe=conn.prepareStatement("select * from preson");

res = prpe.executeQuery();
while(res.next()){
int pid = res.getInt("pid");
String pname = res.getString("pname");
String paddr = res.getString("paddr");
String psex = res.getString("psex");

Preson preson = new Preson();
preson.setPid(pid);
preson.setPname(pname);
preson.setPaddr(paddr);
preson.setPsex(psex);

list.add(preson);
}

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}



return null;

}

public static void main(String[] args) {
Test2 te = new Test2();
//Preson pe = new Preson();
// pe.setPname("老李");
// pe.setPaddr("天津");
// pe.setPsex("女");

//te.insret(pe);

//te.Delete(2);

//te.update(pe);

List<Preson> list = te.demed();

//语法没有报错 就是在最后运行的时候这个for循环总是出现空指针异常,SQL确定已经建立preson表了。
for(Preson preson : list){
System.out.println(preson.getPid()+"=="+preson.getPname()+"=="+preson.getPaddr()+"=="+preson.getPsex());
}

}
}
...全文
304 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 版主 2018-01-12
  • 打赏
  • 举报
回复
引用 3 楼 W_fat 的回复:
还是一样会报空指针异常啊!
List<Preson> list = te.demed(); 这一行打上断点, 然后单步跟踪。 学程序最开始就要学会调试, 这是基本功
吉普赛的歌 版主 2018-01-12
  • 打赏
  • 举报
回复
引用 2 楼 z10843087 的回复:
[quote=引用 1 楼 yenange 的回复:] 你提前判断一下不就得了?
for(Preson preson : list){
if ( preson == null ){
System.out.println( "person is null" );
continue;
}
if ( preson.getPid() == null || preson.getPname()==null ||  preson.getPaddr() ==null || preson.getPsex() ==null  ){
System.out.println( "person properties is null" );
continue;
}
System.out.println(preson.getPid()+"=="+preson.getPname()+"=="+preson.getPaddr()+"=="+preson.getPsex());
}
java的你也回答哦[/quote] 为什么不可以?
W_fat 2018-01-12
  • 打赏
  • 举报
回复
还是一样会报空指针异常啊!
W_fat 2018-01-12
  • 打赏
  • 举报
回复
for(Preson preson : list)是这句抛出的错误
OwenZeng_DBA 2018-01-12
  • 打赏
  • 举报
回复
引用 1 楼 yenange 的回复:
你提前判断一下不就得了?
for(Preson preson : list){
if ( preson == null ){
System.out.println( "person is null" );
continue;
}
if ( preson.getPid() == null || preson.getPname()==null ||  preson.getPaddr() ==null || preson.getPsex() ==null  ){
System.out.println( "person properties is null" );
continue;
}
System.out.println(preson.getPid()+"=="+preson.getPname()+"=="+preson.getPaddr()+"=="+preson.getPsex());
}
java的你也回答哦
吉普赛的歌 版主 2018-01-12
  • 打赏
  • 举报
回复
你提前判断一下不就得了?
for(Preson preson : list){
if ( preson == null ){
System.out.println( "person is null" );
continue;
}
if ( preson.getPid() == null || preson.getPname()==null ||  preson.getPaddr() ==null || preson.getPsex() ==null  ){
System.out.println( "person properties is null" );
continue;
}
System.out.println(preson.getPid()+"=="+preson.getPname()+"=="+preson.getPaddr()+"=="+preson.getPsex());
}
小野马1209 2018-01-12
  • 打赏
  • 举报
回复
和C#的代码好像
吉普赛的歌 版主 2018-01-12
  • 打赏
  • 举报
回复
引用 8 楼 W_fat 的回复:
解决了 资源没有关闭
恭喜, 没事就结贴吧
W_fat 2018-01-12
  • 打赏
  • 举报
回复
解决了 资源没有关闭
OwenZeng_DBA 2018-01-12
  • 打赏
  • 举报
回复
引用 5 楼 yenange 的回复:
[quote=引用 2 楼 z10843087 的回复:] [quote=引用 1 楼 yenange 的回复:] 你提前判断一下不就得了?
for(Preson preson : list){
if ( preson == null ){
System.out.println( "person is null" );
continue;
}
if ( preson.getPid() == null || preson.getPname()==null ||  preson.getPaddr() ==null || preson.getPsex() ==null  ){
System.out.println( "person properties is null" );
continue;
}
System.out.println(preson.getPid()+"=="+preson.getPname()+"=="+preson.getPaddr()+"=="+preson.getPsex());
}
java的你也回答哦[/quote] 为什么不可以?[/quote] 可以

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧