# r2dbc-sqlite **Repository Path**: n__n/r2dbc-sqlite ## Basic Information - **Project Name**: r2dbc-sqlite - **Description**: sqlite-r2dbc驱动 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-14 - **Last Updated**: 2025-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 反应式关系数据库连接 SQLite 实现 --- [![](https://jitpack.io/v/com.gitee.n__n/r2dbc-sqlite.svg)](https://jitpack.io/#com.gitee.n__n/r2dbc-sqlite) 此项目包是 [R2DBC SPI](https://github.com/r2dbc/r2dbc-spi) 的 [SQLite](https://sqlite.org/) 实现. 此实现并非旨在直接使用,而是用作 [SpringDataR2DBC](https://spring.io/projects/spring-data-r2dbc) 等人性化客户端的后端实现. 该驱动实现了以下功能: - 文件系统或内存型数据库实例 - 显示事务 - 执行参数化的预编译语句 - 批量执行无参数化的语句 - 支持大部分数据类型的读写操作,除了LOB类型(像是BLOB,CLOB), BigInteger类型在建表时要特别注意需要使用varchar,TEXT等字符类型代替. | 警告 | 此驱动对于SQLite文件的读写以及SQL语句的执行部分使用SQLITE-JDBC实现. 在使用与构建版本中不相同的SQLite版本时r2dbc-sqlite不保证其兼容性. 因为使用了JDBC以及SQLite是一个文件型数据库,对其进行操作的各个部分都是阻塞的,比如文件访问,所以仅能保证在SQLite的上层中是非阻塞的. 尽管如此,r2dbc-sqlite 也是一个开销比较小的使用r2dbc的选择. | |----|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| ## Maven坐标 --- 发布包可以在[JitPack](https://jitpack.io/)上找到. ```xml jitpack.io https://jitpack.io com.gitee.n__n r2dbc-sqlite 1.0.0 ``` ## 入门 --- ### 环境要求 - JDK 21 或更高版本 - Spring Boot 3.4.4 或更高版本 - Spring Data R2DBC 3.4.4 或更高版本 ### 示例代码 以下是一个如何在Java中使用R2DBC Sqlite 的示例: **使用URL连接工厂连接内存型数据库** ```java ConnectionFactory connectionFactory = ConnectionFactories.get("r2dbc:sqlite:///:memory:"); Publisher connectionPublisher = connectionFactory.create(); ``` **使用URL连接工厂连接文件型数据库** ```java ConnectionFactory connectionFactory = ConnectionFactories.get("r2dbc:sqlite:///[my/relative/path]"); Publisher connectionPublisher = connectionFactory.create(); ``` **使用代码配置连接工厂** ```java ConnectionFactoryOptions options = builder() .option(DRIVER, "sqlite") .option(DATABASE, "test-database.sqlite") .build(); // 上方配置任选其一 ConnectionFactory connectionFactory = ConnectionFactories.get(options); Publisher connectionPublisher = connectionFactory.create(); // 另一个选择: 使用Project Reactor 创建一个Mono Mono connectionMono = Mono.from(connectionFactory.create()); ``` ## 支持的ConnectionFactory发现选项 | 选项 | 介绍 | |:---------|:-------------------------------------------------------------------------| | driver | 必须是 `sqlite` | | database | 要使用的数据库.
对于文件型数据库:可以是相对路径或绝对路径
对于内存型数据库是固定值"`:memory:`",引号内部包含冒号 | | url | `r2dbc:sqlite:[database file path]`,方括号部分可以填database选项值 | | ## 使用代码配置连接 ```java SqliteConnectionFactory connectionFactory = new SqliteConnectionFactory(SqliteConnectionConfiguration.builder() .database("foo.db") // database 和 url 二选一 .url("r2dbc:sqlite:foo.db") // url 优先级高 .build()); Mono connection = connectionFactory.create(); ``` ## 使用代码配置内存连接 ```java SqliteConnectionFactory connectionFactory = new SqliteConnectionFactory(SqliteConnectionConfiguration.builder() .database(":memory:") // database 和 url 二选一 .url("r2dbc:sqlite::memory:") // url 优先级高 .build()); Mono connection = connectionFactory.create(); ``` ## 设置查询参数 根据[SQLite 官方语义文档参数章节](https://sqlite.org/lang_expr.html#parameters)说明中所写,SQLite参数前缀有5种,这里使用美元符号‘$’. 以下SQL语句使用了参数: ```sql INSERT INTO person (id, first_name, last_name) VALUES ($1, $2, $3) ``` 在绑定参数是使用相同名称,以引用SQL中的参数位置: ``` connection .createStatement("INSERT INTO person (id, first_name, last_name) VALUES ($1, $2, $3)") .bind("$1", 1) .bind("$2", "Walter") .bind("$3", "White") .execute(); ``` ## 也支持使用索引绑定参数: - 索引 `bind(1,"Walter")`. 索引从零开始. - 可转换为Integer的对象 `bind(Integer对象,"Walter")`. 在参数索引被框架转换为对象时尤为有用. ## 一些有用的帮助 在使用R2DBC时,如果遇到问题,可以参考以下资源: - 查看 [R2DBC官方规范文档](https://r2dbc.io/spec/0.8.1.RELEASE/spec/html/) 或 [Javadoc](https://r2dbc.io/spec/0.8.1.RELEASE/api/). - 查看 [changelog](https://r2dbc.io/spec/0.8.1.RELEASE/CHANGELOG.txt) 了解新功能和值得注意的更改. - 在[https://gitee.com/n__n/r2dbc-sqlite/issues](https://gitee.com/n__n/r2dbc-sqlite/issues) 上提交BUG. ## 如何提交问题 r2dbc-sqlite使用Gitee作为问题跟踪系统来记录错误和功能请求。如果您想提出问题,请遵循以下建议: - 在记录错误之前,请搜索问题跟踪器,查看是否有人已经报告了问题。 - 如果问题不存在,请创建一个新问题。 - 请在问题报告中提供尽可能多的信息,我们想知道您使用的R2DBC sqlite版本和JVM版本。 - 如果你需要粘贴代码或包含堆栈跟踪,请在文本前后使用Markdown转义符。 - 如果可能的话,尝试创建一个复制该问题的测试用例或项目。为代码或包含代码的压缩文件附加链接。 ## 从源码构建 R2DBC SQLite 二进制包在JitPack.io上发布. 如果您想从源码构建R2DBC SQLite,可以按照以下步骤操作: - 克隆项目仓库到本地 - 使用Maven和Jdk21构建项目 ## 开源许可证 本项目使用[Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)