EZDML 数据建模

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

0%

EZDML连接数据库——SQL Server

SQL Server

本文主要讲SQL Server。EZDML的所有平台版本安装包都自带了SQL Server的驱动,理论上啥也不需要折腾直接就能连SQL Server;不过实际上可能还是会有一些问题;另外在Windows下,你可以改用系统ODBC驱动来连接SQL Server,我们也演示一下具体如何操作。

这是我测试用的SQL Server数据库,实例名为SQLEXPRESS,数据库为htest:

SQL管理器

IP+端口连接

以EZDML for win64为例,SQL Server连接的数据源格式,我们可从下拉示例中看:

SQLServer数据源

全格式示例:

1
192.168.1.123:1433\MSSQLSERVER@master

可以看出,数据源格式为:服务IP地址:端口\实例名@数据库名

不过,使用IP+端口连接是有个前提的,就是要在SQL Server配置管理器中开启TCP/IP协议(这里也可以指定端口号,具体参考微软的官方文档):

开启TCP/IP协议

具体到我的测试库,则填成这样:

1
127.0.0.1:1433\SQLEXPRESS@htest

就可以登录成功了:

测试登录

点旁边的“配置”按钮,有个小提示:用户名为空则采用集成身份验证(默认情况下ODBC是灰的)

SQLServer连接

登录成功会显示列表:

测试登录成功

其中数据源的端口号默认为1433,可省略;实例名SQLEXPRESS也可以省略,因此填成这样:127.0.0.1@htest,也可以登录成功:

测试登录2

测试登录成功2

关于Schema模式

EZDML在导入数据库时可以随意选择Schema模式;但目前EZDML生成的建表SQL是不带模式名的,因此创建的表是在当前Schema模式下。

由于SQL Server不支持切换模式,因此EZDML生成数据库时就只能用当前用户的默认Schema模式;如果你需要生成到其它Schema模式,则你需要换对应默认模式的用户(没有对应用户的话你可能要创建一个)。

不建议使用超级管理员或Schema模式权限较多的用户登录SQL Server数据库,尽量采用单一Schema模式权限的专门用户登录。

使用ODBC驱动

默认情况下,EZDML会使用自带的驱动来连接SQL Server。具体来说,在Windows下,它会用FreeTDS的dblib.dll这个库,关于这个库可以参考这里:http://www.freetds.org/

不过,SQL Server毕竟是微软自己的产品,在Windows下的话,用微软自己的驱动显然更合适。我在用dblib生成数据库时会出现一些奇怪问题,比如生成的表中允许为空的字段会变成非空之类的。另外dblib必须要开启TCP/IP协议,如果用ODBC就可以不开了。

因此EZDML提供了ODBC连接SQL Server的选项。下面我们就来试一下,先在设置里勾选使用ODBC驱动(V3.58起不再需要设置):

勾选ODBC设置

勾选ODBC后(需要重启EZDML),我们还是一样能用IP端口连接的(嗯,EZDML会自动拼接连接串,ODBC当然也支持IP端口连接)。但这不是我们关注的点,我们看一下连接窗口中的配置提示,会发现有一点小小的变化,就是ODBC的选项可以使用了(V3.58起默认可用):

ODBC连接

前面还是一样的,但后面两个可以用ODBC的DSN或连接字符串了。

为了确保万无一失,我们不用连接字符串这种装X的东西,在这里我们选择在系统ODBC数据源里添加一个DSN配置,这个姿势大家是比较熟悉的。点浏览:

ODBC DSN选择

点配置打开ODBC数据源管理器(在开始菜单里搜索ODBC也能出来),添加一个新的DSN,选择SQL Server的驱动(正常你装过SQL Server就会有的,如果没有就用回dblib吧):

添加ODBC数据源

我这示例取名为sqlserverhuz,并输入服务名和实例名(如果想用下拉框选择不想手敲,则需要开启SQLBrowser服务):

创建数据源——服务名称

点“下一步”,指定用户身份:

创建数据源——连接

继续,选择数据库htest:

创建数据源——选择数据库

完成创建:

创建数据源——完成

测试通过:

创建数据源——测试

完成后就会有一个叫sqlserverhuz的DSN了:

DSN列表

目前为止,跟EZDML都没什么关系。接下来回到EZDML,进入导入数据库功能,打开连接窗口,在数据源中我们选择手工输入DSN名称:

1
DSN:sqlserverhuz

选择DSN

连接ODBC DSN

因为我们在DSN配置时已经指定用登录信息,因此这里用户名和密码是没用的了,随便输不输都不影响。直接确定就可以登录了:

成功登录DSN

可以看到,配置完ODBC的DSN后,连接SQL Server是非常简单了。

最终导入结果如下(注:旧版EZDML ODBC代码读取注释有问题请升级到最新):

导入结果

上述演示用的是EZDML for win64,事实上换成EZDML for win32基本没什么区别,根据我测试结果来看,SQL Server的ODBC驱动是同时支持64和32位的。

需要注意的是,使用ODBC驱动连接SQL Server,连接类型是SQLSERVER,跟后面要讲的连接类型ODBC是有一点区别的。这里EZDML假定你ODBC连的一定是SQL Server,它仍会用SQL Server的专用命令去获取元数据结构;而纯ODBC更多的是面向不确定的数据库(如Access、Excel),只能获取通用元数据,无法读取注释、数据类型名等细节,效果可能会差一些。

Linux版连接

正常来说,SQL Server用户都是用Windows的,不过也不排除有不正常的,所以Linux和MacOS咱们也简单过一下。

Linux版自带的SQL Server驱动为libsybdb.dylib,还是FreeTDS的,不知为何windows和linux下取的名称不一样。由于Linux版本众多,无法全兼顾,我只能拿手上CentOS7的来举个例子(嗯,其实我是先在CentOS6上试了不行,自带驱动版本不对,只好转回CentOS7):

Linux连接

貌似也没什么可说的,就是指定IP端口数据库,输入用户名密码,就可以登录了。当然,数据库端必须要开启TCP/IP协议端口。

导入结果如下:

Linux导入结果

MacOS版连接

MacOS版也是自带了SQL Server驱动(libsybdb.dylib,还是FreeTDS的),理论上直接指定IP端口数据库就可以连接了:

MacOS版连接

这是导入结果:

MacOS导入结果

通过JDBC连接SQLSERVER

如果你的系统环境复杂,没办法直接连上SQL Server,而且你对JAVA运行环境有一定的了解,则可以考虑用JDBC连接。

EZDML有一个HTTP_JDBC连接,不过它是采用通用方式处理,所有元数据读取均以标准数据库方式处理,无法针对SQLSERVER导入和生成个性内容,因此通过HTTP_JDBC获取元数据往往会有缺失或错误。

从V3.59版开始,EZDML的SQLSERVER连接支持通过JDBC驱动,在连接配置窗口中增加了JDBC连接字符串的配置:

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

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

JDBC连接的底层实现仍然是使用HTTP_JDBC,需要安装JAVA虚拟机,并将相关驱动JAR包放到EZDML/jdbc/lib目录下,运行时会自动启动HTTP_JDBC服务进行连接,并显示JAVA控制台输出窗口(如不喜欢看这个窗口,可在数据库连接设置里隐藏)。

参见《EZDML连接数据库——JDBC》。

MySQL

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

PostgreSQL

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

SQLite

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

ODBC

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

JDBC

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

HTTP

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

ORACLE

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