没问题,aaa是nvarchar的我在查询分析器中可以直接插入阿拉伯字符
解决方案 »
- java如何实现点击一个按钮,文本框出现相应数字,跟计算器那样
- 讨论: Sun JAVA API 奇怪的设计:Properties(Properties p)
- 问个关于XML问题
- 实现类似word的插入对象-难题求解!
- 封装的意义和作用,以及工厂方法是什么意思?
- 关于cache的问题
- 自动登陆VPN的java程序怎么写?
- 100分再求教
- :0 小弟问一个很傻的问题--------学不好C/C++的人 就一定学不好Java吗?
- 请问哪位大虾做过Thinking in Java 2/e的exercises? 求教!这是我能给的最大分值,抱歉
- 关于jbuilder的使用问题
- Java中方法调用到底是按值,还是按引用???
new InputStreamReader(InputStream,String)
String是你使用的编码方案
详细的解释在<<Java 2 核心技术 卷I>>p466页
IIS能绑定ServerLet吗
而且现在我显示和从数据库中取得都没问题,就是无法插入,是不是应该是执行sql语句的函数又问题???
库中存放的是真实的各国文字不是乱码 上面的SQL语句可以在查询分析器里面正确的执行
可是在程序里就查询不到数据实际情况是 :
这个SQL语句的多语种部分是SERVLET提交过来的
aaaaa=new String(request.getParameter("input").getBytes("8859_1"),"UTF-8");
String sqlstr="select aaa from bbb where aaa like N'%"+aaaaa+"%'";
out.println("sqlstr="+sqlstr);//在IE上显示这个SQL语句都没有问题
ResultSet rs=st.executeQuery(sqlstr);//但是执行就查不到记录 1 我可以把整个SQL语句打印到网页上 而且网页上显示的这个SQL语句里面就是多国的语言
没有乱码 2 把这句SQL语句从网页上COPY到SQLSERVER的查询分析器里面 可以得到正确的结果 而且数据
库里存放的数据都是原文 不是乱码 字段类型是“NVARCHAR”3 我用JOptionPane.showMessageDialog 在程序里弹出MESSAGEBOX 都可以看到正确的SQL语句4 如果检索点里不包含多国语言 程序运行结果就是对的 一旦检索点里面包含小语种就检索不
到结果5 如果把语句换成 insert into aaa values (N'"+aaaaa+"')" 插入库中的全是问号不知道哪为高手能帮我解决这个问题 谢谢!!!!!!!!!!
http://www.mmaa.gov.qa/
数据库是 936 Chinese(Simplified)
String sqlstr="select aaa from bbb where aaa like N'%"+aaaaa+"%'";
out.println("sqlstr="+sqlstr);//在IE上显示这个SQL语句都没有问题
ResultSet rs=st.executeQuery(sqlstr);//但是执行就查不到记录
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
将划线的这一句也做一次转换试试看ISO-8859-1
提交:
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);
package testunicode;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;public class Servlet1 extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GBK";
//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();
out.println("<html>");
out.println("<head><title>Servlet1</title></head>");
out.println("<body>");
out.println("<form method=\"post\">Please input:<input name=text type=text><input type=submit value=submit></form>");
out.println("</body></html>");
}
//Clean up resources
public void destroy() {
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
//response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
String sbInput = request.getParameter("text");
//sInput = new String(sInput.getBytes(((String enc=request.getCharacterEncoding())!=null)?enc:""));
String sInput = new String(sbInput.getBytes("ISO-8859-1"));
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}
catch(java.lang.ClassNotFoundException e){
e.printStackTrace(out);
}
Connection conn = null;
Statement stmt = null;
try{
String sConnStr = "jdbc:microsoft:sqlserver://dbserver:1433";
conn = DriverManager.getConnection(sConnStr,"sa","");
conn.setCatalog("ioffice");
stmt = conn.createStatement();
stmt.executeUpdate("insert into test values(N'"+sInput+"')");
}
catch(java.sql.SQLException e){
e.printStackTrace(out);
}
finally{
try{
stmt.close();
}
catch(Exception e){}
try{
conn.close();
}
catch(Exception e){}
}
out.println("<html>");
out.println("<head><title>Servlet1</title></head>");
out.println("<body>");
out.println("<p>Your input is : "+sbInput+"</p>");
out.println("</body></html>");
}
}
假设有String str存储带入库字符串
可以先把str转成byte数组,然后将每个元素柴分成两个4bit再在每个四位前补商人移交小值,这样吧每个字节拆分为两个,可定可传入数据库
提取操作时,做反向操作
代码如下
public String changToDBFormat(String str)
{
///beforeChange用于接收由字符串转化而来的字符数组
byte [] beforeChange = new byte[str.getLength()];
///afterChange用于接收拆分子节后的字符数组
byte [] afterChange = new byte[2*beforeChange.length];
for(int i=0; i < beforeChange.length ; i++)
{
//0x30可以使任意值,以数据库能接受为标准,
//若用0x30,则拆分后的字符为ascii表,由0开始的16各字符
afterChange[i*2] = (byte)((beforeChange[i]<<4)+0x30);
afterChange[i*2+1] = (byte)((beforeChange[i]&0x0f)+0x30);
}
//tempString为反回的字符串
String tempString = new String(afterChange);
return tempString;}合并函数如下
public String changeBackFromDB(String str)
{
///beforeChange用于接收由字符串转化而来的字符数组
byte [] beforeChange = new byte[str.getLength()];
///afterChange用于接收拆分子节后的字符数组
byte [] afterChange = new byte[beforeChange.length/2];
for(int i=0; i < afterChange.length ; i++)
{
afterChange[i] = (byte)((beforeChange[i*2]<<4)+(beforeChange[i*2+1]&0x0f));
}
//tempString为反回的字符串
String tempString = new String(afterChange);
return tempString;
}这样做的结果,存储在数据库的特殊数据常都会增加一倍,运算量也会加大
好处时,实现简单,而且通
String sqlstr="insert into aaa values(?)";
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection(url,"sa","");
Statement st=con.createStatement();
PreparedStatement ps=con.prepareStatement(sqlstr);
aaaaa="%"+aaaaa+"%";//aaaaa包含阿拉伯文等小语种
ps.setBytes(1,aaaaa.getBytes("unicode"));
ResultSet rs=ps.executeQuery();
我用的数据库是sql server2000,希望队你有用!
把文件存成UTF-8格式,然后用ULTRAEDITOR删除文件的BOM头
用javac -encoding utf-8 UnicodeSQl.java编译
DB: db2import java.sql.*;public class UnicodeSQL{public static void main(String args[]){
String dbName="Airline1";
String driver = "COM.ibm.db2.jdbc.app.DB2Driver";
String url="jdbc:db2:"+dbName;
String userId = "db2admin";
String password= "password";
String searchString = "王"; //You can replace with any other chars
String firstName = "卢克"; //You can replace with any other chars String lastName = "王"; //You can replace with any other chars
String sqlQuery ="select * from DBTicketInfo where passengerLastName=?";
String sqlInsert =
"insert into DBTicketInfo ( AirlineClass,isMale,isAdult,isRoundTrip,Confirmed,PriceforTicket,DepartureDate,ReturnDate,PassengerFirstName,PassengerMiddleName,PassengerLastName,InboundRouteCode,OutboundRouteCode,SpecialRequirement,TicketNumber,InvoiceNumber,AgencyCode) values (1, 1, 1, 1, 1,1,'2000-12-2','2002-1-1', ?, 'W', ?, 'R002', 'R001', 'Hello', 'T000001', 'I0000001', 'MW')"; try{
Class.forName(driver).newInstance();
Connection con = DriverManager.getConnection(url,userId,password); PreparedStatement preState= con.prepareStatement(sqlInsert);
preState.setString(1,firstName);
preState.setString(2,lastName);
preState.executeUpdate(); System.out.println("Insert OK!"); PreparedStatement preState1= con.prepareStatement(sqlQuery);
preState1.setString(1,searchString); ResultSet rs = preState1.executeQuery();
if(rs.next())
System.out.println(rs.getString("passengerFirstName"));
preState.close();
preState1.close();
con.close();
}
catch(SQLException se){
System.out.println(se);
}
catch(Exception e){
System.out.println(e);
}
}}
sqlstr="insert into xxx value('"+base64encode(astr)+"')";