日期:2014-05-20  浏览次数:20788 次

怎样使代码中单引号'能update进数据库
怎么使我得到的含有单引号的值保存入数据库中,代码如下:
String sql = " update interface_customer set PK_CORP = '"
+ customers[i].getPk_corp() + "' ,DEF1 = '"
+ customers[i].getDef1() + "',CUSTNAME = '"
+ customers[i].getCustname() + "' " + " where CUSTCODE ='"
+ customers[i].getCustcode() + "'";
try {
con = getConnection();
stmt = con.prepareStatement(sql);
stmt.executeUpdate();
描述:CUSTNAME = '"+ customers[i].getCustname() + "' 中customers[i].getCustname() 得到的值为: JINSHENG'LTD,这样一来我的sql语句组装起来update interface_customer set ....,custname = 'JINSHENG'LTD' 就会报错,存不进数据库中。
问题:用什么样的办法把这个单引号存入sql语句???
也就是怎样把CUSTNAME = '"+ customers[i].getCustname() + "' 中的customers[i].getCustname()得到的有单引号的数据处理掉使之在不替换和去除的情况下能存入到数据库中

尝试:在网上搜索到的一个QuotedStr用法 我加上去还是报错,不知道这个是怎么用的,我是这样写的
CUSTNAME = '"+ "QuotedStr(" +customers[i].getCustname()+")" + "'
兄弟帮下忙,谢谢了!



------解决方案--------------------
拼装SQL很辛苦,所以用2个单引号是权宜之举,还是用
PreparedStatement 进行参数设置吧
setString 就好了
------解决方案--------------------
遇到这样的情况
最好用
PreparedStatement 预处理 比statement好
Demo:
Java code


        Connection con = null;
        try
        {
            String sql = "";
            PreparedStatement pstmt = con.prepareStatement(sql);
            pstmt.setString(1, "你的参数");
            pstmt.executeUpdate();
            pstmt.close();
        }catch(Exception e)
        {
            try {
                con.rollback();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
        finally
        {
            if(con != null)
            {
                try {
                    con.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

------解决方案--------------------
探讨
我用的是prepareStatement 
con.prepareStatement(sql); 
朋友们的意思是不是我在得到这个值的时候就把单引号替换成双引号进去 

CUSTNAME = '" 
+ customers[i].getCustname() + "' 

也就是在customers[i].getCustname() 就把有单引号的替换成双引号,这样就能把有单引号的数据存入到oracle中了??? 

------解决方案--------------------
Java code

public static String getSafeSQL(String inStr) {

        String result = "";

        try {

            inStr = inStr.trim();

            char c;
            int strLen = inStr.length();
            for (int i = 0; i < strLen; i++) {

                c = inStr.charAt(i);

                switch (c) {
                case '\'':
                    result = result + "''";
                    break;
                case '\\': 
                    result = result + "\\\\";
                    break;
                default:
                    result = result + String.valueOf(c);
                    break;
                }

            }

        } catch (Exception e) {
            return "";
        }

        return result;

    }