JDBC
JDBC是万金油终极解决方案。如果其它驱动连不上,那JDBC一定是可以的。
当然,JDBC配置起来稍麻烦,不熟悉JAVA的同学会稍为有点头大;非程序员建议在程序员的陪同下进行;不过JAVA这么流行,再看下本文填下坑,相信基本上都能跑起来。
在连接数据库时,连接类型上选择“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访问数据库:
HTTP连接配置
从EZDML v3.59起,HTTP_JDBC支持指定Http URL地址,也支持直接指定JDBC连接属性(主要是jdbc.url)。
HTTP的方式比较麻烦,但也比较灵活,它可以不在本机部署,也可以不用JDBC,甚至可以不用JAVA实现,只要符合相关协议即可。不过这里还是以JDBC为例进行说明。
点连接窗口上的“配置”按钮,出来配置窗口,可直接指定HTTP的URL:
点“启动JDBC服务”,弹出JDBC配置窗口:
各项配置说明如下:
1 | @echo off //这个是windows批处理关闭命令回显的,不用管 |
简化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包:
如果你机上没有合适的java环境,也会报错,请从网上下载安装java环境(建议安装jdk8):
运行HTTP_JDBC服务
上述配置界面上点”运行“则保存配置并启动HTTP_JDBC服务,启动后会尝试按配置信息连接数据库,不过我机上出师不利报了个错:
嗯,大概是说连接安全设置有问题,需要加个参数,加吧:
加完再跑,结果还是有问题:
考虑到我机上的是mysql8,而EZDML自带的mysql jdbc驱动是5,我猜可能是版本太旧,上网搞个新的吧,并把旧的删除:
还是有问题,前面那个class类名的提示倒不要紧,但后面公钥的错误就过不了了:
看来它一定要加密,把useSSL改成true吧:
再运行,终于成功了:
连接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 |
我们可以打开这个目录来看看:
显然它是运行了ezjdbc.bat这个批处理:
这个批处理干了以下几件事:
- 设置工作目录到文件所在位置(D:\EZDML\jdbc)
- 运行conf.bat设置各环境变量(嗯,就是我们在连接配置里设置的内容)
- 将lib子目录下的所有jar添加到CLASSPATH环境变量
- 显示配置好的信息
- 调用java运行ezjdbc.jar里的com.ezdml.httpsv.EzHttpServer类,并将所有设置好的参数、环境变量传过去
我们试着双击运行ezjdbc.bat,果然弹出了熟悉的HTTP_JDBC命令行窗口:
没错,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
ORACLE
SQL Server
MySQL
PostgreSQL
参见《EZDML连接数据库——PostgreSQL和人大金仓》
SQLite
ODBC
参见《EZDML连接数据库——ODBC》