SqlMaker.docx

上传人:b****2 文档编号:760555 上传时间:2023-04-30 格式:DOCX 页数:13 大小:17.50KB
下载 相关 举报
SqlMaker.docx_第1页
第1页 / 共13页
SqlMaker.docx_第2页
第2页 / 共13页
SqlMaker.docx_第3页
第3页 / 共13页
SqlMaker.docx_第4页
第4页 / 共13页
SqlMaker.docx_第5页
第5页 / 共13页
SqlMaker.docx_第6页
第6页 / 共13页
SqlMaker.docx_第7页
第7页 / 共13页
SqlMaker.docx_第8页
第8页 / 共13页
SqlMaker.docx_第9页
第9页 / 共13页
SqlMaker.docx_第10页
第10页 / 共13页
SqlMaker.docx_第11页
第11页 / 共13页
SqlMaker.docx_第12页
第12页 / 共13页
SqlMaker.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

SqlMaker.docx

《SqlMaker.docx》由会员分享,可在线阅读,更多相关《SqlMaker.docx(13页珍藏版)》请在冰点文库上搜索。

SqlMaker.docx

SqlMaker

SQL读取工具SqlMaker使用说明

一,使用方法大致分为三步:

//Step1:

构造SqlMaker类型的对象,参数为要解析的原始SQL值

SqlMakermaker=newSqlMaker("SELECT*FROMemp");

//Step2:

设定maker的参数值,值分别为文件中绑定的变量名,传入的参数值,传入的参数类型

Integerempno=newInteger(7788);

maker.addArg("empno",empno,empno.getClass());

Stringjob="developer";

maker.addArg("job",job,job.getClass());

//Step3:

取得解析后的SQL值

maker.getSql();

其中Step2与Step3执行顺序不能颠倒――即全部参数设定完毕后才能执行getSql操作。

如下例会发生SqlArgumentOrderException异常。

//构造SqlMaker类型的对象,参数为要解析的原始SQL值

SqlMakermaker=newSqlMaker("SELECT*FROMemp");

//设定maker的参数值,值分别为文件中绑定的变量名,传入的参数值,传入的参数类型

Integerempno=newInteger(7788);

maker.addArg("empno",empno,empno.getClass());

//取得解析后的SQL值

maker.getSql();

//再次设定maker的参数值

Stringjob="developer";

//maker.addArg("job",job,job.getClass());因为SQL值已经解析完毕,再次设定参数值会发生异常。

二,使用举例

使用例1:

当然没有设定任何参数时,将返回原内容。

SqlMakermaker=newSqlMaker("SELECT*FROMemp");

maker.getSql()返回值:

"SELECT*FROMemp";

使用例2:

当SQL后有分号时,自动删除

SqlMakermaker=newSqlMaker("SELECT*FROMemp;");

maker.getSql()返回值:

"SELECT*FROMemp";

使用例3:

当SQL后有制表符,空格,换行符时,自动删除

SqlMakermaker=newSqlMaker("SELECT*FROMemp;");

maker.getSql()返回值:

"SELECT*FROMemp";

使用例4:

当SQL注释内容不合法时,抛出异常

SqlMakermaker=newSqlMaker("SELECT*FROMemp/*hoge");

maker.getSql()抛出TokenNotClosedRuntimeException异常

使用例5:

当SQL有绑定变量时,设定的参数名要与读入的注释/*与*/之间的变量名相同,且变量名与注释之间不允许有空格

SqlMakermaker=newSqlMaker("SELECT*FROMempWHEREempno=/*empno*/1AND1=1");

Integerempno=newInteger(7788);

//将变量名直接替换成值7788

maker.addArg("empno",empno,empno.getClass());

maker.getSql()返回值:

"SELECT*FROMempWHEREempno=7788AND1=1";

使用例6:

当SQL有判断条件IF时会根据传入的参数值动态生成SQL

