【仓颉三方库】 数据库驱动——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)
相关推荐
敲上瘾14 分钟前
MySQL数据类型
数据库·c++·mysql·数据库开发·数据库架构
想躺平的咸鱼干15 分钟前
SQL语句的优化
数据库·sql
小陶来咯1 小时前
【高级IO】多路转接之单线程Reactor
服务器·网络·数据库·c++
wei_shuo1 小时前
OB Cloud 云数据库V4.3:SQL +AI全新体验
数据库·人工智能·sql
潇湘秦2 小时前
Oracle非归档模式遇到文件损坏怎么办?
数据库·oracle
极小狐3 小时前
如何使用极狐GitLab 软件包仓库功能托管 maven?
java·运维·数据库·安全·c#·gitlab·maven
野犬寒鸦5 小时前
MySQL索引使用规则详解:从设计到优化的完整指南
java·数据库·后端·sql·mysql
时序数据说5 小时前
IoTDB磁盘I/O性能监控与优化指南
大数据·网络·数据库·时序数据库·iotdb
火云牌神6 小时前
在windows系统中安装图数据库NEO4J
数据库·windows·neo4j
吻等离子7 小时前
解决 MySQL 数据库无法远程连接的问题
数据库·mysql·adb