【仓颉三方库】 数据库驱动——odbc4cj

介绍

基于 odbc 实现 database 包。

特性

  • 🚀 特性1

    数据库驱动接口

  • 🚀 特性2

    数据源接口

  • 💪 特性3

    数据库连接接口

  • 🛠️ 特性4

    sql语句预执行接口

  • 🌍 特性5

    执行Insert、Update、Delete语句产生的结果接口

  • 💡 特性6

    执行Select/Query语句返回结果的列信息

  • 💡 特性7

    执行 Select 语句产生的结果接口

  • 💡 特性8

    数据库事务的核心行为

软件架构

源码目录

bash 复制代码
.
├─ doc
├─ README.md
├─ README.OpenSource
├─ src
└─ test
   ├─ HLT
   └─ LLT
  • doc 文档目录,用于存放设计、API接口等文档
  • src 源码目录
  • test 测试目录

接口说明

主要类和函数接口说明详见 API

使用说明

编译构建

1、安装

linux安装 unixODBC

learn.microsoft.com/zh-cn/sql/c...

window安装

learn.microsoft.com/zh-cn/sql/c...

2、克隆项目

bash 复制代码
git clone https://gitcode.com/Cangjie-TPC/odbc4cj.git

3、切换目录

bash 复制代码
cd odbc4cj

4、在当前目录新建 lib 文件夹

5、迁移lib

linux 环境下 将 libodbc.so复制到lib中。libodbc.so通常在 /usr/lib/x86_64-linux-gnu/ 目录下

window 环境下 将 libmyodbc8a.dll、libcrypto-1_1-x64.dll、libsasl.dll、libssl-1_1-x64.dll复制到lib中。将 cjpm.toml文件中的 odbc = {path = "./lib/"} 改成 myodbc8a = {path = "./lib/"}。libmyodbc8a.dll 下载mysql版本的odbc插件目录中,libcrypto-1_1-x64.dll、libsasl.dll、libssl-1_1-x64.dll在window系统目录中

6、编译项目

复制代码
cjpm build

DD一下: 欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。

erlang 复制代码
`欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。`
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

7、编译示例文件

示例文件在 /test/DOC/test_example1.cj ${path}修改成用户自己项目本地路径

linux 编译指令

bash 复制代码
cp ${path}/libs/libodbc.so ${path}/odbc4cj/target/release/odbc4cj   ---> 复制so到指定路径

cd target/release/odbc4cj   ---> 切换目录

cjc  --import-path ${path}/odbc4cj/target/release -L ${path}/odbc4cj/target/release/odbc4cj -l odbc -l odbc4cj ${path}/odbc4cj/test/DOC/test_example1.cj -O0 -Woff alll  ---> 编译 test/LLT 用例

windows 编译指令

bash 复制代码
cp ${path}/libs/libmyodbc8a.dll ${path}/odbc4cj/target/release/odbc4cj   ---> 复制dll到指定路径
cp ${path}/libs/libcrypto-1_1-x64.dll ${path}/odbc4cj/target/release/odbc4cj   ---> 复制dll到指定路径
cp ${path}/libs/libsasl.dll ${path}/odbc4cj/target/release/odbc4cj   ---> 复制dll到指定路径
cp ${path}/libs/libssl-1_1-x64.dll ${path}/odbc4cj/target/release/odbc4cj   ---> 复制dll到指定路径

cd target/release/odbc4cj   ---> 切换目录

cjc  --import-path ${path}/odbc4cj/target/release -L ${path}/odbc4cj/target/release/odbc4cj -l crypto-1_1-x64 -l myodbc8a -l sasl -l ssl-1_1-x64 -l odbc4cj ${path}/odbc4cj/test/DOC/test_example1.cj -O0 -Woff alll  ---> 编译 test/LLT 用例

8、运行执行文件

linux 运行

bash 复制代码
./main

windows 运行

bash 复制代码
./main.exe

功能示例

ini 复制代码
import std.database.sql.* 
import std.io.*
import std.time.*
import std.regex.*
import odbc4cj.*

main() {
    var driver = OdbcDriver()
    var database = driver.open("DATABASE=mysql;UID=root;PWD=123")
    var conn = database.connect()
    var prepareStatement = conn.prepareStatement("drop table if exists test")
    var rowCount = prepareStatement.update()
    prepareStatement = conn.prepareStatement("create table test(data int NOT NULL, datanull int)")
    rowCount = prepareStatement.update()
    prepareStatement = conn.prepareStatement("insert into test values(?,?)")
    rowCount = prepareStatement.update([SqlInteger(12345), SqlNullableInteger(None)])
    prepareStatement = conn.prepareStatement("select * from test")
    var queryResult = prepareStatement.query()
    var arr: Array<SqlDbType> = [SqlInteger(1), SqlNullableInteger(1)]
    queryResult.next(arr)
    match (arr[0]) {
        case v: SqlInteger => println(v.value)
        case _ => ()
    }
    match (arr[1]) {
        case v: SqlNullableInteger => println(v.value)
        case _ => ()
    }
}

执行结果如下:

css 复制代码
12345
None

约束与限制

  1. 不支持数据类型(SqlTimeTz、SqlTimestamp、SqlInterval),新增支持数据类型请参考 sqlTypeExtend.cj
  2. interface Driver 不支持 name、version、preferredPooling
  3. Datasource 不支持 setOption(key: String, value: String),请使用 setOption(key: Int32, value: Int64)
  4. interface Connection 不支持 getMetaData(),请使用 getInfo(infoType: UInt16, len: Int16)
  5. interface Statement 不支持 setOption(key: String, value: String),请使用 setOption(key: Int32, value: Int64)
  6. interface UpdateResult 不支持 lastInsertId
  7. interface Transaction 不支持 accessMode、deferrableMode、save(savePointName: String)、rollback(savepointName: String)、release(savePointName: String)
相关推荐
御控工业物联网10 分钟前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
simple丶1 小时前
【HarmonyOS】封装用户鉴权工具类
harmonyos·arkts·arkui
simple丶1 小时前
【HarmonyOS】基于Axios封装网络请求工具类
harmonyos·arkts·arkui
GJCTYU2 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
Code季风2 小时前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql
weixin_478689762 小时前
操作系统【2】【内存管理】【虚拟内存】【参考小林code】
数据库·nosql
万少2 小时前
2-自然壁纸实战教程-AGC 新建项目
前端·harmonyos
九皇叔叔3 小时前
【7】PostgreSQL 事务
数据库·postgresql
kk在加油3 小时前
Mysql锁机制与优化实践以及MVCC底层原理剖析
数据库·sql·mysql