'可能是执行sql语句引起的冲突,如:update router set keeper='aa'','aa'.......
当然回出错咯,可以把'替换掉,网上有很多这样的文章吧
public class Format {    /**
     * 字符串替换,将 source 中的 oldString 全部换成 newString
     *
     * @param source 源字符串
     * @param oldString 老的字符串
     * @param newString 新的字符串
     * @return 替换后的字符串
     */
    public static String Replace(String source, String oldString, String newString) {
        StringBuffer output = new StringBuffer();        int lengthOfSource = source.length();   // 源字符串长度
        int lengthOfOld = oldString.length();   // 老字符串长度        int posStart = 0;   // 开始搜索位置
        int pos;            // 搜索到老字符串的位置        while ((pos = source.indexOf(oldString, posStart)) >= 0) {
            output.append(source.substring(posStart, pos));            output.append(newString);
            posStart = pos + lengthOfOld;
        }        if (posStart < lengthOfSource) {
            output.append(source.substring(posStart));
        }        return output.toString();
    }    /**
     * 将字符串格式化成 HTML 代码输出
     *
     * @param str 要格式化的字符串
     * @return 格式化后的字符串
     */
    public static String toHtml(String str) {
        String html = str;        html = Replace(html, "&", "&amp;");
        html = Replace(html, "<", "&lt;");
        html = Replace(html, ">", "&gt;");
        html = Replace(html, "\r\n", "\n");
        html = Replace(html, "\n", "<br>\n");
        html = Replace(html, "\t", "    ");
        html = Replace(html, "  ", " &nbsp;");        return html;
    }    /**
 * 把单引号替换为双单引号,用于MSsql
 */    public static String toSql(String sqlstr) {
        String strsql = sqlstr;        strsql = Replace(strsql, "'", "''");
        return strsql;
    }}

解决方案 »

  1.   

    怎样解决rs.updateString的乱码问题?
      

  2.   

    使用PreparedStatement:
    PreparedStatement pstmt=null;
    pstmt=conn.prepareStatement("update Router set Keeper=?, SlotNum=? where EquipmentID=?"
    pstmt.setString(1,Keeper);
    pstmt.setInt(2,SlotNum);
    pstmt.setInt(EquipmentID);
    pstmt.executeUpdate();
    试试吧!
      

  3.   

    笔误:
         pstmt.setInt(3,EquipmentID);
    不用关心'的问题.
      

  4.   

    我目前正是用PreparedStatement 对象.
    例如:
    PreparedStatement pstmt = conn.prepareStatement("Insert into IP(IP,Mask,PossessID1,"+
    "PossessID2,Descri,State,Attribute) values(?,?,?,?,?,?,?)");
    pstmt.setString(1,IP.trim()); pstmt.setString(2,Mask.trim());
    pstmt.setString(3,PossessID1.trim()); pstmt.setString(4,PossessID2);
    pstmt.setString(5,Description.trim()); pstmt.setString(6,State.trim());
    pstmt.setString(7,Attribute.trim());
    pstmt.executeUpdate();
    它是无中文乱码问题.
      

  5.   

    //虽然用update的SQL语句更新数据库又能避免中文问题,例如
    //        stmt.executeUpdate("update Router set Keeper='"+Keeper+"',SlotNum='"+iSlotNum +"' where //EquipmentID='"+EquipmentID+"'");
    //但万一变量Keeper有一字符是 ' ,这语句就不能执行了。所以还是希望用前面的办法。对特殊字符'进行处理不就完了,在sybase ASE, ASA 下是把'边为''
      

  6.   

    像你这样做,遇到别的unicode字符集,又怎么办呢,一个商业程序肯定要支持多字符集的,
    像上面的程序你碰到big5,也来一次碰到日文你又单独处理?
      

  7.   

    关于读写数据库的中文问题,是由于Unicode编码问题造成的,我曾遇到过,JB3使用的JDK版本有BUG,JB4已经修正,如果使用JB3,可以使用JB3的包取代JDK的包,方法是使用缺省的工程属性参数,同时修改JBUILDER.INI,具体使用方法可参阅JB3安装后在开始菜单中的说明文件,好象在...Tip...菜单项中的JDBC部分.
    当然你也可以通过将要写的数据转换为Byte型的数据,而不使用String来避免乱码,不过读数据库时一样要通过读字节数据来组成String,这仅适用于该数据库只由你的JAVA程序使用的情况,否则别的语言编写的程序可能无法读取你的JAVA程序写入的数据(也可以转换)
      

  8.   

    我的程序是为特定客户编写的,只需要考虑中文.
    我从来没有使用过JB,慢如牛.
    把中文转换为Byte型,是否是二进制的内码,如果是,那也太麻烦了,又不是多媒体数据.
    不过也不失为一种解决方法.