没问题,aaa是nvarchar的我在查询分析器中可以直接插入阿拉伯字符

解决方案 »

  1.   

    阿拉伯文可能是win下面编码是CP1256,
    new InputStreamReader(InputStream,String)
    String是你使用的编码方案
    详细的解释在<<Java 2 核心技术 卷I>>p466页
      

  2.   

    我有个问题想问
    IIS能绑定ServerLet吗
      

  3.   

    那如果有别的文字不就不行了吗?
    而且现在我显示和从数据库中取得都没问题,就是无法插入,是不是应该是执行sql语句的函数又问题???
      

  4.   

    可能是我说的不清楚,如果我的sql语句中有多国语言应该怎么执行??
      

  5.   

    请大家帮我想想办法把!!是不是jdbc的接口又问题??
      

  6.   

     我 也 有 同 样 的 疑 问 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~比如select aaa from bbb where aaa like '%阿拉伯文+日文+中文+意大利文%'
    库中存放的是真实的各国文字不是乱码 上面的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+"')" 插入库中的全是问号不知道哪为高手能帮我解决这个问题 谢谢!!!!!!!!!!
      

  7.   

    &#1604;&#1604;&#1583;&#1582;&#1608;&#1604; &#1593;&#1604;&#1609; &#1575;&#1604;&#1589;&#1601;&#1581;&#1577; &#1575;&#1604;&#1585;&#1574;&#1610;&#1587;&#1610;&#1577; &#1605;&#1576;&#1575;&#1588;&#1585;&#1577;
    http://www.mmaa.gov.qa/
      

  8.   

    环境是 PROFESSIONAL 2000 + SQLSERVER2000 + JB5
      

  9.   

    抱歉 我这里上不了MSN 
    数据库是 936 Chinese(Simplified)
      

  10.   

        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);//但是执行就查不到记录  
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       将划线的这一句也做一次转换试试看ISO-8859-1
      

  11.   

    SQLSRERVER要有支持阿拉波文的字符集
      

  12.   


    提交:
          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);
      

  13.   

    请看我下面的代码,在sqlserver2000,ie5.5下测试完全可以处理中日韩三国文字,包括三国文字混合输入,至于其它文字我没有测试,不过我想应该没问题://Servlet1.java
    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>");
        }
    }
      

  14.   

    我这有一个笨解决方案,牺牲空间为代价
    假设有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;
    }这样做的结果,存储在数据库的特殊数据常都会增加一倍,运算量也会加大
    好处时,实现简单,而且通
      

  15.   

    oracle8.0支不支持我不太清楚,我是这样解决的看对你有没有帮助!
    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,希望队你有用!
      

  16.   

    这个程序改成SERVLET一样可以。
    把文件存成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);
     }
    }}
      

  17.   

    easy.最土的方法就是用base64encode一下。
    sqlstr="insert into xxx value('"+base64encode(astr)+"')";