数据库insert语句操作过程中出现空指针问题

pooq 2016-12-26 11:12:01
先说现象:程序执行完后,报空指针错误,但是查看Access数据库,数据已经正常插入了,能看到录入的数据。为什么数据能录入,但总是报空指针错误?

源程序如下:
<%
String usee=request.getParameter("username");
String pass=request.getParameter("pwd");
String username="";
String password="";
int rns;
Class.forName("com.hxtt.sql.access.AccessDriver");
Connection conn=DriverManager.getConnection("jdbc:Access:///E:/db_database08.mdb",username,password);
Statement stmt=conn.createStatement();
if(conn!=null){out.println("数据库连接成功<BR>");}
if(stmt!=null){out.println("STMT生成成功<BR>");}
out.println("insert into tb_user(username,password) values(\""+usee+"\","+pass+")");
rns=stmt.executeUpdate("insert into tb_user(username,password) values('"+usee+"',"+pass+")");
stmt.close();
conn.close();
%>


报错:


...全文
3152 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcsflilong 2016-12-27
  • 打赏
  • 举报
回复
引用 21 楼 pooq 的回复:
[quote=引用 20 楼 bcsflilong 的回复:] [quote=引用 19 楼 pooq 的回复:] [quote=引用 16 楼 qq_25543635 的回复:] 加上conn.commit();提交事务 然后加上try catch模块看看
还是跟之前情况一样,没有什么起色 [/quote]rns=0 看18楼 [/quote] int rns=0;和 Integer rns=0;的情况还是一样,报空指针错。[/quote] 在执行前 做判断 定位问题

if(stmt==null){
System.out.println("stmt为空");
}else{
System.out.println("stmt不为空");
rns=stmt.executeUpdate("insert into tb_user(username,password) values('"+usee+"',"+pass+")");
}



改成这样 看看输出什么
pooq 2016-12-27
  • 打赏
  • 举报
回复
引用 20 楼 bcsflilong 的回复:
[quote=引用 19 楼 pooq 的回复:] [quote=引用 16 楼 qq_25543635 的回复:] 加上conn.commit();提交事务 然后加上try catch模块看看
还是跟之前情况一样,没有什么起色 [/quote]rns=0 看18楼 [/quote] int rns=0;和 Integer rns=0;的情况还是一样,报空指针错。
bcsflilong 2016-12-27
  • 打赏
  • 举报
回复
引用 19 楼 pooq 的回复:
[quote=引用 16 楼 qq_25543635 的回复:] 加上conn.commit();提交事务 然后加上try catch模块看看
还是跟之前情况一样,没有什么起色 [/quote]rns=0 看18楼
pooq 2016-12-27
  • 打赏
  • 举报
回复
引用 16 楼 qq_25543635 的回复:
加上conn.commit();提交事务 然后加上try catch模块看看


还是跟之前情况一样,没有什么起色
bcsflilong 2016-12-27
  • 打赏
  • 举报
回复
String usee=request.getParameter("username");
String pass=request.getParameter("pwd");
String username="";
String password="";
int rns=0;//改一下这里
Class.forName("com.hxtt.sql.access.AccessDriver");
Connection conn=DriverManager.getConnection("jdbc:Access:///E:/db_database08.mdb",username,password);
Statement stmt=conn.createStatement();
if(conn!=null){out.println("数据库连接成功<BR>");}
if(stmt!=null){out.println("STMT生成成功<BR>");}
out.println("insert into tb_user(username,password) values(\""+usee+"\","+pass+")");
rns=stmt.executeUpdate("insert into tb_user(username,password) values('"+usee+"',"+pass+")");
stmt.close();
conn.close();
%> 
bcsflilong 2016-12-27
  • 打赏
  • 举报
回复
String usee=request.getParameter("username"); String pass=request.getParameter("pwd"); String username=""; String password=""; int rns=0;//改一下这里 Class.forName("com.hxtt.sql.access.AccessDriver"); Connection conn=DriverManager.getConnection("jdbc:Access:///E:/db_database08.mdb",username,password); Statement stmt=conn.createStatement(); if(conn!=null){out.println("数据库连接成功<BR>");} if(stmt!=null){out.println("STMT生成成功<BR>");} out.println("insert into tb_user(username,password) values(\""+usee+"\","+pass+")"); rns=stmt.executeUpdate("insert into tb_user(username,password) values('"+usee+"',"+pass+")"); stmt.close(); conn.close(); %>
那年花 2016-12-27
  • 打赏
  • 举报
回复
加上conn.commit();提交事务 然后加上try catch模块看看
pooq 2016-12-27
  • 打赏
  • 举报
回复
引用 14 楼 hzdaiccx 的回复:

有参数的建议使用PreparedStatement, 代码如下:
String sql="insert into 表名 set username=?,password=?"
PreparedStatement ps=conn.prepareCall(sql);
ps.setString(1,"ssss");
ps.setString(2,"666");
ps.executeUpdate();
conn.close(); //再后面就是捕捉异常的代码了



