当前位置: 技术问答>java相关
中文!!中文!!我心中永远的痛!!(知识无价,100分算什么,能者进!!!)
来源: 互联网 发布时间:2015-06-11
本文导语: 我用resin.在和数据库连接查询时中文一直是问题.下面是我的代码肯请各位大虾指点 ....... Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url=new String(); url="jdbc:odbc:link"; Connection con=DriverManager.getConnection(url,"sa","123"); Statemen...
我用resin.在和数据库连接查询时中文一直是问题.下面是我的代码肯请各位大虾指点
.......
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url=new String();
url="jdbc:odbc:link";
Connection con=DriverManager.getConnection(url,"sa","123");
Statement stmt=con.createStatement();
String sql2=new String(sql_query.getBytes("iso8859-1"),"gb2312");
ResultSet rs=stmt.executeQuery(sql2);
但在后面为检查而设定的查询语句确出现 select * from user where name='???'(即从提交查询获得的sql语句那三个问号即为输入的条件(中文))
也就是说根本不认识那几个中文
但若改为
.......
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url=new String();
url="jdbc:odbc:link";
Connection con=DriverManager.getConnection(url,"sa","123");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql_query);
则出现一堆的错如下:
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]郒勏?"
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6106)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6263)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3307)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5494)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:342)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:399)
at _userquerybookresult__jsp._jspService(/userquerybookresult.jsp:112)
at com.caucho.jsp.JavaPage.service(JavaPage.java:74)
at com.caucho.jsp.Page.subservice(Page.java:485)
at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:176)
at com.caucho.server.http.Invocation.service(Invocation.java:278)
at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129)
at com.caucho.server.http.ServletServer.serviceTop(ServletServer.java:847)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:213)
at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:158)
at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
at java.lang.Thread.run(Thread.java:536)
.......
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url=new String();
url="jdbc:odbc:link";
Connection con=DriverManager.getConnection(url,"sa","123");
Statement stmt=con.createStatement();
String sql2=new String(sql_query.getBytes("iso8859-1"),"gb2312");
ResultSet rs=stmt.executeQuery(sql2);
但在后面为检查而设定的查询语句确出现 select * from user where name='???'(即从提交查询获得的sql语句那三个问号即为输入的条件(中文))
也就是说根本不认识那几个中文
但若改为
.......
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url=new String();
url="jdbc:odbc:link";
Connection con=DriverManager.getConnection(url,"sa","123");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql_query);
则出现一堆的错如下:
java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]郒勏?"
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6106)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6263)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3307)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5494)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:342)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:399)
at _userquerybookresult__jsp._jspService(/userquerybookresult.jsp:112)
at com.caucho.jsp.JavaPage.service(JavaPage.java:74)
at com.caucho.jsp.Page.subservice(Page.java:485)
at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:176)
at com.caucho.server.http.Invocation.service(Invocation.java:278)
at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129)
at com.caucho.server.http.ServletServer.serviceTop(ServletServer.java:847)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:213)
at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:158)
at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
at java.lang.Thread.run(Thread.java:536)
|
你用两种方式在ResultSet rs=stmt.executeQuery(sql2);之前用:
out.println("sql2=="+sql2) ;看看有什么不同。
对于你的第一种方式是不会有什么问题的。
out.println("sql2=="+sql2) ;看看有什么不同。
对于你的第一种方式是不会有什么问题的。
|
String sql2=new String(sql_query.getBytes("iso8859-1"),"gb2312");
这句话是不是有点不对?转换字符串只转换查询字符串中的变量吧?如
"select * from table where strField="+queryVar;
如果queryVar是中文字符,只需将queryVar转换一下就可以了,不需将整个SQL语句转换。
这句话是不是有点不对?转换字符串只转换查询字符串中的变量吧?如
"select * from table where strField="+queryVar;
如果queryVar是中文字符,只需将queryVar转换一下就可以了,不需将整个SQL语句转换。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。