0 Star 1 Fork 0

后海/cjdbc-mysql

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
12个月前
12个月前
12个月前
Loading...
README
MIT

cjdbc-mysql

介绍

通过仓颉数据标准接口实现mysql驱动程序的纯仓颉实现

特性

  • 🚀 连接管理

  • 🚀 事务管理

  • 🚀 数据类型映射

  • 🚀 异常处理

  • 💪 数据库元数据

  • 🛠️ 预处理语句

  • 🌍 批处理

  • 💡 结果集处理

架构

架构图

源码目录

├─doc
├─src
│    ├─cjdbc
│    ├─conf
│    ├─exceptions
│    ├─expansion
│    ├─log
│    ├─message
│    ├─protocol
│    ├─socket
│    └─util
└─test

  • doc 存放库的设计文档、使用文档、LLT 用例覆盖报告
  • src 是库源码目录
  • test 存放测试文件

示例

详细示例查看 test/main.cj

使用库标准接口

1.导入驱动
import mysql.CJMySqlDriver 
2.注册驱动
    2.1 使用DriverUtil调用驱动注册 
        from mysql import com.qy.cj.DriverUtil
        DriverUtil.register(name)
    2.2 使用DriverManager调用驱动注册
        let driver = CJMySqlDriver()
        DriverManager.register("mysql", driver)
    2.3 直接使用驱动类
        let drv =  CJMySqlDriver()
3.打开数据源
    let opts = [
        (SqlOption.Username, "root"),
        (SqlOption.Password, "....")
    ]
    var ds = drv.open(
        "cjdbc:mysql://127.0.0.1:3306/dbtest",
        opts
    )
4.获取连接
    let conn = ds.connect()
5.执行sql
    let stmt = conn.prepareStatement("select * from test")
    let u = stmt.query()
6.获取结果
    var id: SqlInteger = SqlInteger(-1)
    var name: SqlVarchar = SqlVarchar("")
    //必须严格遵守查询字段的顺序和个数
    while (u.next(name, id)) {
        println("id:${id.value} name:${name.value}  ")
    }
7.关闭连接
    conn.close()

使用驱动扩展的接口

扩展接口查看 doc/doc.md

//导入依赖
import mysql.*


    //使用DriverUtil类的getConnection方法获取连接
    try (conn = DriverUtil.getConnection("cjdbc:mysql://127.0.0.1:3072/dbtest", "root", "....")) {
        let stmt = conn.createStatement()

        println(stmt.execute("insert into test (id,name) values (1,'test')"))

        let res = stmt.executeQuery("select * from test")

        while (res.next()) {
            println("id:${res.getInterger("id")} name:${res.getString("name")}")
            println("id:${res.getInterger(1)} name:${res.getString(2)}")
        }

        conn.close()
    } catch (e: Exception) {
        println(e)
    }

已完成(可能并不完善)

  1. 驱动注册
  2. 连接mysql服务器
  3. caching_sha2_password认证和mysql_native_password认证
  4. mysql通信协议的数据包解析和接收
  5. mysql通信协议的数据包封装和发送
  6. update操作(insert,update,delete)
  7. query操作(select)
  8. 满足基本的sql语法
  9. 多数据集查询
  10. 事务
  11. 字符集编码和解码(需charset库和mysql都支持)
  12. ssl加密连接

未完成

  1. 批量操作
  2. 读写分离
  3. 读取配置文件
  4. 元数据查询
  5. 错误处理(目前只保证驱动运行,抛出错误,没有处理)

问题

  1. mysql5.7使用插入语句插入中文数据时,数据库中的数据为乱码,但是查询时数据正常,byte数据也一致,原因未知,初步判定为数据库字符集编码问题,但是目前没有找到解决方案,应该缺少一些参数

参与贡献

@Lin_Qing_Ying

空文件

简介

仓颉语言的mysql数据库驱动 展开 收起
README
MIT
取消

发行版

暂无发行版

贡献者 (2)

全部

近期动态

12个月前推送了新的 tls 分支
12个月前删除了 v1.0.2-by-Cangjie0.39.7 标签
12个月前删除了 v1.0.3by-Cangjie0.45.2 标签
12个月前删除了 tls 分支
12个月前删除了 develop 分支
加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/Lin_Qing_Ying/cjdbc-mysql.git
git@gitee.com:Lin_Qing_Ying/cjdbc-mysql.git
Lin_Qing_Ying
cjdbc-mysql
cjdbc-mysql
tls

搜索帮助