SqlMakermaker=newSqlMaker("

SELECT*FROMemp

/*IFjob!

=null*/

WHEREjob=/*job*/'XXX'

/*END*/

");

Integerempno=newInteger(7788);

maker.addArg("empno",empno,empno.getClass());

maker.getSql()返回值:

"SELECT*FROMempWHEREjob=7788";

使用例7:

当SQL有IF判断嵌套时

SqlMakermaker=newSqlMaker("

/*IFparam1!

=null*/

sql1

/*IFparam2!

=null*/

sql2

/*END*/

/*END*/

");

例1:

未传入参数

maker.getSql()返回值:

"";

例2:

传入以下参数

maker.addArg("param1",null,String.class);

maker.addArg("param2","hoge",String.class);

maker.getSql()返回值:

"";

例3:

传入以下参数

maker.addArg("param1","value1",String.class);

maker.addArg("param2","value2",String.class);

maker.getSql()返回值:

"

sql1

sql2

";

例4:

传入以下参数

maker.addArg("param1","hoge",String.class);

maker.addArg("param2",null,String.class);

maker.getSql()返回值:

"

sql1

";

使用例8:

SQL有IF/ELSE判断时

SqlMakermaker=newSqlMaker("

SELECT*FROMempWHERE

/*IFjob!

=null*/

job=/*job*/'XXX'

--ELSE

jobisnull

/*END*/

");

例1:

未传入参数时:

maker.getSql()返回值:

"SELECT*FROMempWHEREjobisnull"

例2:

传入以下参数时:

Stringjob="developer";

maker.addArg("job",job,job.getClass());

maker.getSql()返回值:

"SELECT*FROMempWHEREjob='developer'"

使用例9:

SQL有false/true常量值时

SqlMakermaker=newSqlMaker("

/*IFfalse*/

aaa

--ELSE

bbb=/*bbb*/123

/*END*/

");

传入以下参数

Integerbbb=newInteger(1234);

maker.addArg("bbb",bbb,bbb.getClass());

maker.getSql()返回值:

"bbb=1234"

使用例10:

SQL有false/true常量嵌套时

SqlMakermaker=newSqlMaker("

/*IFfalse*/

aaa

--ELSE

bbb

/*IFfalse*/

ccc

--ELSE

ddd

/*END*/

/*END*/

");

未传参数:

maker.getSql()返回值:

"bbbddd"

使用例11:

SQL中IF/ELSE有/*BEGIN*/时,由于前面条件不满足所产生的多余AND会被自动清除

SqlMakermaker=newSqlMaker("

SELECT*FROMemp

/*BEGIN*/

WHERE

/*IFfalse*/

aaa

--ELSE

ANDdeptno=10

/*END*/

/*END*/

");

未传参数:

maker.getSql()返回值:

"SELECT*FROMempWHEREdeptno=10"

使用例12:

SQL中多个IF判断之外有/*BEGIN*/时

SqlMakermaker=newSqlMaker("

SELECT*FROMemp

/*BEGIN*/

WHERE

/*IFjob!

=null*/

job=/*job*/'XXX'

/*END*/

/*IFdeptno!

=null*/

ANDdeptno=/*deptno*/99

/*END*/

/*END*/

");

例1:

未传参数:

maker.getSql()返回值:

"SELECT*FROMemp"

例2:

传入以下参数

maker.addArg("job","developer",String.class);

maker.addArg("deptno",null,Integer.class);

maker.getSql()返回值:

"SELECT*FROMempWHEREjob='developer'"

例3:

传入以下参数

maker.addArg("job","developer",String.class);

maker.addArg("deptno",newInteger(20),Integer.class);

maker.getSql()返回值:

"SELECT*FROMempWHEREjob='developer'ANDdeptno=20"

例4:

传入以下参数

maker.addArg("job",null,String.class);

maker.addArg("deptno",newInteger(20),Integer.class);

maker.getSql()返回值:

"SELECT*FROMempWHEREdeptno=20"//AND被自动清除

使用例13:

SQL有BETWEEN…AND…时

SqlMakermaker=newSqlMaker("

/*BEGIN*/

WHERE

/*IFtrue*/

aaaBETWEEN/*beginno*/111AND/*endno*/999

/*END*/

/*END*/

");

传入以下参数:

maker.addArg("beginno",888,Integer.class);

maker.addArg("endno",999,Integer.class);

maker.getSql()返回值:

"WHEREaaaBETWEEN888AND999"

 

使用例14:

SQL有IN时,传入集合类型

SqlMakermaker=newSqlMaker("

SELECT*FROMemp

WHEREdeptnoIN/*deptnoList*/(10,20,30)

ORDERBYename

");

传入以下参数:

ListdeptnoList=newArrayList();

deptnoList.add(newInteger(100));

deptnoList.add(newInteger(200));

maker.addArg("deptnoList",deptnoList,List.class);

maker.getSql()返回值:

"SELECT*FROMempWHEREdeptnoIN(100,200)ORDERBYename"

即传入的集合类型会自动生成一个被括号包围的一览值。

使用例15:

SQL有IN时,,传入数组类型

SqlMakermaker=newSqlMaker("

SELECT*FROMemp

WHEREdeptnoIN/*deptnoList*/(10,20,30)

ORDERBYename

");

传入以下参数:

int[]deptnoArray={100,200};

maker.addArg("deptnoList",deptnoArray,deptnoArray.getClass());

maker.getSql()返回值:

"SELECT*FROMempWHEREdeptnoIN(100,200)ORDERBYename"

即传入的集合类型会自动生成一个被括号包围的一览值。

使用例16:

SQL有IN时,传入字符串数组

SqlMakermaker=newSqlMaker("

SELECT*

FROM

emp

WHERE

enameIN/*enames*/('AAAA','BBBB')

ANDjobIN/*jobs*/('CCCC','DDDD')

");

传入以下参数:

String[]enames={"SCOTT","MARY"};

String[]jobs={"ANALYST","FREE"};

maker.addArg("enames",enames,enames.getClass());

maker.addArg("jobs",jobs,jobs.getClass());

maker.getSql()返回值:

"SELECT*FROMempWHEREenameIN('SCOTT','MARY')ANDjobIN('ANALYST','FREE')"

使用例17:

SQL有问号参数时

SqlMakermaker=newSqlMaker("SELECT*FROMaWHEREsalBETWEEN?

AND?

");

传入以下参数:

maker.addArg("$1",newInteger(0),Integer.class);

maker.addArg("$2",newInteger(1000),Integer.class);

maker.getSql()返回值:

"SELECT*FROMaWHEREsalBETWEEN0AND1000"

使用例18:

SQL有绑定变量,问号参数两方时

SqlMakermaker=newSqlMaker("

SELECT

*

FROM

emp

WHERE

col1

ANDcol2BETWEEN?

AND?

");

传入以下参数:

maker.addArg("col1",newInteger(600),Integer.class);

maker.addArg("$1",newInteger(0),Integer.class);

maker.addArg("$2",newInteger(1000),Integer.class);

maker.getSql()返回值:

"SELECT*FROMempWHEREcol1<600ANDcol2BETWEEN0AND1000"

使用例19:

SQL为插入语句时

SqlMakermaker=newSqlMaker("

INSERTINTOITEM(ID,NUM)VALUES(/*id*/1,/*num*/20)"

);

传入以下参数:

maker.addArg("id",newInteger(10),Integer.class);

maker.addArg("num",newInteger(20),Integer.class);

maker.getSql()返回值:

"INSERTINTOITEM(ID,NUM)VALUES(10,20)"

使用例20:

SQL为更新语句时

SqlMakermaker=newSqlMaker("

UPDATEITEMSETID=/*id*/1,NUM=/*num*/999)

");

传入以下参数:

maker.addArg("id",newInteger(10),Integer.class);

maker.addArg("num",newInteger(20),Integer.class);

maker.getSql()返回值:

"UPDATEITEMSETID=100,NUM=300"

使用例21:

SQL有注释时

SqlMakermaker=newSqlMaker("

SELECTAAA,BBB--UGO

FROMHOGEWHEREAAA=/*moge*/aaa

ANDFUGA=/*PIRO*/ccc

");

传入以下参数:

maker.addArg("moge","test1",Integer.class);

maker.addArg("PIRO","test2",Integer.class);

maker.getSql()返回值:

"SELECTAAA,BBB–UGO

FROMHOGEWHEREAAA='test1'

ANDFUGA=/*PIRO*/ccc"

此时PIRO因为两边有空格存在,并未被解析成绑定参数,而是原样被转变成注释内容。

使用例22:

SQL有HINT时

SqlMakermaker=newSqlMaker("

SELECT/*+INDEX(TABLE_NAMEINDEX_NAME)*/AAAFROMHOGE

");

maker.getSql()返回值:

"SELECT/*+INDEX(TABLE_NAMEINDEX_NAME)*/AAAFROMHOGE"

使用例23:

SQL的--注释中的问号[?

]会被自动删除

SqlMakermaker=newSqlMaker("

SELECTAAA

--comment?

?

?

?

--comment2?

?

?

FROMHOGE

");

maker.getSql()返回值:

"SELECTAAA

--comment

--comment2

FROMHOGE"

使用例24:

SQL的/**/注释中的问号[?

]会被自动删除

SqlMakermaker=newSqlMaker("

SELECTAAAFROMHOGEwhere

/*IFhoge!

=null*/

aa=/*fuga*/'gaga'

--ELSEbb=?

/*END*/

/*comment?

*/

");

传入以下参数:

maker.addArg("hoge","test1",String.class);

maker.addArg("fuga","test2",String.class);

maker.getSql()返回值:

"SELECTAAAFROMHOGEwhereaa='test2'/*comment*/"

使用例25:

SQL有问号参数且注释中有问号时

SqlMakermaker=newSqlMaker("SELECTAAAFROMHOGEwhereaa=?

--comment?

");

传入以下参数:

maker.addArg("$1",newInteger(100),Integer.class);

maker.getSql()返回值:

"SELECTAAAFROMHOGEwhereaa=100--comment"

问号参数被替换成传入的值,但注释中的问号被自己删除。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2