最近在做一个同学录管理方面的东西, 数据库采用mysql5.0, 通过jsp页面获取的登录用户名和密码同对应servlet提交请求, servlet中调用了一个Bean写的函数logon用于验证用户是否可以登录系统, 函数申明如下:
public static UserInfo logon(String username, String password)
{
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
UserInfo user = null;
try
{
conn = DataBaseBean.getConnection(); String queryString = "select * from tongxunlulist where loginname=? and password=?";
ps = conn.prepareStatement(queryString);
ps.setString(1, username); //
ps.setString(2, password);
rs = ps.executeQuery(); while(rs.next())
{
//进行相应操作
return user;
}
rs.close();
ps.close();
}
catch(SQLException e)
{
//错误处理
}
finally
{
//关闭连接
}
return null;
}
当servlet 中获取到jsp传入的用户名(中文)和密码后调用logon会出错, 我也想到了编码方面的问题, 做过了很多测试, 比如将
上面的语句:
ps.setString(1, "小明"); //username直接赋值为"小明", 程序正常运行,但是如果在servlet传递参数方式就出错, 如果不用中文参数传递程序可以完好运行, 如果说是编码的问题, 那么为什么我在执行数据插入时采用ps.setString(1,中文)中文传递到数据库后中文又是正常显示的, 搞得现在的系统都只能要求用户名不能为英文, 不然会出现无法登录的情况, 如果有哪位可以解答, 感谢之极
public static UserInfo logon(String username, String password)
{
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
UserInfo user = null;
try
{
conn = DataBaseBean.getConnection(); String queryString = "select * from tongxunlulist where loginname=? and password=?";
ps = conn.prepareStatement(queryString);
ps.setString(1, username); //
ps.setString(2, password);
rs = ps.executeQuery(); while(rs.next())
{
//进行相应操作
return user;
}
rs.close();
ps.close();
}
catch(SQLException e)
{
//错误处理
}
finally
{
//关闭连接
}
return null;
}
当servlet 中获取到jsp传入的用户名(中文)和密码后调用logon会出错, 我也想到了编码方面的问题, 做过了很多测试, 比如将
上面的语句:
ps.setString(1, "小明"); //username直接赋值为"小明", 程序正常运行,但是如果在servlet传递参数方式就出错, 如果不用中文参数传递程序可以完好运行, 如果说是编码的问题, 那么为什么我在执行数据插入时采用ps.setString(1,中文)中文传递到数据库后中文又是正常显示的, 搞得现在的系统都只能要求用户名不能为英文, 不然会出现无法登录的情况, 如果有哪位可以解答, 感谢之极
2、然后在servlet的处理方法中第一行写编码处理,即加:request.setCharacterEncoding("gbk");
这样就可以了。
sql = "select * from para=?";
ps.setString(1, para1);//当调用时, para1为中文就出错,其它都OK