由于前方项目需求,之前参与的工程中可以导入外部数据,进行数据分析,目前已经支持的数据库包括oracle、Hive、Postgre,周一组会经过讨论,需要新增Mysql数据库,下面就来梳理一下这两天所做的事情。
既然要测试外部数据库,肯定需要在linux上安装Mysql了,我的Linux是RedHat,首先在上面安装Mysql数据库。
首先打开mysql官网:https://dev.mysql.com/downloads/mysql/5.7.html?os=src
下载指定版本的数据库包
1.如果之前已经安装过别的版本的mysql,可以先行卸载以前安装过的mysql文件
rpm -qa | grep -i mysql
rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64
2.然后,把我们刚才下载的数据包上传并解压文件
上传我们用的是xshell的ftp文件传输,然后进行解压
tar xvf mysql-5.7.25-1.el6.x86_64.rpm-bundle.tar
3.安装对应的包(必须按照顺序)
rpm -ivh mysql-community-common-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el6.x86_64.rpm
4.启动mysql
service mysqld start
5.获取mysql初始化密码
grep 'temporary password' /var/log/mysqld.log
6.修改mysql密码
mysqladmin -u root -p password
7.数据库查看编码
mysql>SHOW VARIABLES LIKE '%char%';
8.修改/etc/my.cnf (默认在这个目录)
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
9.重启mysql
service mysqld restart
修改成功!
最后,赋予任何主机访问数据的权限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> Flush privileges;
调用函数TestConn,Bool型,使用MysqlConnection实例化一个新对象进行测试连接,测试连接超时设置为8000毫秒。
完成函数Query,使用 MysqlCommand进行操作,该对象有影响行数的属性,可以用来判断是否执行成功。使用MysqlDataReader储存返回的结果。因为有大文件的存在,故不设置连接超时。
重写接口函数GetUserSQL
继承函数GetTables,重写接口函数GetTablesSQL
继承函数GetTableContentString和GetTableContent,重写接口函数GetTableContentSQl函数。
继承函数GetTableColumnNames,重写接口函数GetColNameByTableSQL。
继承函数FillDGVWithTbSchema,重写接口函数GetColNameByTableSQL。
继承函数FillDGVWithTbContent,重写接口函数GetTableContentSQL。
重写ExecuteSQL函数。使用while循环切换行,for循环切换列来读取query返回的datareader中的数据,手动添加换行符并加入到StringBuilder中,每一行读取完成后都使用writeline写入数据流的缓冲区中一次,在最后一行数据写入缓冲区后调用close方法清除缓冲区并一次性将所有数据写入文件中。 保存文件地址为结果挂件的FilePath属性。
在左侧面板添加数据库连接时调用GenLinkButton函数。通过修改LinkButton的属性来使用mysql的图标。
继承函数FillDGVWithSQL,调用Query函数进行SQL语句执行。
直接沿用原有SQL语句,无需修改
直接读取【算子计算结果生成功能】中生成的运行结果文件,无需再次查询。
涉及私密,就不贴出来了,有需求的小伙伴可以一起交流。
由于之前不怎么熟悉数据库导入的一些步骤,比如需要添加MySql.Data.dll连接数据库,还有就是SQL语句对information_schema 数据库的调用,才能实现对表、列、数据库的统一调用。