换了上面的方法,效果还是跟之前一样,数据能录入,但还是报空指针。还是没找到办法。


pooq 2016-12-27
  • 打赏
  • 举报
回复
感谢楼上各位,确认了,就是Access_JDBC30.jar包的问题,换了个包,就好了。
不知道是不是之前没下载完整的缘故,两次下载的文件大小不一致。
看来我RP还不错,就是劳烦大家了
pooq 2016-12-27
  • 打赏
  • 举报
回复
引用 22 楼 bcsflilong 的回复:
[quote=引用 21 楼 pooq 的回复:] [quote=引用 20 楼 bcsflilong 的回复:] [quote=引用 19 楼 pooq 的回复:] [quote=引用 16 楼 qq_25543635 的回复:] 加上conn.commit();提交事务 然后加上try catch模块看看
还是跟之前情况一样,没有什么起色 [/quote]rns=0 看18楼 [/quote] int rns=0;和 Integer rns=0;的情况还是一样,报空指针错。[/quote] 在执行前 做判断 定位问题

if(stmt==null){
System.out.println("stmt为空");
}else{
System.out.println("stmt不为空");
rns=stmt.executeUpdate("insert into tb_user(username,password) values('"+usee+"',"+pass+")");
}



改成这样 看看输出什么[/quote] 我试过,就是执行stmt.executeUpdate()或者ps.executeUpdate();有问题。 用stmt.executeQuery() 方法执行SELECT语句时,都没问题,可以正常执行,没有任何错误。 之前,同样的代码,在@ayou_java那边,可以正常执行,但在我这边就会报空指针错误。我估计是不是跟系统环境,或者Access_JDBC30.jar 有关系。 我的系统环境是WIN7+JDK1.7+TOMCAT8.0,我这边的另一个机器上,环境是JDK1.8+ECLIPSE也有类似的情况,我们两台机器相同点是用的同一个的Access_JDBC30.jar拷贝文件 。所以,后面再重下个Access_JDBC30.jar包试试,如果问题还这样,只能说明我的RP有问题
心ღ怡 2016-12-26
  • 打赏
  • 举报
回复
有参数的建议使用PreparedStatement, 代码如下: String sql="insert into 表名 set username=?,password=?" PreparedStatement ps=conn.prepareCall(sql); ps.setString(1,"ssss"); ps.setString(2,"666"); ps.executeUpdate(); conn.close(); //再后面就是捕捉异常的代码了
ayou_java 2016-12-26
  • 打赏
  • 举报
回复
引用 12 楼 pooq 的回复:
[quote=引用 10 楼 ayou_java 的回复:] 试试usee插入数据库的时候不要加引号,你这个本来就是字符串。
不加的话,就报Invalid colum or variable[/quote] 项目发我看,私你了
pooq 2016-12-26
  • 打赏
  • 举报
回复
引用 10 楼 ayou_java 的回复:
试试usee插入数据库的时候不要加引号,你这个本来就是字符串。
不加的话,就报Invalid colum or variable
pooq 2016-12-26
  • 打赏
  • 举报
回复
引用 9 楼 ayou_java 的回复:
[quote=引用 8 楼 pooq 的回复:] [quote=引用 7 楼 ayou_java 的回复:] [quote=引用 6 楼 pooq 的回复:] 把executeUpdate语句注释掉,单独输出SQL语句字符串,是没问题的
rns是integer类型不[/quote] 肯定是啊![/quote] 那就不晓得了[/quote] 我也是崩溃了
ayou_java 2016-12-26
  • 打赏
  • 举报
回复
试试usee插入数据库的时候不要加引号,你这个本来就是字符串。
ayou_java 2016-12-26
  • 打赏
  • 举报
回复
引用 8 楼 pooq 的回复:
[quote=引用 7 楼 ayou_java 的回复:] [quote=引用 6 楼 pooq 的回复:] 把executeUpdate语句注释掉,单独输出SQL语句字符串,是没问题的
rns是integer类型不[/quote] 肯定是啊![/quote] 那就不晓得了
pooq 2016-12-26
  • 打赏
  • 举报
回复
引用 7 楼 ayou_java 的回复:
[quote=引用 6 楼 pooq 的回复:] 把executeUpdate语句注释掉,单独输出SQL语句字符串,是没问题的
rns是integer类型不[/quote] 肯定是啊!
ayou_java 2016-12-26
  • 打赏
  • 举报
回复
引用 6 楼 pooq 的回复:
把executeUpdate语句注释掉,单独输出SQL语句字符串,是没问题的
rns是integer类型不
pooq 2016-12-26
  • 打赏
  • 举报
回复
把executeUpdate语句注释掉,单独输出SQL语句字符串,是没问题的
ayou_java 2016-12-26
  • 打赏
  • 举报
回复
那就看你页面提交的表单中,name属性与你request.getParameter(“name”);的name是不是一样的,不一样的话,你取出来的值就会报null,而不是空字符串,所以插入数据库的时候因为你的列设置为非空,所以报错。
加载更多回复(4)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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