Java拼接动态SQL的一般做法有

1、使用动态语句

非常多数据库都提供了处理动态SQL的语法,如Oracle的EXECUTE IMMEDIATE语句、MSSQL的EXEC和SP_EXECUTESQL、Mysql的预处理语句等。

这些功能让我们在数据库端来处理动态查询提供了极大遍历,但这样的方式仅仅适用于相对简单地动态查询,复杂的情况常常会採用以下的方式。

2、使用存储过程

对于复杂的情况,通常会在存储过程中来拼接动态SQL。使用存储过程完毕相对灵活,但编码复杂度过高,有时执行效率较低。

3、使用其它(如JAVA)程序

使用外部的其它高级语言(如JAVA)拼接后再交由数据库运行也是一种选择,其灵活性较高,但因为JAVA缺乏对集合计算的支持。完毕这些准备工作并不轻松。

假设须要运行动态SQL的主控程序是JAVA的,那么能够使用集算器来协助完毕动态SQL类计算,集算器是动态解释运行的脚本,能够方便地拼出动态SQL运行。集算器提供了JDBC接口,能够置于Java应用程序与数据库之间,让应用程序继续象訪问数据库一样运行集算器脚本,应用结构差点儿不用改变。

以下通过样例来说明怎样使用集算器完毕动态SQL类计算,并集成进JAVA程序。

拼接动态SQL

在集算器中完毕动态SQL拼接,并将拼接后的SQL再交由数据库运行,以查询出目标结果。集算器在完毕时并不涉及目标计算,仅仅拼接动态SQL。如以下的需求:

參数source和target代表两个结构同样但数据不同的表,但表结构未知。

要求以主键为标准用source更新target,比方table1和table2的主键都是A和B,数据例如以下:

用table2更新table1时,MERGE语句应当例如以下:

MERGE INTO table1 as t

USING table2 as s

ON t.A=s.A and t.B=s.B

WHEN MATCHED

THEN UPDATE SET t.C=s.C,t.D=s.D

WHEN NOT MATCHED

THEN INSERT VALUES(s.A,s.B,s.C,s.D)

实现脚本:

A1,A2: 从系统表中读出表source的主键存入变量pks,计算结果为集合["A","B"]。各种数据库获得主键的方法不同。这里以MSSQL为例。

A3,A4:读出source的完整字段,columns的计算结果为["A","B","C","D"]。

A5:动态生成MERGE语句。

pks.(…)是循环函数。可对集合(包含结果集)的成员依次计算,计算中可用~引用循环变量。用#引用循环计数。

A6:运行MERGE语句。

因为表结构未知。用存储过程或JAVA获得表结构再动态拼出SQL很麻烦。使用集合类计算支持良好的集算器来做。代码简单。脚本通用。易于维护。

集算脚本的计算结果能够作为报表数据源供报表使用,还能够在JAVA程序中通过JDBC的方式读取并使用,JAVA读取调用集算脚本代码例如以下:

Class.forName("com.esproc.jdbc.InternalDriver");

con= DriverManager.getConnection("jdbc:esproc:local://");

//调用集算器脚本(类似存储过程),当中p1是集算脚本的文件名称

st =(com. esproc.jdbc.InternalCStatement)con.prepareCall("call p1()");

st.setObject(1,"table1");

st.setObject(2," table2");

//运行脚本

st.execute();

……

调用集算器脚本和訪问数据库的方法全然一样。熟悉JDBC的程序猿能够非常快掌握。

关于集算器JDBC的部署和调用的更具体信息可參考集算器集成应用之被JAVA调用

。动态表间连接

相对静态的表间连接,动态表间连接事先并不知道要使用的表。如以下的数据查询:

A表

B表

C表

现须要依据A表的TableName获取B表或C表相应ID的Num值。

目标结果:

实现脚本:

A1:运行SQL从A表取数;

A2:先按TableName分组。循环分组拼接动态查询语句。最后把查询结果依照ID排序。

通过集算器的集合计算能力(分组后仍然保存着分组成员供兴许使用),让动态SQL的拼接工作简单化。

特殊格式数据更新

除了动态数据查询,有时还须要进行动态更新,更新的数据常常来源于第三方程序。其格式也多种多样,如JSON格式、XML等。在特殊的业务背景下,有时须要将这些较特殊格式(相对传统的二维表来说)的数据更新到(关系)数据库中。这就须要借助第三方程序完毕,而像JAVA等高级语言存在缺少类库、硬编码困难等问题。这时能够採用集算器来完毕。以下来看一个集算器解析JSON格式文件入库的样例。源数据例如以下:

要求:将上述内容中指定节点,主要是imei的Service列表更新到数据库2张表groups和Services中。

这里的JSON串因为包括多层且非常多层都是动态的(如LIST和SERVICES下的节点数量和名称都不固定),这为解析带来了非常大难度。并且当中属性名部分还包括空格(如MOVISTAR SPAIN)和点号(如Requires.Network)这也大大添加了解析难度,使用JAVA非常难写。

