EZDML 数据建模

超轻量级的免费数据建模工具

0%

EZDML连接数据库——JDBC

JDBC

JDBC是万金油终极解决方案。如果其它驱动连不上,那JDBC一定是可以的。

当然,JDBC配置起来稍麻烦,不熟悉JAVA的同学会稍为有点头大;非程序员建议在程序员的陪同下进行;不过JAVA这么流行,再看下本文填下坑,相信基本上都能跑起来。

JDBC连接

在连接数据库时,连接类型上选择“HTTP_JDBC”,或者数据源以JDBC:开头(EZDML v3.59起支持),就是JDBC的连接方式了。

工作原理

大家会看到连接类型名以HTTP开头,数据源格式下拉里面也是http的URL,这表明了JDBC是通过HTTP与EZDML通讯的。

众所皆知JDBC是java应用,用java虚拟机跑的;而咱们EZDML是原生程序,不太方便直接调Java(嗯,JNI是可以的,但我觉得JNI太麻烦,不方便调试);每个请求都调一次Java获取结果也行,但并不是每个功能都是一个大请求能完成的,每个请求都要开启java虚拟机连接数据库效率实在太低。所以EZDML通过HTTP与java虚拟机联系,然后java虚拟机再通过jdbc访问数据库:

JDBC原理

HTTP连接配置

从EZDML v3.59起,HTTP_JDBC支持指定Http URL地址,也支持直接指定JDBC连接属性(主要是jdbc.url)。

HTTP的方式比较麻烦,但也比较灵活,它可以不在本机部署,也可以不用JDBC,甚至可以不用JAVA实现,只要符合相关协议即可。不过这里还是以JDBC为例进行说明。

点连接窗口上的“配置”按钮,出来配置窗口,可直接指定HTTP的URL:

点“启动JDBC服务”,弹出JDBC配置窗口:

JDBC配置

各项配置说明如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off //这个是windows批处理关闭命令回显的,不用管

set java_bin=java.exe //java虚拟机命令。如果java.exe在搜索路径范围内,可直接写java.exe;否则要写全路径名

//以下为JDBC的驱动程序设置
set jdbc_driver=com.mysql.jdbc.Driver
//这里批处理为什么用^^^&我也没搞太明白,估计跟Java里的\\\&差不多
set jdbc_url=jdbc:mysql://127.0.0.1:3306/eztest?useUnicode=true^^^&characterEncoding=UTF-8
set jdbc_username=root
set jdbc_password=root

set jdbc_engineType=MYSQL //这个主流数据库可以空着,能猜出来;但达梦之类的就需要指定了
set http_password= //HTTP连接密码,可以为空,不为空的话,EZDML连接窗口中要输入这个密码(用户名随意)
set http_port=8083 //这个8083端口,对应的就是数据源URL:http://localhost:8083/ezdml/

简化JDBC连接配置

设置一大堆Driver Class端口之类的比较麻烦,从v3.59起EZDML支持简化的JDBC连接,只需要指定JDBC的URL,其它的配置项包括驱动类名等由系统自动取默认值:

本质上还是使用HTTP_JDBC,程序自动查找可用的端口,生成随机访问密码,运行JAVA服务连接数据库,并在HTTP端口提供访问服务。

其它数据库连接

从EZDML v3.59起,ORACLE/MYSQL/POSTGRE/SQLSERVER也支持通过JDBC驱动连接,其本质跟HTTP_JDBC并无区别,只是把HTTP_JDBC集成到各个子连接里了,更方便些。

具体配置在各个连接里,连接类型选择JDBC,比如ORACLE的:

选择JDBC连接后,输入JDBC的连接信息(主要是url,可添加driver,分号分隔,内容中有分号的话用#59#代替),确定,输入用户名密码登录。

当选择JDBC连接时,除了连接驱动换成JDBC,其它跟平时是一样的。

下载JDK和jdbc驱动

使用JDBC时,你可能需要下载JDK和jdbc驱动。

【注意】有一点要先提一下,HTTP_JDBC是走HTTP协议的,这意味着你不一定要在本机跑,你可以把jdbc目录拷到任一台有jdk的电脑运行,比如在数据库服务器或应用服务器上很可能是有jdk或可以部署jdk的。

EZDML自带了mysql-connector-java-5.1.38.jar和ojdbc6.jar两个jar,仅可以连低版本的mysql和oracle,如果没有你要的,或与你要连的数据库版本不符,则你很可能需要自己下载JDBC驱动。比如我们可以从mvnrepository.com下载所需要的jar包:

下载jar

如果你机上没有合适的java环境,也会报错,请从网上下载安装java环境(建议安装jdk8):

下载安装JDK

运行HTTP_JDBC服务

上述配置界面上点”运行“则保存配置并启动HTTP_JDBC服务,启动后会尝试按配置信息连接数据库,不过我机上出师不利报了个错:

JDBC报错

嗯,大概是说连接安全设置有问题,需要加个参数,加吧:

加参数

加完再跑,结果还是有问题:

连接失败2

考虑到我机上的是mysql8,而EZDML自带的mysql jdbc驱动是5,我猜可能是版本太旧,上网搞个新的吧,并把旧的删除:

升级jar包

还是有问题,前面那个class类名的提示倒不要紧,但后面公钥的错误就过不了了:

还是有问题

看来它一定要加密,把useSSL改成true吧:

useSSL

再运行,终于成功了:

HTTP服务启动成功

连接HTTP_JDBC

启动HTTP_JDBC服务后,我们可以看到最后一行日志”EzdmlJdbcHttpServer started at http://localhost:8083/ezdml/ (NO PASSWORD AUTH!!!)“,意思是说服务已经启动成功,在本机8083端口监听,服务路径为/ezdml,且不需要登录密码。

我们可以在浏览器打开http://localhost:8083/ezdml/,服务是有回应的:

浏览器打开

回到EZDML,把HTTP服务的URL链接填入数据源地址:

数据源链接

由于HTTP服务没有设置密码,我们就不填写用户名和密码了,直接点”确定“进行连接,连接成功,列出所有表对象:

连接成功

【注】这里有点问题,出现了重名的表,比如admin有两个,这是因为root权限太大,而HTTP_JDBC服务没把Owner传过来。回头要改下代码。

HTTP服务会打印请求日志:

请求日志

导入结果:

导入结果

Win32/Linux/MaxOS

上述演示的是EZDML for win64版的。但java本身就是跨平台虚拟机,在任何平台运行都是一样的效果,因此这里就不再一一举例了。

jdbc目录

在进行JDBC连接配置时,大家会看到最后还有一项“配置文件路径”:

1
D:\EZDML\jdbc\conf.bat

我们可以打开这个目录来看看:

jdbc目录

显然它是运行了ezjdbc.bat这个批处理:

ezjdbc.bat

这个批处理干了以下几件事:

  • 设置工作目录到文件所在位置(D:\EZDML\jdbc)
  • 运行conf.bat设置各环境变量(嗯,就是我们在连接配置里设置的内容)
  • 将lib子目录下的所有jar添加到CLASSPATH环境变量
  • 显示配置好的信息
  • 调用java运行ezjdbc.jar里的com.ezdml.httpsv.EzHttpServer类,并将所有设置好的参数、环境变量传过去

我们试着双击运行ezjdbc.bat,果然弹出了熟悉的HTTP_JDBC命令行窗口:

运行ezjdbc.bat

没错,EZDML就是运行了这个脚本来启动HTTP_JDBC的。

java源码

JDBC的代码我大概只花了几天时间写,写完自己也不怎么用,所以估计会有一些BUG,不过好消息是源代码已附上了。

java_src.zip里包含了HTTP_JDBC服务的源码,大家如有需要可以自行调试修改。

最新版提交到gitee了:https://gitee.com/huzgd/ezdml_jdbc

java源码比较简单,只有5个java文件,以后有空时单独讲一下。

JDBC连接是基于HTTP的,因此建议也可以顺便看下HTTP的介绍。

HTTP

参见《EZDML连接数据库——HTTP连接扩展

ORACLE

参见《EZDML连接数据库——ORACLE和达梦

SQL Server

参见《EZDML连接数据库——SQL Server

MySQL

参见《EZDML连接数据库——MySQL

PostgreSQL

参见《EZDML连接数据库——PostgreSQL和人大金仓

SQLite

参见《EZDML连接数据库——SQLite

ODBC

参见《EZDML连接数据库——ODBC