sql查询语句中所带参数,在windows环境和linux环境java工程中为啥表现不同?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询语句中所带参数,在windows环境和linux环境java工程中为啥表现不同?相关的知识,希望对你有一定的参考价值。
public static void main(String[] args)
List<String> list = new ArrayList<String>();
list.add("978-7-117-12632-8");
list.add("978-7-117-16417-7");
list.add("978-7-117-16418-4");
String ibsns = "";
for(String ibsn:list)
ibsns += "'" + ibsn + "',";
ibsns = ibsns.substring(0, ibsns.lastIndexOf(","));
int count = new Q("select count(*) from ZMAllResource where resourceType=? and resourceNo in (" + ibsns + ")","CaseBook").executeInt();
System.out.print(count);
windows环境SQL语句正常:select count(*) from ZMAllResource where resourceType='CaseBook' and resourceNo in ('978-7-117-12632-8','978-7-117-16417-7','978-7-117-16418-4');
linux环境SQL语句异常:select count(*) from ZMAllResource where resourceType='CaseBook' and
resourceNo in
(''978-7-117-12632-8','978-7-117-16417-7','978-7-117-16418-4'');
缺失右括号
windows环境SQL语句
linux环境SQL语句
resourceNo in (\'\'978-7-117-12632-8\',\'978-7-117-16417-7\',\'978-7-117-16418-4\'\');
很明显Linux环境下的SQL语句在In里的两侧都多了一个【\'】,你看看程序里写的是否有错误吧,
这个应该和数据库没有关系的,是你程序在组织SQL语句时发生的错误
参考技术A试试用改造一下:
StringBuilder builder = new StringBuilder();builder.append(""); 参考技术B 你说的不同是不是linux里括号里面两边多了两个'追问
是的,在本地windows环境没问题,放到服务器linux环境下面括号里面两边多了两个'
oracle PL/SQL编程语言之游标的使用
(本文章内容仅在windows10下经测试能够运行,不能保证其他环境下的可靠性)
PL/SQL游标
概念:类似于集合
定义游标
关键字:cursor;
1、不带参数游标
语法:cursor 游标变量名 is 查询语句;
示例代码如下:
cursor c1 is select * from emp;
2、带参数游标
语法:cursor 游标变量名(参数名 数据类型...) is 查询语句(查询语句语句的右值可以使用游标参数);
示例代码如下:
cursor c2(dno emp.deptno%type) is select empno from emp where deptno = dno;
遍历游标
关键字:open;fetch;close;
1、不带参数的游标
语法:
open 游标变量名;
loop
fetch 游标变量名 into 变量名;
exit when 条件(常使用:游标变量名%notfound;)
循环体(使用变量执行其他语句)
end loop;
close 游标变量名;
示例代码如下:
open c1; loop fetch c1 into e; exit when c1%notfound; dbms_output.put_line(e.ename); end loop; close c1;
2、带参数的游标
语法:
open 游标变量名(实参列表);
loop
fetch 游标变量名 into 变量;
exit loop 条件(常使用:游标变量名%notfound;)
循环体(使用变量执行其他语句)
end loop;
close 游标变量名;
示例代码如下:
open c2(10); loop fetch c2 into eno; exit when c2%notfound; update emp set sal = sal + 10 where empno = eno; commit; end loop; close c2;
使用游标的两个简单案例
1、使用游标输出emp表所有员工姓名
示例代码如下:
--使用游标遍历输出emp表员工姓名 declare cursor c1 is select * from emp; e emp%rowtype; begin open c1; loop fetch c1 into e; exit when c1%notfound; dbms_output.put_line(e.ename); end loop; close c1; end;
2、使用游标给emp表部门编号为10的所有员工增加工资10
示例代码如下:
--使用游标给emp部门编号为10的员工涨10元工资 declare cursor c2(dno emp.deptno%type) is select empno from emp where deptno = dno; eno emp.empno%type; begin open c2(10); loop fetch c2 into eno; exit when c2%notfound; update emp set sal = sal + 10 where empno = eno; commit; end loop; close c2; end;
以上是关于sql查询语句中所带参数,在windows环境和linux环境java工程中为啥表现不同?的主要内容,如果未能解决你的问题,请参考以下文章
PHP-CGI远程代码执行漏洞(CVE-2012-1823)