首页 新闻 会员 周边 捐助

sql中单引号的转义问题

0
悬赏园豆:20 [已解决问题] 解决于 2018-05-14 10:52
String sql = "select 'insert into " + tableName + " values ( '";  
            int count=0;  
            int  counts=0;  
            //获得列的总数  
            while (rs.next()) {  
                count++;  
            }  
            //重新获得列数据 整理成sql  
                rs = metadata.getColumns(null, null, tableName, "%");    //得到表的字段列表  
                while (rs.next()) {  
                    counts++;  
                    if(counts<=count)  
                    {  
                        Object colName = rs.getObject("column_name");  
                        sql += " ||'''' ||" + colName + "|| ''','";  
                    }  
                }  
                sql=sql.substring(0,sql.length()-2)+"'";  
                sql += " || ' );' from " + tableName+ where;  
                rs.close();  
   
              // System.out.println("DEBUG: SQL="+sql);  
                //执行  
                statement = conn.createStatement();  
                rs = statement.executeQuery(sql);  
                
                //将SQL语句放到List中  
                list=new ArrayList<Object>();  
                while (rs.next())  
                    list.add(rs.getObject(1));  
                rs.close(); 

上面是我的部分代码,我想要导出表中的数据,但是有些数据中本身包含sql语句,如果sql语句中有单引号的话怎么转义呢?

例如:insert into T02_TP_EXEC_QRY_SEQ values ( '20180417143','20180417145','select username from t00_user where username='admin'' );

admin导出应该是''admin''的格式

seeusmile的主页 seeusmile | 初学一级 | 园豆:164
提问于:2018-04-17 10:32
< >
分享
最佳答案
0

没有想到更好的办法,最后自己用正则表达式替换了一下:Pattern p = Pattern.compile("'\\s*[select|SELECT].+'");

seeusmile | 初学一级 |园豆:164 | 2018-04-18 09:56
其他回答(1)
0

where username='    '    'admin'  '    '

两个单引号表示一个单引号,中间的空格是我故意加入的。

第一个单引号是外部的,表示里面是个字符串,第二个单引号和第三个单引号表示一个单引号。后面也是类似。

实际写起来是这样的 username='''admin'''

收获园豆:20
爱编程的大叔 | 园豆:30844 (高人七级) | 2018-04-17 10:43

上面给的例子是我要导出的结果,我的意思是怎么在导出结果的时候就对单引号进行转义

支持(0) 反对(0) seeusmile | 园豆:164 (初学一级) | 2018-04-17 10:47

@seeusmile: 这是不合理的,不要动数据,因为你不知道他会用在什么地方。

数据应该保持他原始的状态,而不是为了你的用途修改他,

比如说,如果你用其他方法导入数据而不是用这么土的拼接字符串,那么单引号根本不是问题。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2018-04-17 10:52

需求就是我想把A数据库的指定表数据导出成.sql文件,然后直接执行sql文件导入到B数据库中,但是有些表中的数据本身带了单引号,如果不进行转义就执行不了。

 

支持(0) 反对(0) seeusmile | 园豆:164 (初学一级) | 2018-04-17 10:54

@seeusmile: 那你的问题是什么呢?不是已经说了,一个单引号变成两个就行了。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2018-04-17 10:56

@爱编程的大叔: 我想问一下有没有替换符在执行rs = statement.executeQuery(sql);的时候就进行转换,不需要我再进行手动替换。

比如我在这里拼接的时候sql += " ||'''' ||" + colName + "|| ''','"; 是不是可以换一种写法?

支持(0) 反对(0) seeusmile | 园豆:164 (初学一级) | 2018-04-17 11:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册