现有2个页面,1个是用户注册,1个是显示用户信息,并建了个空的数据库,要把用户信息存入数据库,但报错了,如下:
数据库
create database Operagouse Operago/*用户表*/
CREATE TABLE users( 
UserName char(10) not null primary key,
UserPWD char(10) not null,
Sex char(2) not null,
Blood char(2) not null,
Chara char(10) not null,
Memo char(100) not null,
City char(10) not null,
)注册页面
<HTML><BODY>
<FORM ACTION="register.jsp" METHOD="POST">
<P>帐号:<INPUT TYPE="TEXT" SIZE="20" NAME="UserID"></P>
<P>密码:<INPUT TYPE="PASSWORD" SIZE="20" NAME="UserPWD"></P>
性别:
<input type="radio" name="SEX" value="男" Checked/>男
<input type="radio" name="SEX" value="女" />女
<br><br>
血型:
<input type="radio" name="BLOOD" value="O" Checked />O
<input type="radio" name="BLOOD" value="A" />A
<input type="radio" name="BLOOD" value="B" />B
<input type="radio" name="BLOOD" value="AB" />AB
<br><br>
性格:
<input type="checkbox" name="CHATACTER" value="热情大方" Checked/>热情大方
<input type="checkbox" name="CHATACTER" value="内向腼腆" />内向腼腆
<input type="checkbox" name="CHATACTER" value="双重性格" />双重性格
<br><br>
简介:<textarea ROWS="8" COLS="30" name="MEMO" ></textarea><br><br>
城市:<select size="1" name="CITY">
      <option VALUE="北京">北京市</option>
      <option VALUE="上海">上海市</option>
      <option VALUE="天津">天津市</option>
      <option VALUE="重庆">重庆市</option>
      <option VALUE="湖南">湖南省</option>
      <option VALUE="湖北">湖北省</option>
      <option VALUE="江西">江西省</option>
      <option VALUE="四川">四川省</option>
      <option VALUE="贵州">贵州省</option>
      <option VALUE="浙江">浙江省</option>
      <option VALUE="福建">福建省</option>
      <option VALUE="新疆">新疆</option>
      <option VALUE="内蒙古">内蒙古</option>
      <option VALUE="香港">香港</option>
      <option VALUE="台湾">台湾</option>
      </select><br><br>
<INPUT TYPE="SUBMIT" VALUE="注 册"> 
                <INPUT TYPE="RESET" VALUE="重 置">
</FORM>
</BODY></HTML>
显示页面:
<%@    page  contentType="text/html;charset=gb2312"%>                  
<%@    page  import="java.sql.*"%>          
<html>                  
<body>                  
<%
String driverClass="com.microsoft.jdbc.sqlserver.SQLServerDriver";
Class.forName(driverClass);                
String    url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Opera";          
//statement查询操作          
String    user="sa";          
String    password="";          
Connection    conn=DriverManager.getConnection(url,user,password);                  
Statement    stmt=conn.createStatement();                  
String sql="select * from users";                 
ResultSet    rs=stmt.executeQuery(sql); PreparedStatement ps=conn.prepareStatement("insert into users values (?,?,?,?,?,?,?)");
ps.setString(1,"request.getParameter('UserID')");
ps.setString(2,"request.getParameter('UserPWD')");
ps.setString(3,"request.getParameter('SEX')");
ps.setString(4,"request.getParameter('BLOOD')");
ps.setString(5,"request.getParameter('CHATACTER')");
ps.setString(6,"request.getParameter('MEMO')");
ps.setString(7,"request.getParameter('CITY')");   int num=ps.executeUpdate();       
while(rs.next())    {
%>                  您的注册信息如下:<br>               
帐号::<%=rs.getString(1)%><br>
密码:<%=rs.getString(2)%><br>
性别:<%=rs.getString(3)%><br>
血型:<%=rs.getString(4)%><br>
性格:<%=rs.getString(5)%><br>
简介:<%=rs.getString(6)%><br>
城市:<%=rs.getString(7)%>
<p>             
<%}%>                
<%out.print("恭喜你,已经成为本网站会员!");%> <br>
请<A href="login.jsp">登录</A>进入本站首页                 
<%rs.close();   
stmt.close();                                
conn.close();                  
%> 

