经过一段时间的思考以及对所开发过项目的总结,最终下了结论,主要分两部份完成,在描述之前,先说明一下需要达到的目标:
1、跨数据库:即允许在多个数据库上运行。
2、可读性强:可读性强,入门的成本低,开发人员容易接受。
3、效率高:主要分两部份,开发的效率及运行的效率,在两都之间达到平衡。
4、即时运行:以脚本化的方式运行。
实现的方案如下:
1、将SQL92关键字对象化。
2、扩展SQL92标准,支持如:@等关键用法。
用例如下:
1、关键字对象化:
UserInfo是一个用户对象:主要属性有用户代码、用户名称、性别、年龄,部门id (外键)等。
Dep是一个部门对象:含部门的相关信息。
isNullNotCondition是一个自定函数,如果部门名称为空,不做为条件。
Select(UserInfo.class,"DEP_NAME") .from(UserInfo.class)
.innerJour(Dep.class)
.on("UserInfo.dep_id=Dep.dep_id");
.where()
.and("UserInfo.dep_id=:id")
.or(isNullNotCondition("Dep.dep_name=:name"));
动态SQL语句:
SQL = "select user_code,user_name,sex,age,dep_id,dep_name "+
" from UserInfo"+
" innerJour Dep "+
" on (user_info.dep_id=Dep.dep_id" +
" where userInfo.dep_id=:id"+
" @isNullNotCondition(and Dep.dep_name=:name)";
封装的集合如下:
1、创建临时表
2、Insert、Update、Delete、Select语句。
3、根据数据库生成Java对象,java对象与数据库一一对应该。
附上SLQ92语法表:
Command: SELECT query
|
Description: Retrieve rows from a table or view
|
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
expression [ <![AS]> name ] [,...]
[ INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table ]
[ FROM {table | (select query)} [ alias ] [,...] ]
[ {{LEFT | RIGHT} [OUTER] | NATURAL |[FULL] OUTER} JOIN table alias
{ON condition | USING(col1,col2,...)} ]
[ WHERE {condition | EXISTS (correlated subquery)} ]
[ GROUP BY column [,...] ]
[ HAVING condition [,...] ]
[ { UNION [ ALL ] | INTERSECT | EXCEPT | MINUS } select ]
[ ORDER BY {column | int} [ ASC | DESC | USING operator ] [,...] ]
[ FOR UPDATE [ OF class_name [,...] ] ]
LIMIT { count | ALL } [ { OFFSET | ,} start ]
|
Command: DELETE
|
Description: Removes rows from a table
|
DELETE FROM table [ WHERE condition ]
|
<!--EndFragment-->
Command: INSERT
|
Description: Inserts new rows into a table
|
INSERT INTO table [ ( column [, ...] ) ]
{ VALUES ( expression [, ...] ) | SELECT query }
|
|
Command: UPDATE
|
Description: Replaces values of columns in a table
|
UPDATE table SET col = expression [,...]
[ FROM fromlist ]
[ WHERE condition ]
|
|
最近一段时间终于发现了一个项目,与本人的想法十分附合,只不够它的语法恶心的点。
jOOQ项目,大家可以关注一下。
分享到:
相关推荐
此文档介绍了存储过程跨数据库操作,能较为详细的指导具体开发。
(2)存储过程执行一次后,其执行规划就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。 (3)确保数据库的安全。使用存储过程可以完成所有数据库...
包括存过日志加载,分区创建,已经存过的使用
存储过程的理念、存储过程的基本语法、常用发放的实现及简易的存储分页
jdbc连接oracle,执行存储过程,带数据库存储过程,代码是详细的源码,读取配置文件,连接jdbc,执行存储过程。
数据库备份的存储过程,创建一个备份库,表自动搜索和复制,可以自定义要备份的表
我俩参考表设置的不一样,我设置反了! 他这个语句好像也不是标准SQL,应该是MYSQL还是Oracle吧。希望老师解答~ (1)统计离散数学成绩分布 CREATE TABLE SCC( Grades CHAR(5), Num INT ) --存人数 ...
【例】 创建一个Bookstore数据库的存储过程,根据用户姓名和书名查询订单,如果订购册数小于5本不打折,订购册数在5-10本之间,订购单价打九折,订购册数大于10本,订购单价打八折。 DELIMITER $$ CREATE PROCEDURE ...
在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行...
oracle 数据库 plsql 存储过程
表述存储过程与数据库的连接,怎么写存储过程以及与表的连接
数据库 存储过程 触发器 基本简介
一、实验目的 1.了解存储过程的概念、优点 2.熟练掌握创建存储过程的方法 3.熟练掌握存储过程的调用方法 4.了解触发器的概念、优点 5.掌握触发器的方法和步骤 6.掌握触发器的使用
创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出...
针对初学者的关于存储过程的小程序,希望大家多多给提意见 又不成熟的地方,还希望大家多多包涵
实验八:JDBC数据库编程二——存储过程与函数 add 实验八:JDBC数据库编程二——存储过程与函数/2.addTwoNumAndReturn. 实验十:Socket编程 add 实验十:Socket编程/客户端代码client.java. 实验四:集合的...
创建另外一个存储过程sell_update,在其中调用第一个存储过程,如果给定参数为0,则修改由第一个存储过程插入记录的是否发货字段为'已发货',如果给定参数为1则删除第一个存储过程插入的记录,并将操作结果输出。...
mysql的存储过程 删除数据库所有表的存储过程
执行存储过程的代码和数据库脚本,代码简单易懂,适合初级人士
sql 存储过程 自动备份指定时间内A数据库表数据到B数据库表