pstmt=conn.prepareStatement(sql)空指针异常,求大神支招
本帖最后由 yjjy0921 于 2013-03-28 19:42:53 编辑
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)
java sql
[解决办法]
dog为空吗
[解决办法]
pstmt=conn.prepareStatement(sql);//这里抱报错
这里只用到了conn这么一个对象,难道conn为null,你数据库连上了没?
pstmt.setString(1, dog.getName());
这行代码有问题,你的sql语句里没有一个占位符,pstmt就别设置param,
[解决办法]
放到webroot下