我的jsp+javabean+servlet添加数据程序执行正确,但是向数据库没添加数据?请高手指点!
程序代码如下
DBConn.javapackage database;import java.sql.*;
import java.util.ArrayList;
import beans.UserInf;public class DBConn {

private Connection conn;// ��ݿ�t�Ӷ��� private PreparedStatement stmt;// Ԥ�������

private CallableStatement  sc; private ResultSet rs;// ������
public DBConn()
{
try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager
.getConnection("jdbc:oracle:thin:@localhost:1521:myoracle","system","manager");

} catch (Exception e) { }
}
public boolean check(String name)
{
try {
stmt=conn.prepareStatement("select * from userinf where name=?");
stmt.setString(1, name);
rs = stmt.executeQuery();
if(rs.next())
{

return true;
}


} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
public void reg(UserInf u)
{
try {
stmt=conn.prepareStatement("insert into userinf(name,pwd,addr,tel,truename,email,test) values(?,?,?,?,?,?,?)");
stmt.setString(1, u.getName());
stmt.setString(2, u.getPwd());
stmt.setString(3, u.getAddr());
stmt.setString(4, u.getTel());
stmt.setString(5, u.getTruename());
stmt.setString(6, u.getEmail());
stmt.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public UserInf login(String name,String pwd)
{ try {
stmt=conn.prepareStatement("select * from userinf where name=? and pwd = ?");
stmt.setString(1, name);
stmt.setString(2, pwd);
rs = stmt.executeQuery();
if(rs.next())
{
UserInf u = new UserInf();
u.setId(rs.getInt("id"));
u.setAddr(rs.getString("addr"));
u.setEmail(rs.getString("email"));
u.setName(rs.getString("name"));
u.setPwd(rs.getString("pwd"));
u.setQuanxian(rs.getString("quanxian"));
u.setTel(rs.getString("tel"));
u.setTruename(rs.getString("truename"));
return u;
}


} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;

}
public ArrayList search(String search)
{
ArrayList<UserInf> a = new ArrayList<UserInf>();

try {
stmt=conn.prepareStatement("select * from userinf where name like ?");
stmt.setString(1, "%"+search+"%");
rs = stmt.executeQuery();
while(rs.next())
{
UserInf u = new UserInf();
u.setId(rs.getInt("id"));
u.setAddr(rs.getString("addr"));
u.setEmail(rs.getString("email"));
u.setName(rs.getString("name"));
u.setPwd(rs.getString("pwd"));
u.setQuanxian(rs.getString("quanxian"));
u.setTel(rs.getString("tel"));
u.setTruename(rs.getString("truename"));
a.add(u);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return a;
}
public ArrayList searchAll()
{
ArrayList<UserInf> a = new ArrayList<UserInf>();

try {
stmt=conn.prepareStatement("select * from userinf");
rs = stmt.executeQuery();
while(rs.next())
{
UserInf u = new UserInf();
u.setId(rs.getInt("id"));
u.setAddr(rs.getString("addr"));
u.setEmail(rs.getString("email"));
u.setName(rs.getString("name"));
u.setPwd(rs.getString("pwd"));
u.setQuanxian(rs.getString("quanxian"));
u.setTel(rs.getString("tel"));
u.setTruename(rs.getString("truename"));
a.add(u);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return a;
}
public boolean del(int id)
{
boolean a = false;
try {
stmt=conn.prepareStatement("delete from userinf where id = ?");
stmt.setInt(1, id);
stmt.execute();
a = true;
return a;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return a;
}
public UserInf searchID(int id)
{

UserInf u = new UserInf();
try {
stmt=conn.prepareStatement("select * from userinf where id = ?");
stmt.setInt(1, id);
rs = stmt.executeQuery();
if(rs.next())
{
u.setId(rs.getInt("id"));
u.setAddr(rs.getString("addr"));
u.setEmail(rs.getString("email"));
u.setName(rs.getString("name"));
u.setPwd(rs.getString("pwd"));
u.setQuanxian(rs.getString("quanxian"));
u.setTel(rs.getString("tel"));
u.setTruename(rs.getString("truename"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return u;
}
public int change(UserInf u)
{
int i = 0;
try {
stmt=conn.prepareStatement("update userinf set name = ? , pwd = ? , addr= ? , email=? , tel=? , truename=? where id = ?");
stmt.setString(1, u.getName());
stmt.setString(2, u.getPwd());
stmt.setString(3, u.getAddr());
stmt.setString(4, u.getEmail());
stmt.setString(5, u.getTel());
stmt.setString(6, u.getTruename());
stmt.setInt(7, u.getId());
stmt.execute();
i = 1;
return i;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return i;
}}
Reg.java
package servlets;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import database.DBConn;import beans.UserInf;public class Reg extends HttpServlet { /**
 * The doGet method of the servlet. <br>
 *
 * This method is called when a form has its tag value method equals to get.
 * 
 * @param request the request send by the client to the server
 * @param response the response send by the server to the client
 * @throws ServletException if an error occurred
 * @throws IOException if an error occurred
 */
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doPost(request, response);
} /**
 * The doPost method of the servlet. <br>
 *
 * This method is called when a form has its tag value method equals to post.
 * 
 * @param request the request send by the client to the server
 * @param response the response send by the server to the client
 * @throws ServletException if an error occurred
 * @throws IOException if an error occurred
 */
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("gb2312");
String name = request.getParameter("name").trim();
String pwd = request.getParameter("pwd").trim();
String addr = request.getParameter("addr").trim();
String tel = request.getParameter("tel").trim();
String truename = request.getParameter("truename").trim();
String email = request.getParameter("email").trim();
UserInf u = new UserInf();
u.setName(name);
u.setPwd(pwd);
u.setAddr(addr);
u.setTel(tel);
u.setTruename(truename);
u.setEmail(email);
DBConn db = new DBConn();
if (db.check(name)) 
{
out.println("�û������");
response.setHeader("refresh","2;URL=reg.jsp");
}
else
{
db.reg(u);
out.println("ע��ɹ������¼��");
response.setHeader("refresh","2;URL=login.jsp");
}
}}reg.jsp页面就不发代码了,就几个文本字段,一个form action
当提交时把填写数据通过action提交给reg.java(影射为reg.do)
请高手给我看看是什么原因!谢谢

解决方案 »

  1.   

    try {
                stmt=conn.prepareStatement("insert into userinf(name,pwd,addr,tel,truename,email,test) values(?,?,?,?,?,?,?)");
                stmt.setString(1, u.getName());
                stmt.setString(2, u.getPwd());
                stmt.setString(3, u.getAddr());
                stmt.setString(4, u.getTel());
                stmt.setString(5, u.getTruename());
                stmt.setString(6, u.getEmail());
                stmt.execute();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    你插入的是7个数据啊  你少插个 test
      

  2.   


    1楼说的没错,少一个字段“test”stmt.setString(7, u.gettest());
      

  3.   

    不好意识,我代码发错了,应该为package database;import java.sql.*;
    import java.util.ArrayList;
    import beans.UserInf;public class DBConn {
        
        private Connection conn;// ��ݿ�t�Ӷ���    private PreparedStatement stmt;// Ԥ�������
        
        private CallableStatement  sc;    private ResultSet rs;// ������
        public DBConn()
        {
            try {            Class.forName("oracle.jdbc.driver.OracleDriver");            conn = DriverManager
                        .getConnection("jdbc:oracle:thin:@localhost:1521:myoracle","system","manager");
                
            } catch (Exception e) {        }
        }
        public boolean check(String name)
        {
            try {
                stmt=conn.prepareStatement("select * from userinf where name=?");
                stmt.setString(1, name);
                rs = stmt.executeQuery();
                if(rs.next())
                {
                    
                    return true;
                }
                
                    
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return false;
        }
        public void reg(UserInf u)
        {
            try {
                stmt=conn.prepareStatement("insert into userinf(name,pwd,addr,tel,truename,email) values(?,?,?,?,?,?)");
                stmt.setString(1, u.getName());
                stmt.setString(2, u.getPwd());
                stmt.setString(3, u.getAddr());
                stmt.setString(4, u.getTel());
                stmt.setString(5, u.getTruename());
                stmt.setString(6, u.getEmail());
                stmt.execute();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
       ................}出现的插入为空
      

  4.   

    你的数据库是oracle的,数据库事务没有提交吧
    没见你对事务进行处理了。
      

  5.   

    你的程序设计的就有问题,你怎么加启一个事务啊,如conn.setAutoCommit(false);
    conn.commit();
    就不说这个,你关连接了吗.
    数据没插进数据库的原因有可能如下:
    假如数据库的事务隔离级别高一些的话,而你一直没有commit,那么断开连接时数据库将回滚,你的数据白插了。
      

  6.   

    我把public DBConn()
        {
            try {            Class.forName("oracle.jdbc.driver.OracleDriver");            conn = DriverManager
                        .getConnection("jdbc:oracle:thin:@localhost:1521:myoracle","system","manager");
                
            } catch (Exception e) {        }
        }
    改为mysql数据库就可以插入public DBConn()
    {
    try { Class.forName("org.gjt.mm.mysql.Driver"); conn = DriverManager
    .getConnection("jdbc:mysql://localhost:3306/tong?user=root&password=admin&useUnicode=true&characterEncoding=gb2312");

    } catch (Exception e) { }
    }
      

  7.   

    应该是程序与 oracle数据库方面出现了问题
    oracle数据表如下drop table userinf;create table userinf(
    id number(11) not null,
    name varchar2(80),
    pwd varchar2(80),
    addr varchar2(200),
    tel varchar2(80),
    truename varchar2(80),
    email varchar2(80)
    );alter table userinf
    add primary key (id);drop sequence userinfid;create sequence userinfid
    increment by 1
    start with 1
    minvalue 1
    Maxvalue 99999999999
    nocache;是不是id方面的问题啊?以前我用Statement操作数据库时用的insert into userinf(id,...) values(userinfid.nextval,...)
    现在用PreparedStatement的stmt.setString(1, u.getName());怎么实现id的插入啊?
    请高手指点!
      

  8.   

    con statement都没有关闭,DBConn()类应该有关闭方法吧,调用一下,如果还是不行,就使用字符串的sql,插入时先打印一次,将打印的sql放到plsql中执行一次,就知道为什么不能插入了。