pstmt=conn.prepareStatement(sql)空指针异常,求大神支招

阿飞的蝶 2013-03-28 07:39:45

package com.cw.util;

import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import org.junit.Test;
public class DBUtil {

@Test
// 1.getConnenction 方法的封装
public static Connection getConnection() {
// 利用配置文件来读取数据库路径,用户名,密码
String url = null;
String dbUser = null;
String dbPwd = null;
Connection conn = null;
Properties pro = new Properties();

try {
FileInputStream fis=new FileInputStream(new File("src/db_mysql.properties"));
pro.load(fis); //读取配置文件中的键值对
url = pro.getProperty("url");
dbUser = pro.getProperty("dbUser");
dbPwd = pro.getProperty("dbPwd");
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, dbUser, dbPwd);
// 如果创建Connection成功则返回一个Connection对象
System.out.println(url+dbUser+dbPwd);

} catch (Exception e) {
// TODO: handle exception
}
return conn;

}

// 2.close() 方法的封装,关闭ResultSet,PreparedStatement,Connection
public static void close(ResultSet rs, Statement pstmt,
Connection conn) {

try {
if (rs != null) {
rs.close();
}

if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}




package com.cw.DAO.imp;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.cw.DAO.DogDAO;
import com.cw.entity.Dog;
import com.cw.util.DBUtil;

public class DogDAOImpl implements DogDAO{

public void deleteById(int id) {
// TODO Auto-generated method stub

}

public Dog findById(int id) {
// TODO Auto-generated method stub
return null;
}

public Dog findByName(String name) {
// TODO Auto-generated method stub
return null;
}

public List<Dog> findall() {
String sql="select * from dog";
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
//定义一个集合,存放数据库中信息
List<Dog> list=new ArrayList<Dog>();
//获取连接
conn=DBUtil.getConnection();
try {
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()){
Dog dog=new Dog();
dog.setName(rs.getString("name"));
dog.setAge(rs.getInt("age"));
dog.setSex(rs.getString("sex"));
dog.setColor(rs.getString("color"));
list.add(dog);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DBUtil.close(rs, pstmt, conn);
return list;
}

public void insert(Dog dog) {
String sql="insert into dog(name,age,sex,color)values("+"'"+dog.getName()+"',"+dog.getAge()+",'"+dog.getSex()+"','"+dog.getColor()+"')";
Connection conn=null;
PreparedStatement pstmt=null;
try {
conn=DBUtil.getConnection();
pstmt=conn.prepareStatement(sql);//这里抱报错
pstmt.setString(1, dog.getName());
pstmt.setInt(2, dog.getAge());
pstmt.setString(3, dog.getSex());
pstmt.setString(4, dog.getColor());
pstmt.executeUpdate();
System.out.println("conn"+conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBUtil.close(null, pstmt, conn);
}

}

}




错误信息:
严重: Servlet.service() for servlet addAction threw exception
java.lang.NullPointerException
at com.cw.DAO.imp.DogDAOImpl.insert(DogDAOImpl.java:66)
at com.cw.servlet.addAction.doGet(addAction.java:40)
at com.cw.servlet.addAction.doPost(addAction.java:49)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)


...全文
1459 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
放到webroot下
阿飞的蝶 2013-03-28
  • 打赏
  • 举报
回复
引用 9 楼 fangmingshijie 的回复:
其实你去掉src/也应该可以。
这方法试了几次行不通额。。我生成servlet不是生成在本地tomcat里面么,该怎么去找到这个配置文件哦
  • 打赏
  • 举报
回复
其实你去掉src/也应该可以。
阿飞的蝶 2013-03-28
  • 打赏
  • 举报
回复
引用 3 楼 fangmingshijie 的回复:
那就是new File("src/db_mysql.properties")这句有问题了,jsp下,没有src这个东西。
把配置文件去掉了,程序成功执行了!!不过这个配置文件路径该怎么让jsp识别,大神求指导
阿飞的蝶 2013-03-28
  • 打赏
  • 举报
回复
引用 4 楼 sweat89 的回复:
dog为空吗
不是额,dog内容是从jsp页面取下来封装成dog的
阿飞的蝶 2013-03-28
  • 打赏
  • 举报
回复
引用 5 楼 s478853630 的回复:
pstmt=conn.prepareStatement(sql);//这里抱报错 这里只用到了conn这么一个对象,难道conn为null,你数据库连上了没? pstmt.setString(1, dog.getName()); 这行代码有问题,你的sql语句里没有一个占位符,pstmt就别设置param,
那几行忘记删了,本来是用stmt.setString()方法的,后来改成这样的。我用junit测试过,连接数据库成功的,而且insert()也成功执行了。难道是3楼说的jsp中不支持src这个路径??
s478853630 2013-03-28
  • 打赏
  • 举报
回复
pstmt=conn.prepareStatement(sql);//这里抱报错 这里只用到了conn这么一个对象,难道conn为null,你数据库连上了没? pstmt.setString(1, dog.getName()); 这行代码有问题,你的sql语句里没有一个占位符,pstmt就别设置param,
sweat89 2013-03-28
  • 打赏
  • 举报
回复
dog为空吗
  • 打赏
  • 举报
回复
那就是new File("src/db_mysql.properties")这句有问题了,jsp下,没有src这个东西。
阿飞的蝶 2013-03-28
  • 打赏
  • 举报
回复
那句sql语句没有问题的,奇怪的是我做个test类测试insert()是可以执行的,并且数据库也插入成功。 但是将这个方法放到一个jsp表单上就给我报空指针异常了。实在不解啊-。-
  • 打赏
  • 举报
回复
"+"'"+dog.getName()+"'这…… 是不是应该'"+dog.getName()+"'

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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