以下是本人自己做的一个小例子  因为是刚刚学习  所以有些异常找不到   下面的异常是SQLException:oracle:000913:值过多
我在数据库中建的表跟UserName,Pwd,Email,RealName,Gender,Question,Answer,Phone,MyPage,Selfintro,Hobbies完全一样   不知道该怎么办了
我的目的是要把注册页面的信息存到数据库中 连接数据库都已经完成了  就是存不进去  写不到表里去  望好心人帮个忙吧   package ch14.JavaBean;import java.sql.*;
import java.sql.SQLException;public class DB_User {
//创建公共数据库连接对象
DB_Conn db_conn = new DB_Conn();
//-------------------------------添加注册用户---------------------
public int add(User user)
{

    db_conn.ConnectDB();
try{
String sql = "insert into userinfo(UserName,Pwd,Email,RealName,Gender,Question,Answer,Phone,MyPage,Selfintro,Hobbies) values('"
+user.getUsername()+"','"+user.getPassword()+"','"+user.getEmail()
+"','"+user.getRealname()+"','"+user.getGender()
+"','"+user.getQuestion()+"','"+user.getAnswer()
+"','"+user.getPhone()
+"','"+user.getPage()+"','"+user.getSelfintro()
+"','"+user.getHobby()+"')";
System.out.println(sql);
sql = new String(sql.getBytes("ISO8859-1"),"GB2312");
System.out.print(sql);

int i = db_conn.sm.executeUpdate(sql);
return i;
}
catch(SQLException SqlE)
{
SqlE.printStackTrace();
return -1;
}
catch(Exception E){
E.printStackTrace();
return -2;
}
finally{
//关闭连接,释放数据库资源
db_conn.CloseDB();
}
}
//----------------------------------修改用户信息函数----------------------------
public int update(User user){
db_conn.ConnectDB();
try{
String sql = "update userinfo set UserName='"
+user.getUsername() + "',Pwd='"
+user.getPassword() + "',Email='"
+user.getRealname() + "',Gender='"
+user.getGender()   + "',Question='"
+user.getQuestion() + "',Answer='"
+user.getAnswer()   + "',Phone='"
+user.getPhone()    + "',MyPage='"
+user.getPage()     + "',Hobbies='"
+user.getHobby()    + "',Selfintro='"
+user.getSelfintro()+ "' where id ='"
+user.getId() + "'";
//System.out.println(sql);
sql=new String(sql.getBytes("ISO8859-1"),"GB2312");
//System.out.println(sql);
int i = db_conn.sm.executeUpdate(sql);//执行sql语句
return -1;
}
catch(Exception E){
E.printStackTrace();
return -2;
}
finally{
//关闭连接
db_conn.CloseDB();
}
}//----------------------------------删除用户信息函数----------------------------
public int delete(int id)
{
       db_conn.ConnectDB();
       try
       {
        String sql = "delete from userinfo where id = '"+id+"'";
        int i = db_conn.sm.executeUpdate(sql);//执行sql语句
        return i;
       }
       catch(SQLException SqlE)
       {
        SqlE.printStackTrace();
        return -1;
       }
       catch(Exception E)
       {
        E.printStackTrace();
        return -2;
       }
       finally
       {
        //关闭连接,释放数据库资源
        db_conn.CloseDB();
       }
}
//----------------------------------通过用户名和密码获取用户信息函数------------------
public User get(String username, String password)
{
db_conn.ConnectDB();
ResultSet rs = null;
try
{
//sql查询
String sql = "select * from userinfo where UserName = '"+ username + "' and Pwd='" + password + "'";
//执行SQL语句
rs = db_conn.sm.executeQuery(sql);
//System.out.println(sql)
User user = null;
if(rs.next())
{
user = new User();
user.setId(rs.getInt("id"));
user.setUsername(username);
user.setPassword(rs.getString("Pwd"));
user.setEmail("Email");
user.setRealname(rs.getString("Realname"));
user.setGender(rs.getInt("Gende"));
user.setQuestion(rs.getString("Question"));
user.setAnswer(rs.getString("Answer"));
user.setPhone(rs.getString("Phone"));
user.setPage(rs.getString("MyPage"));
user.setHobbies(rs.getString("Hobbies"));
user.setSelfintro(rs.getString("Selfintro"));
return user;

}
return user;
}
catch(SQLException SqlE)
{
SqlE.printStackTrace();
return null;
}
catch(Exception E)
{
E.printStackTrace();
return null;
}
finally
{
//关闭连接,释放数据库资源
db_conn.CloseDB();
}
}
//----------------------------------找回用户名密码函数-----------------------------
public String getPassword(String username, String question,String answer)
{
db_conn.ConnectDB();
ResultSet rs = null;
try
{
//sql语句
String sql = "select Pwd from userinfo where username = '"
+ username +"' and question= '" + question + 
"' and anwser='" + answer + "'";
//执行SQL语句
rs = db_conn.sm.executeQuery(sql);
if(rs.next())
{
return rs.getString("Pwd");
}
return null;
}
catch(SQLException SqlE)
{
SqlE.printStackTrace();
return null;
}
catch(Exception E)
{
E.printStackTrace();
return null;
}
finally
{
//关闭连接
db_conn.CloseDB();
}
}
//----------------------------------判断用户是否存在函数----------------------------
public int getCount() throws Exception
{
db_conn.ConnectDB();
ResultSet rs = null;
try
{
String sql = "select count(id) from userinfo";
rs = db_conn.sm.executeQuery(sql);//执行SQL语句
if(rs.next())
{
return rs.getInt(1);
}
return 0;
}
catch(Exception SqlE)
{
SqlE.printStackTrace();
return 0;

finally {
// 关闭连接,释放数据库资源:
db_conn.CloseDB();
}
}
}

解决方案 »

  1.   

    //----------------------------------判断用户是否存在函数----------------------------
    public   int   getCount()   throws   Exception
    {
    db_conn.ConnectDB();
    ResultSet   rs   =   null;
    try
    {
    String   sql   =   "select   count(id)   from   userinfo";
    rs   =   db_conn.sm.executeQuery(sql);//执行SQL语句
    if(rs.next())
    {
    return   rs.getInt(1);
    }
    return   0;
    }
    catch(Exception   SqlE)
    {
    SqlE.printStackTrace();
    return   0;
    }  
    finally   {
    //   关闭连接,释放数据库资源:
    db_conn.CloseDB();
    }
    }
    }SQL应该加个where条件吧,不然不是把所有用户都查出来了
      

  2.   

    String   sql   =   "insert   into   userinfo(UserName,Pwd,Email,RealName,Gender,Question,Answer,Phone,MyPage,Selfintro,Hobbies)   values('"
    +user.getUsername()+"','"+user.getPassword()+"','"+user.getEmail()
    +"','"+user.getRealname()+"','"+user.getGender()
    +"','"+user.getQuestion()+"','"+user.getAnswer()
    +"','"+user.getPhone()
    +"','"+user.getPage()+"','"+user.getSelfintro()
    +"','"+user.getHobby()+"')"; userName,Pwd... 是String类型还是int类型的 
    如果是String类型的,就不需要''这个了,
      

  3.   

    现在已经能插入到数据库中了   但是在插入最后一项gethotty的时候我用的是JSP中的  checkbox选项     所有的自己填入的汉字都可以显示出来  就是hobby中的选项都是?????       我发现把下面的代码
    sql   =   new   String(sql.getBytes("ISO8859-1"),"GB2312");
    中的ISO8859-1改成gb2312后能显示出来   但是这样自己填入的东西在数据库中就是?????   所以很郁闷   希望有高手帮忙指点下public   class   DB_User   { 
    //创建公共数据库连接对象 
    DB_Conn   db_conn   =   new   DB_Conn(); 
    //-------------------------------添加注册用户--------------------- 
    public   int   add(User   user) 
    {       db_conn.ConnectDB(); 
    try{ 
    String   sql   =   "insert   into   userinfo(UserName,Pwd,Email,RealName,Gender,Question,Answer,Phone,MyPage,Selfintro,Hobbies)   values('" 
    +user.getUsername()+"','"+user.getPassword()+"','"+user.getEmail() 
    +"','"+user.getRealname()+"','"+user.getGender() 
    +"','"+user.getQuestion()+"','"+user.getAnswer() 
    +"','"+user.getPhone() 
    +"','"+user.getPage()+"','"+user.getSelfintro() 
    +"','"+user.getHobby()+"')"; 
    System.out.println(sql); 
    sql   =   new   String(sql.getBytes("ISO8859-1"),"GB2312"); 
    System.out.print(sql); int   i   =   db_conn.sm.executeUpdate(sql); 
    return   i; 

    catch(SQLException   SqlE) 

    SqlE.printStackTrace(); 
    return   -1; 

    catch(Exception   E){ 
    E.printStackTrace(); 
    return   -2; 

    finally{ 
    //关闭连接,释放数据库资源 
    db_conn.CloseDB(); 


      

  4.   

    <tr>
    <td align=right>兴趣爱好:</td>
    <td><input type="checkbox" name="hobbies" value="1@"> 计算机编程
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <input type="checkbox" name="hobbies" value="2@"> 阅读书籍
    </td>
    </tr>
    这是JSP中的选项代码
    public String getHobby() {                      
    StringTokenizer st = new StringTokenizer(getHobbies(), "@");
    StringBuffer sb = new StringBuffer();

    while (st.hasMoreElements()) {
    switch ((Integer.parseInt(st.nextElement().toString()))) {
    case 1:
    sb.append("计算机编程").toString();
    break;
    这是BEAN中的关于这段的代码
    还有就是上面的方法操作的代码
     请高手帮个忙   把乱码问题解决下  谢谢了
      

  5.   


    sql = new String(sql.getBytes("ISO-8859-1"),"gbk");这句话起了关键的作用   我发现经过这句话后  把我后面的hobby 值变成了乱码
      
    这句话前面我在注册页面输入的是乱码   但是后面选的就不是    经过了后  后面选的就变成乱码了正好反过来了 求助怎么能让他们一致啊