`
weedria
  • 浏览: 35840 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

结论:我们需不需要像存储过程一样的跨数据库过程

阅读更多

经过一段时间的思考以及对所开发过项目的总结,最终下了结论,主要分两部份完成,在描述之前,先说明一下需要达到的目标:

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项目,大家可以关注一下。

1
0
分享到:
评论

相关推荐

    DB2存储过程语法大全

    4. **集成性**:当由应用程序调用时,存储过程像应用程序的一部分一样运行。 然而,存储过程也存在一些缺点: 1. **调用限制**:只能通过`CALL`语句调用,结果集不能直接被`SQLStatement`使用。 2. **状态独立**:...

    基于Oracle 的分布式数据库设计与技术

    这种方式简化了跨数据库查询的操作,提高了数据访问的透明度。 **3. 分布式事务** 分布式事务是指涉及两个或多个数据库节点的事务。为了确保数据的一致性、隔离性和持久性,分布式事务需要在所有参与的数据库节点上...

    一种基于Web的数据库访问技术

    - **Web应用模块**:PowerBuilder提供了专门的Web应用模块,使得Web服务能够像客户端一样向PowerBuilder服务器应用提出请求。 - **服务器端处理**:服务器端应用接收到请求后,进行必要的数据处理或查询操作,并将...

    应用工程数据库开发CADCAE集成系统.docx

    随着现代工业设计与制造技术的发展,计算机辅助设计(CAD)与计算机辅助工程(CAE)系统已成为产品开发过程中不可或缺的重要工具。CAD技术主要用于加快设计速度、缩短设计周期、改善产品造型和工程绘图质量;而CAE则...

    cpp-SQLCipher是一个SQLite扩展为数据库文件提供256位AES加密

    4. **执行SQL操作**:一旦数据库被初始化,就可以像使用普通SQLite一样进行CRUD(创建、读取、更新、删除)操作,但所有的数据都会在传输过程中自动加密和解密。 5. **关闭数据库**:在不再需要数据库时,记得正确...

    试议自动生成小层地质数据库.docx

    1. **ODBC技术实现跨数据库数据交换**: - 通过ODBC技术,GeoSpace平台实现了SQL Server 2000数据库与FoxPro数据库之间的数据交换。 - 这种技术的应用解决了不同数据库之间的兼容性问题,确保了解释结果能够准确...

    基于springboot的海滨体育馆管理系统源码数据库.doc

    - **独立运行**:Spring Boot可以像普通Java应用一样独立运行在命令行环境之中。 - **嵌入式容器**:Spring Boot可使用如Tomcat、Jetty或Undertow等嵌入式Servlet容器。 - **快速部署**:由于使用了嵌入式的...

    DDBS安全机制及其在SQL Server中的实现.pdf

    它允许用户对整个数据库系统有一个统一的视角,就好像数据都存储在一个单一的数据库中一样。SQL Server利用分布式查询和视图实现全局视图,例如,可以使用联结服务器和OPENROWSET函数来查询和访问不同数据源的数据。...

    MariaDB Cassandra interoperability Cassandra Storage Engine in MariaDB

    Cassandra存储引擎为MariaDB用户提供了独特的价值,尤其是在需要跨数据库系统操作数据的场景下。它不仅简化了数据访问过程,还提高了数据处理的灵活性。然而,正确理解和应用数据映射策略对于充分发挥其潜力至关重要...

    全面解析JDBC

    它有三种类型:`Statement`、`PreparedStatement`和`CallableStatement`,分别用于执行普通SQL语句、预编译SQL语句和存储过程调用。 4. **ResultSet**:当执行查询时,结果将被封装到`ResultSet`对象中,它可以像...

    C#与mapobject开发地理信息系统

    - **统一类型系统**:所有类型都从`System.Object`派生,这意味着所有的类型都可以像对象一样进行操作。 - **版本兼容**:通过.NET平台提供的装配件管理机制,可以有效地解决版本兼容问题。 - **支持网络编程新标准*...

    网上二手图书商城的设计与实现_.doc

    4) 数据库设计:使用MySQL数据库存储数据,具有高可用性和良好的扩展性。 5) 用户体验:设计简洁友好的用户界面,便于用户快速查找和购买图书。 6) 功能模块化:系统功能包括用户登录、商品浏览、购买、上架等,模块...

    j2ee的13种核心技术

    它可以跨网络调用远程对象的方法,就像本地调用一样。 - **应用场景**:RMI主要用于实现分布式应用程序中的远程对象调用。 - **与其他技术的交互**:RMI通常与EJBs结合使用,以实现远程EJBs的调用。 5. **JSP ...

    基于JSP网上书店系统毕业论文(含源文件).doc

    用户需求分析旨在理解用户对系统的期望,而数据库设计与实现则是为了支持这些功能的数据存储和检索。 2. **系统总体架构**:论文介绍了采用MVC(Model-View-Controller)设计模式,这是一种常见的软件设计模式,...

    SOA in the real world

    - **数据库**:存储工作流状态和数据。 - **接口**:允许外部系统与工作流交互。 - **管理工具**:提供监控和管理功能。 #### 总结 通过本章的学习,读者应该已经对工作流的概念有了深入的理解,并了解了如何利用...

Global site tag (gtag.js) - Google Analytics