暂无图片
暂无图片
8
暂无图片
暂无图片
暂无图片

Gbase应用开发实践入门附代码

原创 大数据模型 2023-04-26
2194

介绍

南大通用旗下有多个数据产品,产品种类丰富,满足所有的数据业务场景。GBase是一个自主研发的商业闭源软件品牌,兼具OLTP和OLAP特性,南大通用一直紧跟潮流,跟上先进技术进行消化理解推陈出新,Gbase 8C就是其中一个代表作品。但是南大通用它没有选择把自己的产品开源,在技术布道上受众较少。

南大通用产品线如下

  • 分析型数据管理系统GBase 8a

  • 交易型数据管理系统GBase 8s

  • 极速内存数据库集群管理系统GBase XDM

  • 目录服务系统GBase 8d

  • 统一数据平台GBase UP

  • 多模多态数据库GBase 8c

本文主要介绍GBase 8a和GBase 8s的开发实践入门,8a和8s是南大通用的拳头产品,通过环境搭建到实践的代码实践应用,主要介绍了基于GBase的JAVA、javascript、python接入应用开发,除此之外GBase也支持go和C++的开发,但是JAVA、javascript、python更偏向应用。

下面的代码都已经经过验证测试,在百度云上就可以下载。

安装

安装环境前提服务器必须首先安装docker

GBase 8a

docker安装体验8a,只需要5步

第一步拉取镜像 docker pull shihd/gbase8a:1.0 第二步运行镜像 docker run -it --name gbase8a --hostname=gbase8a --privileged=true -p5258:5258 shihd/gbase8a:1.0 第三步跳入容器 docker exec -it gbase8a /bin/bash 第四步,登录gbase,输入密码root, gbase -uroot –p 第五步创建数据库test8a gbase> create database test8a; 数据库连接信息 jdbc url: jdbc:gbase://xxxx:5258/test8a?user=root&password=root ip: xxxx port: 5258 database: test8a user: root password: root

GBase 8s

GBase 8s安装体验只需要2步

第一步拉取镜像 docker pull liaosnet/gbase8s:3.3.0_2_amd64 第二步运行镜像 docker run -itd -p 19088:9088 liaosnet/gbase8s:3.3.0_2_amd64 数据库连接信息 driver: com.gbasedbt.jdbc.Driver jdbc url:jdbc:gbasedbtsqli://host:19088/testdb:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;IFX_LOCK_MODE_WAIT=30; username:gbasedbt password:GBase123

代码

选择主流语言java、nodejs、python对GBase 8a和GBase 8s操作

GBase 8a

JAVA

建议安装jdk1.8版本以上,另外需要gbase-connector-java-8.3.81.53-build55.2.1-bin.jar包,

IDEA引入8a的依赖,如下图

image.png

CRUD的示例代码

