写一个注册登录系统,出现com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException Unknown column 'role' in 'field list'这个异常,百度了一下说是标段不存在,明明我的数据库里有啊,求解!我网数据库里自己添加了用户名和密码,能登录进去,但是注册就出现这个异常,贴出关键代码
CheckLogin.java
package com;import java.sql.*;
import java.util.*;
import java.text.SimpleDateFormat;public class CheckLogin {
/**
 * 检测用户登录信息
 * @param String nickName
 *                   用户登录的用户名
 * @param String userPassword
 *                   用户登录的密码                  
 * @return String
 *         返回一个字符串:如果用户名已经在数据库存在并且用户输入的密码也正确
                                返回字符串 SUCCESS_LOGIN
 *                         如果用户名已经在数据库存在但是输入的密码不正确
                               返回字符串 WRONG_PASSWROD
 *                         如果用户名不存在返回字符串 NONE_USER 
 * */
public String checklogin(String nickName,String userPassword) 
throws SQLException,ClassNotFoundException
{
BaseConn conn = null;
try
{
conn = new BaseConn();

//创建一个用预处理的SQL语句
String sql = "select * from userinfo where nickName=?";

//创建一个预处理SQL对象
PreparedStatement ps = conn.preparedStatement(sql);
ps.setString(1,nickName);

//从数据库中查询该用户名是否在数据库存在
ResultSet rs = conn.executeQuery();
if(rs.next())
{
if(rs.getString("userPassword").equals(userPassword))
{
return "SUCCESS_LOGIN";
}
else
return "WRONG_PASSWORD";
}
else
return "NONE_USER";
}catch(SQLException ex)
{
ex.printStackTrace();
throw ex;
}catch(ClassNotFoundException ex)
{
ex.printStackTrace();
throw ex;
}
finally
{
conn.closeDB(); //关闭数据库连接,释放JDBC资源
}
}

/**
 * 如果是新用户时,将用户登录用户名和密码保存到数据库中
 * */
public boolean saveToDataBase(String nickName,String userPassword)
throws SQLException,ClassNotFoundException
{
BaseConn conn = null;
        try
        {
         conn = new BaseConn();
         int role = 0;
         String sql = "insert into userinfo(nickName,userPassword,role) values(?,?,?)";
         PreparedStatement ps = conn.preparedStatement(sql);
         ps.setString(1,nickName);
         ps.setString(2,userPassword);
         ps.setInt(3, role);
         conn.executeUpdate();
         return true;
        }catch(SQLException ex)
        {
         ex.printStackTrace();
         throw ex;
        }catch(ClassNotFoundException ex)
        {
         ex.printStackTrace();
         throw ex;
        }finally
        {
         conn.closeDB(); //关闭数据库连接,释放JDBC资源
        }
  }
}register_post.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@page import="com.CheckLogin"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'register_post.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->  </head>
  <jsp:useBean id="check" class="com.CheckLogin"/>
  <body>
        <%    
    /*
       设置request的字符集为GB2312
      GB2312就是简体中文字符集,如果在这里不设置GB2312编码,所有的中文字符
       都会变为乱码。
       如果在这里需要使用繁体中文的话也会出现字符乱码的问题,将GB2312改为
       GBK可解决。
    */
    request.setCharacterEncoding("GB2312");
    
    //获取用户昵称
    String nickName = request.getParameter("nickName");
    
    //获取用户密码
    String userPassword=request.getParameter("userPassword");
    
    //将获取到的用户登录信息与数据库中保存的用户信息进行比较
    String loginMsg = check.checklogin(nickName,userPassword);
    if(loginMsg.equals("SUCCESS_LOGIN"))
    {
      out.println("该用户已经存在,请重新选择用户名");      
    }
    else if(loginMsg.equals("WRONG_PASSWORD"))
    {
      out.println("该用户已经存在,请重新选择用户名");
    }
    else if(loginMsg.equals("NONE_USER"))
    {
            boolean sf = check.saveToDataBase(nickName,userPassword);
            if(sf)
            {      
             out.println("注册成功");
       %>
         <br>
             <tr><a href="login.jsp">返回登录</a></tr>
       <%
            }
    }
    else
    {
        out.println("该用户名已经存在,请选择另一个用户名注册");
    }    
  %>
  </body>
</html>

解决方案 »

  1.   

    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    改为utf-8吧,插入的时候,估计变乱码了。
      

  2.   

    手工到数据库执行insert into userinfo(nickName,userPassword,role) values(?,?,?),看看有没有错
      

  3.   


    这次又出现新错了!org.apache.jasper.JasperException: An exception occurred processing JSP page /register_post.jsp at line 5552:     }
    53:     else if(loginMsg.equals("NONE_USER"))
    54:     {
    55:             boolean sf = check.saveToDataBase(nickName,userPassword);
    56:             if(sf)
    57:             {      
    58:              out.println("注册成功");
      

  4.   

    我智商做鸡了,没有role这个,但是出现新错误
    org.apache.jasper.JasperException: An exception occurred processing JSP page /register_post.jsp at line 5552:     }
    53:     else if(loginMsg.equals("NONE_USER"))
    54:     {
    55:             boolean sf = check.saveToDataBase(nickName,userPassword);
    56:             if(sf)
    57:             {      
    58:              out.println("注册成功");