无法写入数据库
代码:
Connection con = null;
PreparedStatement psm = null;
ResultSet rs = null;
try
{
Class.forName( "com.mysql.jdbc.Driver ").newInstance();
String url = "jdbc:mysql://localhost/mydb ";
con = DriverManager.getConnection(url, "root ", "dolove ");
psm = con.prepareStatement( "insert into users values(?,?,?,?,?,?) ");
psm.setString(1,ID);
psm.setString(2,password);
psm.setString(3,name);
psm.setString(4,sex);
psm.setLong(5,getDate(date));
psm.setString(6,description);
psm.executeQuery();
session.setAttribute( "user ",ID);
response.sendRedirect( "index.jsp ");
}
catch(Exception e){
e.printStackTrace();
}
finally
{
if(rs!=null){
try{ rs.close();}catch(Exception e){e.printStackTrace();}
}
if(psm!=null){
try{ psm.close();}catch(Exception e){e.printStackTrace();}
}
if(con!=null){
try{ con.close();}catch(Exception e){e.printStackTrace();}
}
}
那5个参数的接受是正常的。但是执行之后,数据库里是空的。而有页面也不跳转,也没有打印任何捕获的异常,另外我是刚学,对PreparedStatement的定义和使用一点都不熟悉,这句psm = con.prepareStatement( "insert into users values(?,?,?,?,?,?) ");,如果我把prepareStatement写成PreparedStatement反而会报错。不知道为什么。
神哪,救救我吧
------解决方案--------------------你的rs指的是结果集,结果集是用来接收查询返回的结果,你的插入操作没有返回值,所以就不能赋给rs,所以会报
空指针错误
------解决方案--------------------psm.setLong(5,getDate(date));为什么要在dao这层做啊.这层只帮数据库操作啊.
你是不是业务逻辑层把是util.date类,后来你要改成sql.date. 你应该在前面做转变后再传进来.但这个不是问题...
ps=psm.executeQuery();才可以获得结果集啊...看你上面的代码怎么没写呢..不清楚你改了后是否好了.
------解决方案--------------------mysql: driver:com.mysql.jdbc.Driver
url:jdbc:mysql://localhost:3306/数据库名
sqlserver: 桥连:driver: sun.jdbc.odbc.JdbcOdbcDriver
url:jdbc:odbc:数据库名
直连:driver:com.microsoft.jdbc.sqlserver.SQLServerDriver
url:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名
看一下你的存储过程是否正确,
import java.sql.*;有没有这句
数据库驱动是否已放入服务器的类包中(如:tomcat是放在/common/lib里面)
还有你的psm.executeQuery();一定要改成psm.executeUpdate();否则那不是更新语句。
多看看书,多运行运行,你会明白了。