package henley; import com.gbase.jdbc.Connection; import com.gbase.jdbc.Statement; import com.gbase.jdbc.StatementImpl; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; /** * Created @author angryart 亨利 **/ public class GbaseEntry { public static void main(String[] args) throws Exception { String URL = "jdbc:gbase://xxxx:5258/test8a?user=root&password=root"; Class.forName("com.gbase.jdbc.Driver"); Connection con = (Connection) DriverManager.getConnection(URL); Statement stat = (Statement) con.createStatement(); try { String dropsql = "drop table if exists t8a"; String createsql = "create table t8a(id int, name varchar(50))"; String insertsql = "insert into t8a (id,name) values(1,'test1')"; String selectsql = "select * from t8a"; String updatesql = "update t8a set name='test1_update' where id = 1 "; String deletesql = "delete t8a where id = 1 "; stat.execute(dropsql); stat.execute(createsql); stat.execute(insertsql); ResultSet rs = stat.executeQuery(selectsql); while (rs.next()) { System.out.println("t8a表 列值ID是==>" + rs.getString(1)); System.out.println("t8a表 列值NAME是==>" + rs.getString(2)); } stat.execute(updatesql); rs = stat.executeQuery(selectsql); while (rs.next()) { System.out.println("修改后的t8a表 列值ID是==>" + rs.getString(1)); System.out.println("修改后的t8a表 列值NAME是==>" + rs.getString(2)); } stat.execute(deletesql); } catch (SQLException ex) { ex.printStackTrace(); System.out.println(ex.getErrorCode()); System.out.println(ex.getMessage()); // throw ex; } } }
nodejs

安装nodejs环境,引入mysql包

笔者用的nodejs是v10.15.3,环境从以下的地方下载

https://nodejs.org/en/download

运行以下命令安装mysql相关包,就可以在代码层引用。

npm install mysql

示例代码如下

var gb = require('mysql'); // 数据库配置 var config = { user: 'root', database: 'test8a', password: 'root', host: 'xxxx', port: 5258, } // 创建连接池 var connection = gb.createConnection(config); connection.connect(); var sql = "select * from t8a"; connection.query(sql, (err, results) => { if (err) return console.log(err.message) console.log(results) } ); var insertsql = 'INSERT INTO t8a(id,name) VALUES(?,?)'; var addSqlParams = [1,'heley_yang']; connection.query(insertsql, addSqlParams, function (err, result) { if(err){ console.log('[INSERT ERROR] - ',err.message); return; } console.log('--------------------------INSERT----------------------------'); console.log('INSERT ID:',result); }) var updateSql = 'UPDATE t8a SET name = ? WHERE id = ?'; var updateSqlParams = ['nodejs_update', '1']; connection.query(updateSql, updateSqlParams, function (err, result) { if(err){ console.log('[UPDATE ERROR] - ',err.message); return; } console.log('--------------------------UPDATE----------------------------'); console.log('UPDATE affectedRows',result.affectedRows); }) var deleteSql = 'DELETE FROM t8a where id=1'; connection.query(deleteSql,function (err, result) { if(err){ console.log('[DELETE ERROR] - ',err.message); return; } console.log('--------------------------DELETE----------------------------'); console.log('DELETE affectedRows',result.affectedRows); }); connection.end();
python

安装python3.X版本以上,并引入pymysql包 pip install pymysql

import pymysql class DataBaseHandle(object): ''' 定义一个 MySQL 操作类''' def __init__(self,host,username,password,database,port): '''初始化数据库信息并创建数据库连接''' # 下面的赋值其实可以省略,connect 时 直接使用形参即可 self.host = host self.username = username self.password = password self.database = database self.port = port self.db = pymysql.connect(self.host,self.username,self.password,self.database,self.port,charset='utf8') def insertDB(self,sql,value): ''' 插入数据库操作 ''' self.cursor = self.db.cursor() try: # 执行sql # self.cursor.execute(sql) tt = self.cursor.execute(sql,value) # 返回 插入数据 条数 可以根据 返回值 判定处理结果 print(tt) self.db.commit() except: # 发生错误时回滚 print("rollback") self.db.rollback() finally: self.cursor.close() def deleteDB(self,sql): ''' 操作数据库数据删除 ''' self.cursor = self.db.cursor() try: # 执行sql self.cursor.execute(sql) # tt = self.cursor.execute(sql) # 返回 删除数据 条数 可以根据 返回值 判定处理结果 # print(tt) self.db.commit() except: # 发生错误时回滚 self.db.rollback() finally: self.cursor.close() def updateDb(self,sql): ''' 更新数据库操作 ''' self.cursor = self.db.cursor() try: # 执行sql self.cursor.execute(sql) # tt = self.cursor.execute(sql) # 返回 更新数据 条数 可以根据 返回值 判定处理结果 # print(tt) self.db.commit() except: # 发生错误时回滚 self.db.rollback() finally: self.cursor.close() def selectDb(self,sql): ''' 数据库查询 ''' self.cursor = self.db.cursor() try: self.cursor.execute(sql) # 返回 查询数据 条数 可以根据 返回值 判定处理结果 data = self.cursor.fetchall() # 返回所有记录列表 print(data) # 结果遍历 for row in data: sid = row[0] name = row[1] # 遍历打印结果 print('sid = %s, name = %s'%(sid,name)) except: print('Error: unable to fecth data') finally: self.cursor.close() def closeDb(self): ''' 数据库连接关闭 ''' self.db.close() if __name__ == '__main__': insertsql='insert into t8a (id,name) values(%s,%s)' insertValue=(1,'henley') DbHandle = DataBaseHandle('xxxx','root','root','test8a',5258) DbHandle.insertDB(insertsql,insertValue) DbHandle.selectDb('select * from t8a') DbHandle.updateDb('update t8a set name = "%s" where id = "%d"' %('YeKai',1)) DbHandle.selectDb('select * from t8a') DbHandle.deleteDB('delete from t8a where sid > "%d"' %(2)) DbHandle.selectDb('select * from t8a') DbHandle.closeDb()

除此之外,南大通用也有自己的python驱动,名称是gbase-connector-python-3.0.1_forpy3.6.tar.zip

笔者基于 3.6.5平台,运行以下命令就可以进行安装

C:\gbase\2023年第一届\gbase-connector-python-3.0.1>python  setup.py  install

测试代码,使用官方的python可以有更友好的功能。

#!/usr/bin/python # -*- coding: UTF-8 -*- """ @Time Date : 2023/5/22 11:19 @Author : angryart @File : gbasetest @PROJECT_NAME : learnPython """ from GBaseConnector import connect,GBaseError config = {'host':'xx.xx.xx.xx','port':5258,'database':'test8a', 'user':'root','passwd':'root'} try: conn = connect() conn.connect(**config) cur = conn.cursor() cur.execute("select * from t8a") rows = cur.fetchall() for row in rows: print(row) except GBaseError.DatabaseError as e: print(e) finally: conn.close()

GBase 8s

建议jdk1.8以上,引入GBase 8sv8.7_2.0.1a2_1 JDBC.jar

8s和8a的区别主要是jdbc url连接符不同,大体上他们是一样的。

package test.henley; import java.sql.*; /** * Created @author 亨利先生 by @date **/ public class Gbase8sEntry { public static void main(String[] args) throws Exception { String URL = "jdbc:gbasedbt-sqli://xxxx:19088/testdb:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;IFX_LOCK_MODE_WAIT=30;"; String username = "gbasedbt"; String password = "GBase123"; Class.forName("com.gbasedbt.jdbc.Driver"); Connection con = DriverManager.getConnection(URL,username,password); Statement stat = con.createStatement(); try { String dropsql = "drop table if exists t8s"; String createsql = "create table t8s(id int, name varchar(50))"; String insertsql = "insert into t8s (id,name) values(1,'test1')"; String selectsql = "select * from t8s"; String updatesql = "update t8s set name='test1_update' where id = 1 "; String deletesql = "delete t8s where id = 1 "; stat.execute(dropsql); stat.execute(createsql); stat.execute(insertsql); ResultSet rs = stat.executeQuery(selectsql); while (rs.next()) { System.out.println("gbase 8s表 列值ID是==>" + rs.getString(1)); System.out.println("gbase 8s表 列值NAME是==>" + rs.getString(2)); } stat.execute(updatesql); rs = stat.executeQuery(selectsql); while (rs.next()) { System.out.println("修改后的Gbase 8s表 列值ID是==>" + rs.getString(1)); System.out.println("修改后的Gbase 8s表 列值NAME是==>" + rs.getString(2)); } stat.execute(deletesql); } catch (SQLException ex) { ex.printStackTrace(); System.out.println(ex.getErrorCode()); System.out.println(ex.getMessage()); } } }

总结

在应用开发的体验角度来看,Gbase 8a和Gbase 8s还是平易近人的,不仅有自己的标准的jdbc客户端驱动,而且生态上也兼容主流编程接口规范,安装简单,操作方便,在增删查改的开发上没有违和不适,由于没有开源,一些美好的特性不为外人知道,希望Gbase 多多技术布道,在国产数据库的道路上发展会更好。

介质及代码下载

相关代码和jdbc驱动包见百度云

链接:https://pan.baidu.com/s/1-GWGDB8fXAO-23L1Cco9Qw
提取码:g4ya

最后修改时间:2023-05-22 11:55:54
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论