实现脚本:

A1:读入JSON格式文件,结果为带有层次的结果集。

A2-A3:创建存储更新内容的两个空序表;

A4-D10:循环A1,动态解析内容并将解析结果输出到A2、A3目标结果序表中。

A11-A12:运行更新。将A2、A3序表更新到groups和services表中。

java mysql 动态sql_Java下拼接运行动态SQL语句相关推荐

  1. PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解...

    1.安装PowerDesigner15.MySQL5.不详细讲解了.网上一大把.请各位亲参考去. 2.安MyODBC-standard-3.51.0.7-win.msi.mysql-connector ...

  2. mysql实现文章上一篇下一篇的sql语句

    转载:http://www.111cn.net/database/mysql/66709.htm 在mysql中查查询上一篇与下一篇只需要对数据进行按id排序之后,然后我们再进行asc或者desc最当 ...

  3. cmd执行服务器sql文件命令行,Dos命令提示符下 - 用sqlcmd执行*.sql语句

    Dos命令提示符下 - 用sqlcmd执行*.sql语句 1)在Dos命令下执行sqlcmd命令(当然事先需要将sqlcmd增加到环境变量中去), 2)下面白色部分替换为服务器名或计算机名即可 sql ...

  4. JavaWEB01:MySQL基础——数据库相关概念、MySQL安装和配置、基础的SQL语句

    JavaWEB01:MySQL基础--数据库相关概念.MySQL安装和配置.基本的SQL语句 JavaWEB02:MySQL高级--约束.数据库设计.多表查询.事务 JavaWEB03:JDBC Ja ...

  5. Mysql学习笔记(基础)基础sql语句详细记录

    数据库学习(基础) // 个人网课学习记录,如果有违规等问题,请联系我删除~ mysql下载安装( 解压版安装配置 下载版安装配置 ) 需求分析:使用cmd命令来创建一个数据库,并对数据库中得一张分类 ...

  6. beeline执行sql语句_由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考...

    背景 我们使用的HiveServer2的版本为0.13.1-cdh5.3.2,目前的任务使用Hive SQL构建,分为两种类型:手动任务(临时分析需求).调度任务(常规分析需求),两者均通过我们的We ...

  7. 【MySQL】全国省市县三级联动SQL语句—区县SQL(三)

    目录 ->区县信息表数据 [MySQL]全国省市县三级联动SQL语句-建表和省份SQL(一)_路遥叶子的博客-CSDN博客全国省市县三级联动SQL语句-建表和省份SQL(一)https://bl ...

  8. mysql批量删除多条记录的sql语句_mysql批量删除sql语句

    30种mysql优化sql语句查询的方法_计算机软件及应用_IT/计算机_专业资... 简要介绍基础语句: 1.说明:创建数据库 CREATE DATABASE database-name 2.说明: ...

  9. MySQL中特别实用的几种SQL语句

    MySQL中特别实用的几种SQL语句 文章目录 MySQL中特别实用的几种SQL语句 1. 插入或替换 2. 插入或更新 3. 插入或忽略 4. 指定数据快照或备份 5. 写入查询结果集 6. 强制使 ...

最新文章

  1. 有原型的对象和没有原型的对象
  2. 图灵奖得主Yann LeCun:我的论文也被NeurIPS拒了
  3. [03]常用正则表达式
  4. Mongodb 自动增长 自增id 实现
  5. 热图绘制一个快乐五一
  6. Swift中文教程(十三) 继承
  7. 京东开通数字人民币“硬件钱包”线上消费功能
  8. 2020 年软件开发趋势预测!
  9. Java、JSP毕业设计管理系统
  10. 前端 利用html实现分页切换效果
  11. MySQL数据库微信h5棋牌搭建详解
  12. 发送webService请求BPM流程
  13. 加班报税,体力不支?RPA智能申报,让报税轻松无忧
  14. 最全自动驾驶数据集分享系列八 | 仿真数据集
  15. Python实现VRP常见求解算法——离散量子行为粒子群算法(DQPSO)
  16. 如何使用一个for循环输出九九乘法表
  17. 推翻微信的,会长什么样
  18. 你知道CAD看图软件浩辰CAD看图王中的批注如何删除/保存吗?
  19. Java游戏编程---第一章 2D图形和动画
  20. 取消ctrl+alt+left旋转桌面

热门文章

  1. 周三晚八点直播丨如何通过APEX 实现自动化运维
  2. 如何用 Redis 做实时订阅推送的?
  3. 有赞零售财务中台架构设计与实践
  4. 认识容器,我们从它的历史开始聊起
  5. 从两个模型带你了解DAOS 分布式异步对象存储
  6. 实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值
  7. 【华为云技术分享】五个Taurus垃圾回收compactor优化方案,减少系统资源占用
  8. 快速掌握用python处理Excel
  9. Android笔记 pacth图形
  10. Ubuntu18.04上手配置入门指南