# taibai-jdbc **Repository Path**: coraldane/taibai-jdbc ## Basic Information - **Project Name**: taibai-jdbc - **Description**: 这是一个JDBC的实现,用于Taibai这个高性能数据库 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-18 - **Last Updated**: 2026-01-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Taibai JDBC Driver JDBC驱动实现,用于连接 [Taibai](https://gitlab.tarzip.com/newera/taibai) 高性能OLAP数据库。 ## 特性 - 完整的JDBC 4.2 API支持 - 基于Taibai Wire协议的二进制通信 - 支持PreparedStatement参数绑定 - 事务支持(BEGIN/COMMIT/ROLLBACK) - ResultSetMetaData和DatabaseMetaData - 批量操作支持 - **连接池** (TaibaiDataSource) - **SSL/TLS安全连接** - **高性能批量插入** (TaibaiBulkInsert) - **完善的错误码和SQLState映射** ## 快速开始 ### Maven依赖 ```xml com.taibai taibai-jdbc 1.0.0-SNAPSHOT ``` ### 连接示例 ```java import java.sql.*; public class Example { public static void main(String[] args) throws SQLException { // JDBC URL格式: jdbc:taibai://host:port/database String url = "jdbc:taibai://localhost:5151/default"; try (Connection conn = DriverManager.getConnection(url, "default", "")) { // 执行查询 try (Statement stmt = conn.createStatement()) { ResultSet rs = stmt.executeQuery("SELECT * FROM my_table LIMIT 10"); while (rs.next()) { System.out.println(rs.getString(1)); } } // 使用PreparedStatement try (PreparedStatement pstmt = conn.prepareStatement( "SELECT * FROM my_table WHERE id = ?")) { pstmt.setInt(1, 100); ResultSet rs = pstmt.executeQuery(); // ... } } } } ``` ### 连接属性 | 属性 | 默认值 | 说明 | |------|--------|------| | `user` | `default` | 用户名 | | `password` | 空 | 密码 | | `connectTimeout` | `10000` | 连接超时(毫秒) | | `readTimeout` | `30000` | 读取超时(毫秒) | ## 构建 ```bash # 编译 mvn clean compile # 打包 mvn clean package # 跳过测试打包 mvn clean package -DskipTests ``` ## 项目结构 ``` taibai-jdbc/ ├── pom.xml ├── src/main/java/com/taibai/jdbc/ │ ├── TaibaiDriver.java # JDBC Driver入口 │ ├── TaibaiConnection.java # Connection实现 │ ├── TaibaiStatement.java # Statement实现 │ ├── TaibaiPreparedStatement.java # PreparedStatement实现 │ ├── TaibaiResultSet.java # ResultSet实现 │ ├── TaibaiResultSetMetaData.java # ResultSetMetaData实现 │ ├── TaibaiDatabaseMetaData.java # DatabaseMetaData实现 │ └── protocol/ # Wire协议层 │ ├── WireProtocol.java # 协议常量 │ ├── DataType.java # 数据类型映射 │ ├── MessageHeader.java # 消息头 │ ├── MessageEncoder.java # 消息编码 │ ├── MessageDecoder.java # 消息解码 │ ├── TaibaiSocket.java # Socket通信 │ └── ProtocolException.java # 协议异常 └── src/main/resources/META-INF/services/ └── java.sql.Driver # SPI注册 ``` ## Wire协议 驱动使用Taibai的二进制Wire协议进行通信: - **端口**: 5151 (默认) - **协议魔数**: `0x54414942` ("TAIB") - **消息格式**: Header(14字节) + Payload ### 支持的数据类型 | Taibai类型 | JDBC类型 | Java类型 | |-----------|----------|----------| | BOOLEAN | BOOLEAN | Boolean | | INT32 | INTEGER | Integer | | INT64 | BIGINT | Long | | FLOAT32 | REAL | Float | | FLOAT64 | DOUBLE | Double | | STRING | VARCHAR | String | | TIMESTAMP | TIMESTAMP | Timestamp | | DECIMAL | DECIMAL | BigDecimal | ## 高级功能 ### 连接池 ```java import com.taibai.jdbc.pool.TaibaiDataSource; TaibaiDataSource ds = new TaibaiDataSource(); ds.setUrl("jdbc:taibai://localhost:5151/default"); ds.setUser("default"); ds.setMinPoolSize(5); ds.setMaxPoolSize(20); try (Connection conn = ds.getConnection()) { // 使用连接... } ds.close(); // 关闭连接池 ``` ### SSL连接 ```java String url = "jdbc:taibai://localhost:5151/default?ssl=require"; // 或 String url = "jdbc:taibai://localhost:5151/default?sslmode=verify-full&trustStore=/path/to/truststore.jks"; ``` ### 批量插入 ```java import com.taibai.jdbc.TaibaiBulkInsert; import com.taibai.jdbc.protocol.DataType; try (TaibaiBulkInsert bulk = new TaibaiBulkInsert(connection, "my_table")) { bulk.addColumn("id", DataType.INT64); bulk.addColumn("name", DataType.STRING); bulk.addColumn("value", DataType.FLOAT64); for (int i = 0; i < 1000000; i++) { bulk.addRow(i, "name" + i, i * 1.5); } long inserted = bulk.execute(); System.out.println("Inserted: " + inserted); } ``` ## 错误处理 驱动提供标准SQLSTATE错误码映射: | 错误类型 | SQLSTATE | 说明 | |---------|----------|------| | 连接失败 | 08001 | 无法建立连接 | | 连接超时 | 08006 | 连接超时 | | 语法错误 | 42601 | SQL语法错误 | | 表不存在 | 42P01 | 表未定义 | | 认证失败 | 28P01 | 密码无效 | | 死锁 | 40P01 | 检测到死锁 | ## License MIT