当前位置: 技术问答>java相关
[急救]数据库问题
来源: 互联网 发布时间:2015-06-01
本文导语: 这个search.jsp用于接受其他网页发来的表单信息并搜索数据库,返回结果 但是在实际使用中,只使用英文可以正常处理,使用中文或者空格等就出错,错误提示为: javax.servlet.ServletException: [Microsoft][SQLServer JDBC D...
这个search.jsp用于接受其他网页发来的表单信息并搜索数据库,返回结果
但是在实际使用中,只使用英文可以正常处理,使用中文或者空格等就出错,错误提示为:
javax.servlet.ServletException: [Microsoft][SQLServer JDBC Driver]Unexpected token type: ERROR
类型不匹配?是怎么回事儿???是不是String keywords = new String(keyword.getBytes("GB2312"),"ISO8859-1");这句转换的问题?
服务器使用tomcat,mssql2000中文版
|
你可以试试不进行转换,看看有什么情况.
|
转换之前先判断是不是为null试试
|
colTime是字符型吗?如果是可以用r.getString("colTime")取数据。
如果是日期型要用r.getDate(colTime);如果是Time型要用r.getTime(colTime);
你的colId也是字符型吗?如果不是也不要用r.getString("colId")取。
要判断是不是这里错误:你可以改为:
String sStr = "SELECT top 20 colId,colTitle,colIndex,colTime from
tabIndex where contains(*,'"+keywords+"') order by colId desc";
System.out.println("sStr=="+sStr) ;
ResultSet r = s.executeQuery(sStr);
System.out.println("aaaa") ;
你先打印Sql语句看是否正确。
看"aaaa"是否打印出,如果没有则Sql语句有问题。如果正常打印,则错误不在这里,你可以这样一步步跟踪下去,看到底哪里有错误。
如果是日期型要用r.getDate(colTime);如果是Time型要用r.getTime(colTime);
你的colId也是字符型吗?如果不是也不要用r.getString("colId")取。
要判断是不是这里错误:你可以改为:
String sStr = "SELECT top 20 colId,colTitle,colIndex,colTime from
tabIndex where contains(*,'"+keywords+"') order by colId desc";
System.out.println("sStr=="+sStr) ;
ResultSet r = s.executeQuery(sStr);
System.out.println("aaaa") ;
你先打印Sql语句看是否正确。
看"aaaa"是否打印出,如果没有则Sql语句有问题。如果正常打印,则错误不在这里,你可以这样一步步跟踪下去,看到底哪里有错误。
|
在SQL语句中直接使用中文是不安全的,常常造成SQL语句的错误:
一下方法可以解决:
PrepareStatement st = con.prepareStatement("SELECT top 20 colId,colTitle,colIndex,colTime from
tabIndex where contains(*,?) order by colId desc");
st.setString(1,keyword);
ResultSet r = s.executeQuery();
一下方法可以解决:
PrepareStatement st = con.prepareStatement("SELECT top 20 colId,colTitle,colIndex,colTime from
tabIndex where contains(*,?) order by colId desc");
st.setString(1,keyword);
ResultSet r = s.executeQuery();
|
String keywords = new String(keyword.getBytes("GB2312"),"ISO8859-1");
改成:
String keywords = new String(keyword.getBytes("ISO8859-1"),"GB2312");
改成:
String keywords = new String(keyword.getBytes("ISO8859-1"),"GB2312");