解决方案 »

  1.   

    password="";没密码吗??   在一个没有抛出异常
      

  2.   

    type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: javax.servlet.ServletException: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]将截断字符串或二进制数据。
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:532)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:408)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
      

  3.   

    request.getParameter('UserID') 在这取下长度 
    你都打印出来看下
      

  4.   

    你看一下你数据库
    Sex char(2) not null,
    Blood char(2) not null,
    而你
    ps.setString(3,"request.getParameter('SEX')");
    ps.setString(4,"request.getParameter('BLOOD')");
    这不明显的超了吗。
    还有你在数据库表的时候不要用char
    最好用varchar,貌似如果你不小心有空格也会报错的。
      

  5.   

    应该是你在‘男’汉字就是2个字节了。最好用varchar
      

  6.   

    我输的时候SEX=男 BLOOD=A 没超吧?
      

  7.   

    这个地方加引号是不对的,会把request.getParameter('SEX')字串当值传进表里,而不是获得SEX的值传入。去掉引号试试。
      

  8.   

    要是有问题可以先将request取得的值用string 变量先存上再将变量放入。
      

  9.   

    要是有问题可以先将request取得的值用string 变量先存上再将变量放入。
      

  10.   

    我把代码改了下:
    <%@    page  contentType="text/html;charset=gb2312"%>                  
    <%@    page  import="java.sql.*"%>          
    <html>                  
    <body>                  
    <%String id= request.getParameter("UserID");
    String pwd=request.getParameter("UserPWD");
    String sex=request.getParameter("SEX");
    String blood=request.getParameter("BLOOD");
    String cha=request.getParameter("CHATACTER");
    String memo=request.getParameter("MEMO");
    String city=request.getParameter("CITY");String driverClass="com.microsoft.jdbc.sqlserver.SQLServerDriver";
    Class.forName(driverClass);                
    String    url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Opera";          
    //statement查询操作          
    String    user="sa";          
    String    password="";          
    Connection    conn=DriverManager.getConnection(url,user,password);                  
    Statement    stmt=conn.createStatement();                  
    String sql="select * from users";                 
    ResultSet    rs=stmt.executeQuery(sql); PreparedStatement ps=conn.prepareStatement("insert into users values (?,?,?,?,?,?,?)");
    ps.setString(1,"id");
    ps.setString(2,"pwd");
    ps.setString(3,"sex");
    ps.setString(4,"blood");
    ps.setString(5,"cha");
    ps.setString(6,"memo");
    ps.setString(7,"city");   int num=ps.executeUpdate();       
    while(rs.next())    {
    %>                  您的注册信息如下:<br>               
    帐号:<%=rs.getString(1)%><br>
    密码:<%=rs.getString(2)%><br>
    性别:<%=rs.getString(3)%><br>
    血型:<%=rs.getString(4)%><br>
    性格:<%=rs.getString(5)%><br>
    简介:<%=rs.getString(6)%><br>
    城市:<%=rs.getString(7)%>
    <p>             
    <%}%>                
    <%out.print("恭喜你,已经成为本网站会员!");%> <br>
    请<A href="login.jsp">登录</A>进入本站首页                 
    <%rs.close();   
    stmt.close();                                
    conn.close();                  
    %> 
      

  11.   

    现在报错如下:
    HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: javax.servlet.ServletException: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]违反了 PRIMARY KEY 约束 'PK__users__76CBA758'。不能在对象 'users' 中插入重复键。
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:532)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:408)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    root cause javax.servlet.ServletException: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]违反了 PRIMARY KEY 约束 'PK__users__76CBA758'。不能在对象 'users' 中插入重复键。
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:855)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:784)
    org.apache.jsp.register_jsp._jspService(register_jsp.java:133)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    root cause java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]违反了 PRIMARY KEY 约束 'PK__users__76CBA758'。不能在对象 'users' 中插入重复键。
    com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
    com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
    com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
    com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
    com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
    com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
    com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
    com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
    com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
    com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
    com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown Source)
    com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate(Unknown Source)
    org.apache.jsp.register_jsp._jspService(register_jsp.java:88)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.10 logs.
    --------------------------------------------------------------------------------Apache Tomcat/6.0.10
      

  12.   

    我又改了下:
    ps.setString(1,id);
    ps.setString(2,pwd);
    ps.setString(3,sex);
    ps.setString(4,blood);
    ps.setString(5,cha);
    ps.setString(6,memo);
    ps.setString(7,city);  
    另加了句request.setCharacterEncoding("GBK");可是运行结果还是有错(不仅乱码,而且输入几次就会显示几个用户的信息): 
    您的注册信息如下:
    帐号:°? 
    密码:1 
    性别:?D 
    血型:O 
    性格:èè?é′ó??
    简介:μ?
    城市:±±?? 
    您的注册信息如下:
    帐号:μ? 
    密码:1 
    性别:?D 
    血型:O 
    性格:èè?é′ó??
    简介:?àéù
    城市:±±?? 您的注册信息如下:
    帐号:是 
    密码:2 
    性别:男 
    血型:O 
    性格:热情大方
    简介:才
    城市:北京 恭喜你,已经成为本网站会员! 
    请登录进入本站首页 
      

  13.   

    编码问题, 你打印放在while里当然有几条记录就显示几个用户