介绍
基于 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
约束与限制
- 不支持数据类型(SqlTimeTz、SqlTimestamp、SqlInterval),新增支持数据类型请参考 sqlTypeExtend.cj
- interface Driver 不支持 name、version、preferredPooling
- Datasource 不支持 setOption(key: String, value: String),请使用 setOption(key: Int32, value: Int64)
- interface Connection 不支持 getMetaData(),请使用 getInfo(infoType: UInt16, len: Int16)
- interface Statement 不支持 setOption(key: String, value: String),请使用 setOption(key: Int32, value: Int64)
- interface UpdateResult 不支持 lastInsertId
- interface Transaction 不支持 accessMode、deferrableMode、save(savePointName: String)、rollback(savepointName: String)、release(savePointName: String)