DAO连接由于数据库操作异常,总是报空指针异常,是为什么?

pstmt=conn.prepareStatement(sql)空指针异常,求大神支招 - Java EE - 网站开发技术
帮助别人就是帮助自己!
如果这里解决了您的问题,请您点一下推荐
pstmt=conn.prepareStatement(sql)空指针异常,求大神支招
package com.cw.
import java.io.F
import java.io.FileInputS
import java.sql.C
import java.sql.DriverM
import java.sql.PreparedS
import java.sql.ResultS
import java.sql.SQLE
import java.sql.S
import java.util.P
import org.junit.T
public class DBUtil {
// 1.getConnenction 方法的封装
public static Connection getConnection() {
// 利用配置文件来读取数据库路径,用户名,密码
String url =
String dbUser =
String dbPwd =
Connection conn =
Properties pro = new Properties();
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
// 2.close() 方法的封装,关闭ResultSet,PreparedStatement,Connection
public static void close(ResultSet rs, Statement pstmt,
Connection conn) {
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.
import java.sql.C
import java.sql.PreparedS
import java.sql.ResultS
import java.sql.SQLE
import java.sql.S
import java.util.ArrayL
import java.util.L
import com.cw.DAO.DogDAO;
import com.cw.entity.D
import com.cw.util.DBU
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
public Dog findByName(String name) {
// TODO Auto-generated method stub
public List&Dog& findall() {
String sql="select * from dog";
Connection conn=
PreparedStatement pstmt=
ResultSet rs=
//定义一个集合,存放数据库中信息
List&Dog& list=new ArrayList&Dog&();
//获取连接
conn=DBUtil.getConnection();
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);
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=
PreparedStatement pstmt=
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();
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)
"+"'"+dog.getName()+"'这……
是不是应该'"+dog.getName()+"'
那句sql语句没有问题的,奇怪的是我做个test类测试insert()是可以执行的,并且数据库也插入成功。
但是将这个方法放到一个jsp表单上就给我报空指针异常了。实在不解啊-。-
那就是new File("src/db_mysql.properties")这句有问题了,jsp下,没有src这个东西。
pstmt=conn.prepareStatement(sql);//这里抱报错
这里只用到了conn这么一个对象,难道conn为null,你数据库连上了没?
pstmt.setString(1, dog.getName());
这行代码有问题,你的sql语句里没有一个占位符,pstmt就别设置param,
引用 5 楼 s 的回复:
pstmt=conn.prepareStatement(sql);//这里抱报错
这里只用到了conn这么一个对象,难道conn为null,你数据库连上了没?
pstmt.setString(1, dog.getName());
这行代码有问题,你的sql语句里没有一个占位符,pstmt就别设置param,
那几行忘记删了,本来是用stmt.setString()方法的,后来改成这样的。我用junit测试过,连接数据库成功的,而且insert()也成功执行了。难道是3楼说的jsp中不支持src这个路径??
引用 4 楼 sweat89 的回复:
不是额,dog内容是从jsp页面取下来封装成dog的
引用 3 楼 fangmingshijie 的回复:
那就是new File("src/db_mysql.properties")这句有问题了,jsp下,没有src这个东西。
把配置文件去掉了,程序成功执行了!!不过这个配置文件路径该怎么让jsp识别,大神求指导
其实你去掉src/也应该可以。
引用 9 楼 fangmingshijie 的回复:
其实你去掉src/也应该可以。
这方法试了几次行不通额。。我生成servlet不是生成在本地tomcat里面么,该怎么去找到这个配置文件哦
放到webroot下findViewById(R.id.button2)为什么找不到button2呢 报的是空指针异常 R文件也有此ID_百度知道
findViewById(R.id.button2)为什么找不到button2呢 报的是空指针异常 R文件也有此ID
提问者采纳
你要确定这个Button属于哪个View的当然如果你这个是写在onCreate()里面的话没问题,要是写在外面或者其他方法里面,findViewById()前面要加上button的父容器例如v.findViewById
提问者评价
3Q 我明白了 视图不一致
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于struts2、spring的应用闲置一段时间后报空指针错
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口在MYeclipse中使用JMF框架调用本地摄像头,语句没有问题,可是总是获取不到我的摄像头,一直报空指针错误_百度知道
在MYeclipse中使用JMF框架调用本地摄像头,语句没有问题,可是总是获取不到我的摄像头,一直报空指针错误
语句就是这样:0&:String str1=&quot:Microsoft WDM Image Capture (Win32),但是在JMF registry中就可以获取;String str2=&quot,怎么解,如果环境变量有错,可是总是获取不到我的摄像头:Logitech USB Video Camera?语句:0&quot.getDevice(str2);,一直报空指针错误;di=CaptureDeviceMvfw在MYeclipse中使用JMF框架调用本地摄像头?环境变量的问题,语句没有问题,该怎么设置
提问者采纳
什么环境中?
如果是64位的JAVA,请换成32位的。
提问者评价
其他类似问题
按默认排序
其他1条回答
缺文件吧, 要吧jmf安装包中的lib下的全部文件拷贝到myeclipse工程中的webroot下的lib文件夹下才可以。
jmf的相关知识
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁基于struts2、spring mysql 的应用闲置一段时间后报空指针错 一般8小时自动断开 - SSH教程 - ab蓝学网
当前位置: &
基于struts2、spring mysql 的应用闲置一段时间后报空指针错 一般8小时自动断开
简介:在做struts2、spring网站时,在系统闲置一段时间后,访问页面会出错,第二次再访问就正常了。后来查了后台日志,发现是数据库连接关闭了,导致页面访问出错。页面上报空指针错误,错误没有保留,日志中...
在做struts2、spring网站时,在系统闲置一段时间后,访问页面会出错,第二次再访问就正常了。后来查了后台日志,发现是数据库连接关闭了,导致页面访问出错。页面上报空指针错误,错误没有保留,日志中记录的错误如下:
ERROR (java.sql.Connection:19)- Error calling Connection.close:
java.sql.SQLException: Already closed.
at mons.dbcp.PoolableConnection.close(PoolableConnection.java:84)
at mons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)
at org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:313)
&&&&&&& at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionA
wareDataSourceProxy.java:200)
&&&&&&& at $Proxy0.close(Unknown Source)
&&&&&&& at sun.reflect.GeneratedMethodAccessor58.invoke(Unknown Source)
&&&&&&& at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
&&&&&&& at java.lang.reflect.Method.invoke(Method.java:585)
&&&&&&& at mon.jdbc.logging.ConnectionLogProxy.invoke(ConnectionLogProxy.java:68)
&&&&&&& at $Proxy1.close(Unknown Source)
&&&&&&& at com.ibatis.sqlmap.engine.transaction.external.ExternalTransaction.close(ExternalTransaction.java:82)
&&&&&&& at com.ibatis.sqlmap.engine.transaction.TransactionManager.end(TransactionManager.java:111)
&&&&&&& at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.endTransaction(SqlMapExecutorDelegate.java:782)
&&&&&&& at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.endTransaction(SqlMapSessionImpl.java:176)
&&&&&&& at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.endTransaction(SqlMapClientImpl.java:154)
&&&&&&& at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.autoEndTransaction(SqlMapExecutorDelegate.java:883)
&&&&&&& at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:622)
&&&&&&& at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589)
&&&&&&& at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
&&&&&&& at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForList(SqlMapClientImpl.java:95)
&&&&&&& at com.wangar.ptc.dao.ibatis.IbatisSysMenuDAO.querySysMenuList(IbatisSysMenuDAO.java:50)
&&&&&&& at com.wangar.ptc.dao.impl.DefaultSysMenuDAO.querySysMenuList(DefaultSysMenuDAO.java:22)
&&&&&&& at com.wangar.ptc.manager.impl.DefaultSysMenuManager.querySysMenuList(DefaultSysMenuManager.java:187)
&&&&&&& at com.wangar.ptc.manager.impl.DefaultSysMenuManager.querySysMenuBySmid(DefaultSysMenuManager.java:146)
&&&&&&& at com.wangar.ptc.manager.impl.DefaultSysMenuManager.getRootSysMenu(DefaultSysMenuManager.java:90)
&&&&&&& at com.wangar.ptc.ao.impl.DefaultSysMenuAO.getRootSysMenu(DefaultSysMenuAO.java:50)
&&&&&&& at com.wangar.ptc.action.IndexAction.mainIndex(IndexAction.java:26)
&&&&&&& at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
&&&&&&& at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
&&&&&&& at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
&&&&&&& at java.lang.reflect.Method.invoke(Method.java:585)
&&&&&&& at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
&&&&&&& at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
&&&&&&& at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
&&&&&&& at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
&&&&&&& at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
&&&&&&& at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
&&&&&&& at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
&&&&&&& at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.jav
……省略部分错误……
看到错误后大致想到了是因为数据连接长时间不用,自己关闭掉了,所以首先想到从数据源配置参数入手,经过一翻查找,看到有人遇到了和我一样的问题,在这里先把内容贴出来。我在spring中用apache 的 dbcp 数据进行数据库连接,配置代码如下:
####& DBCP配置 ####
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database
jdbc.username=user
jdbc.password=usr
数据源配置
&bean id="dataSource" class="mons.dbcp.BasicDataSource"&
&&& &property name="driverClassName" value="${jdbc.driver}" /&
&&& &property name="url" value="${jdbc.url}" /&
&&& &property name="username" value="${jdbc.username}" /&
&&& &property name="password" value="${jdbc.password}" /&
修改后的配置
####& DBCP配置 ####
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database
jdbc.username=user
jdbc.password=usr
#初始化 连接
jdbc.initialSize=0
#连接池的最大活动个数
jdbc.maxActive=20
#没有人用连接的时候,最大闲置的连接个数。
jdbc.maxIdle=100
#没有人用连接的时候,最小闲置的连接个数。
jdbc.minIdle=0
#超时等待时间以毫秒为单位
jdbc.maxWait=10000
#是否自动回收超时连接
jdbc.removeAbandoned=true
#设置被遗弃的连接的超时的时间(以秒数为单位),即当一个连接被遗弃的时间超过设置的时间,则它会自动转换成可利用的连接。默认的超时时间是300秒。
jdbc.removeAbandonedTimeout=60
#是否在自动回收超时连接的时候打印连接的超时错误
jdbc.logAbandoned&=&true
#给出一条简单的sql语句进行验证
jdbc.validationQuery=select&1&from&dual
#在取出连接时进行有效验证
jdbc.testOnBorrow=true
数据源配置
&bean id="dataSource" class="mons.dbcp.BasicDataSource"&
&&& &property name="driverClassName" value="${jdbc.driver}" /&
&&& &property name="url" value="${jdbc.url}" /&
&&& &property name="username" value="${jdbc.username}" /&
&&& &property name="password" value="${jdbc.password}" /&
&&& &property name="maxActive" value="${jdbc.maxActive}" /&
&&& &property name="maxIdle" value="${jdbc.maxIdle}" /&
&&& &property name="maxWait" value="${jdbc.maxWait}" /&
&&& &property name="removeAbandoned" value="${jdbc.removeAbandoned}" /&
&&& &property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}" /&
&&& &property name="logAbandoned" value="${jdbc.logAbandoned}" /&
&&& &property name="validationQuery" value="${jdbc.validationQuery}" /&
&&& &property name="testOnBorrow" value="${jdbc.testOnBorrow}" /&
其中蓝色加粗部分主要是解决数据库自动重连的问题。
如果觉得《基于struts2、spring mysql 的应用闲置一段时间后报空指针错 一般8小时自动断开》不错,请把本站告诉您身边的朋友!
转载注明本文地址:
正在加载 基于struts2、spring mysql 的应用闲置一段时间后报空指针错 一般8小时自动断开 评论...}

我要回帖

更多关于 网易宝系统数据库异常 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信