你要保证数据库中的编码也是UTF8才行呀!
在你CREATE DATABASE的时候也要选择UTF8编码,你可以试试aaaaa=request.getParameter("input");
String sqlstr="select aaa from bbb where aaa like N'%"+aaaaa+"%'";
使用8859-1编码试试!
在你CREATE DATABASE的时候也要选择UTF8编码,你可以试试aaaaa=request.getParameter("input");
String sqlstr="select aaa from bbb where aaa like N'%"+aaaaa+"%'";
使用8859-1编码试试!
String sqlstr111=new String(sqlstr.getBytes(),"8859_1");
ResultSet rs=st.executeQuery(sqlstr111)
是这样吗?
你可以查查SQLSERVER2000的帮助看看它的默认编码是什么,然后将读来的变量转换成相应的编码,应该就没问题了!aaaaa=request.getParameter("input");
String sqlstr="select aaa from bbb where aaa like N'%"+aaaaa+"%'";
只是想让你试试使用8859-1编码查询试试!
aaaaa=new String(request.getParameter("input").getBytes("8859_1"),"UTF-8");
如果不转换的话 传回来的都是问号了 就已经丢失了
直接REQUEST出来,防盗查询语句中去!
你有没有试过从数据库中读出数据,然后不要转换直接在页面上显示,正常吗?!快回答,我马上要出去了!
SERVLET里面这么写的: CONTENT_TYPE = "text/html; charset=UTF-8";
建议:
1,把你的查询条件PRINT出来!
2,把刚刚打印出来的SQL拷贝到SQLSERVER的IDE下执行,如果不行说明还是转换的问题,既NEW STRING(in,?????);问号中是要试的编码!
我出去一下,回来再讨论!
1 我是按照我的主题帖子里面的代码来运行的2 我可以把整个SQL语句打印到网页上 而且网页上显示的这个SQL语句里面就是多国的语言
没有乱码 3 把这句SQL语句从网页上COPY到SQLSERVER的查询分析器里面 可以得到正确的结果 而且数据
库里存放的数据都是原文 不是乱码 字段类型是“NVARCHAR”4 我用JOptionPane.showMessageDialog 在程序里弹出MESSAGEBOX 都可以看到正确的SQL语句5 如果检索点里不包含多国语言 程序运行结果就是对的 一旦检索点里面包含小语种就检索不
到结果6 如果把语句换成 insert into aaa values (N'"+aaaaa+"')" 插入库中的全是问号
说明你还是没有转换对!
能告诉我你用的JDBC是什么版本吗!?看看它的帮助,是不是支持UTF8,(你可以试着把你要执行的SQL语句插入到一个表中然后用IDE看看该表中该记录是不是正常的,如果正常则说明支持,否则就不支持了!)
SQL与句被JDBC转成乱码了!
在连接数据库的URL中加了charset=gb2312时,可以不作任何转换执行所有正确操作.
在没有设置连接字符集时,则出现乱码.(以SQL server带的工具来看),也无法用java正确读出.
于是将其转换为8859-1写入,在工具中可正常显示,读出时也做如此设定,则一切恢复正常.
我用的驱动是tds的,不是microsoft的.
下面是我的SERVLET的整个代码 请高手指教package ffffff;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;import java.util.*;
import java.awt.*;
import sun.io.*;import java.awt.event.*;
import javax.swing.*;public class Servlet1 extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=UTF-8"; /**Initialize global variables*/
public void init() throws ServletException {
}
/**Process the HTTP Get request*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
String aaaaa="",bbbbb="";
out.println("<html>");
out.println("<head><title>Servlet1</title></head>");
out.println("<body>");
out.println("<p>The servlet has received a GET. This is the reply.</p>");
if (request.getParameter("firstname")!=null)
{
aaaaa=new String(request.getParameter("firstname").getBytes("8859_1"),"UTF-8");
out.print("<br>" + aaaaa + "<br>");
}
out.print("<form action=\"");
out.print("ffffff.Servlet1\" ");
out.println("method=POST>");
out.println("<input type=text size=20 name=firstname>");
out.println("<br>");
out.println("<input type=text size=20 name=lastname>");
out.println("<br>");
out.println("<input type=submit>");
out.println("</form>");
String url="jdbc:odbc:aa";
String mystr=new String();
String mystr2=new String();
int i = 0;
String strMessage=new String();
String xx = "";
String xx1 = "";
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection(url,"sa","");
Statement st=con.createStatement(); String sqlstr="insert into aaa values ('"+aaaaa+"')";
out.println("sqlstr="+sqlstr);
ResultSet rs=st.executeQuery(sqlstr); } rs.close();
con.close();
}
catch(SQLException e){
System.out.print("aq:SQLException:"+e.getMessage()+"\n");
}
catch(Exception e){
System.out.print("aq:Exception:"+e.getMessage()+"\n");
}
out.println("</body></html>");
} public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
doGet(request, response);
}
/**Clean up resources*/
public void destroy() {
}
}
提交:
private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter(); out.print("<form action=\"");
out.print("ffffff.Servlet1\" ");
out.println("method=POST>"); aaaaa=new String(request.getParameter("firstname").getBytes ("8859_1"),"GB2312");连库:
String url="jdbc:odbc:aa"; //aa是数据源
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection(url,"sa","");
Statement st=con.createStatement();执行SQL:
String sqlstr="insert into aaa values ('"+aaaaa+"')";
ResultSet rs=st.executeQuery(sqlstr);
1.jdbc下载:http://www.microsoft.com/china/sql/downloads/2000/jdbc.asp
后setup.
2.加入classpath中
<%@ page contentType = "text/html; charSet=gb2312" %>
<%@ page language="java" import = "java.sql.*" %>
<%
/**address: SQL Server的连接参数*/
String address = "jdbc:microsoft:sqlserver://127.0.0.1:1433";
/***user: 数据库用户名*/
String user="sa";
/**passwd: 用户密码*/
String passwd="";
/*数据库名*/
String database = "online"; DatabaseMetaData conMD = null;
java.sql.Statement stmt = null;
Connection con = null;
ResultSet sqlRst = null; try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection(address,user,passwd); conMD = con.getMetaData();
con.setCatalog(database);
stmt = con.createStatement();
}catch(Exception fs) {
out.print("Connection ERROR</p> <br>");
}
out.print("Connection</p> <br>"); try
{
stmt=con.createStatement();
sqlRst = stmt.executeQuery("SELECT * FROM mytable");
out.print("stmt OK");
}catch(Exception gr)
{
out.print("stmt ERROR");
} while (sqlRst.next())
{
out.print("<p>name :" + sqlRst.getString("name") + "</p> <br>");
out.print("<p>old :" + sqlRst.getString("old") + "</p>");
}
%>
行了通知我!
String address = "jdbc:microsoft:sqlserver:aa";
你可没仔细看我给你的代码哦!
制订SQLSERVER地址,String database = "aa";制定库名!
如果要用DSN那还要用JDBC做什么,不就是用了JDBC——ODBC了吗!?
String address = "jdbc:microsoft:sqlserver://sunyt:1433";
String user="sa";
String passwd="";
String database = "预发布";这样写有问题吗? 好象还是连不上 是不是端口号的问题?
String user="sa";
String passwd="";
String database = "发布";
应该是没问题的!如果不行的话,试着试试DATABASE名不哟用中文,再看看端口对不对!
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
例如:D:\jdk1.2.2\lib\tools.jar;d:\jdk1.2.2\lib\dt.jar;e:\oracle\ora81\jdbc\lib\classes111.zip;d:\j2sdkee1.2.1\lib\j2ee.jar
如果是98则在AUTOEXEC.BAT里面设置!
例如:set classpath=D:\jdk1.2.2\lib\tools.jar;
值是C:\Program Files\Microsoft SQL Server 2000 JDBC\lib\msbase.jar;C:\Program Files\Microsoft SQL Server 2000 JDBC\lib\mssqlserver.jar;C:\Program Files\Microsoft SQL Server 2000 JDBC\lib\msutil.jar这样写对吗?