ITADN
clojure/java.jdbc
clojure/java.jdbc · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

clojure.java.jdbc

一个用于基于 JDBC 访问数据库的低层 Clojure 封装。该项目状态为“非活跃”。它实际上已被 seancorfield/next.jdbc 取代。

如需查看兼容的高级 DSL 和迁移库,请参阅文档

曾用名 clojure.contrib.sql

该库已成熟且稳定。它被广泛使用,并在许多书籍和教程中有所介绍。今后仅会进行关键错误修复(例如安全相关)。基于我使用和维护该库的经验,我创建了一个更快、更现代的 JDBC 封装,名为 next.jdbc。我将其视为 clojure.java.jdbc 的“下一代”产品,但它暴露了不同的 API——我认为这是一个更好的 API。

Documentation

Support

Releases and Dependency Information

最新稳定版本:0.7.12 -- 需要 Clojure 1.7 或更高版本!

CLI/deps.edn 依赖信息:

org.clojure/java.jdbc {:mvn/version "0.7.12"}

Leiningen 依赖信息:

[org.clojure/java.jdbc "0.7.12"]

Maven 依赖信息:

<dependency>
  <groupId>org.clojure</groupId>
  <artifactId>java.jdbc</artifactId>
  <version>0.7.12</version>
</dependency>

注意:Clojure 的早期版本由 clojure.java.jdbc 的旧版本支持:例如,版本 0.6.1 支持 Clojure 1.4 及更高版本。

您还需要添加计划使用的 JDBC 驱动程序的依赖项。以下是 clojure.java.jdbc 已知使用的常见数据库驱动程序的链接(指向 Maven Central):

注意:不同版本的数据库驱动程序具有不同的 Java/JVM 版本要求。特别是,Apache Derby 的近期版本至少需要 Java 8,而 H2 的近期版本至少需要 Java 7。Clojure 的持续集成系统使用旧版本,以便测试可以在 Java 6 上运行(参见 pom.xml);本地测试使用 Java 8 上的较新版本。

使用示例

(require '[clojure.java.jdbc :as j])

;; there are many ways to write a db-spec but the easiest way is to
;; use :dbtype and then provide the :dbname and any of :user, :password,
;; :host, :port, and other options as needed:
(def mysql-db {:dbtype "mysql"
               :dbname "clojure_test"
               :user "clojure_test"
               :password "clojure_test"})

(def pg-db {:dbtype "postgresql"
            :dbname "mypgdatabase"
            :host "mydb.server.com"
            :user "myuser"
            :password "secret"
            :ssl true
            :sslfactory "org.postgresql.ssl.NonValidatingFactory"})

;; if the dbtype is not known to clojure.java.jdbc, or you want to override the
;; default choice of JDBC driver class name, you can provide :classname and the
;; name of the class to use:

(def redshift42 {:dbtype "redshift"
                 :dbname "myredstore"
                 :classname "com.amazon.redshift.jdbc42.Driver"
                 ...})

;; you can also specify a full connection string if you'd prefer:
(def pg-uri
  {:connection-uri (str "postgresql://myuser:secret@mydb.server.com:5432/mypgdatabase"
                        "?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory")})

(j/insert-multi! mysql-db :fruit
  [{:name "Apple" :appearance "rosy" :cost 24}
   {:name "Orange" :appearance "round" :cost 49}])
;; ({:generated_key 1} {:generated_key 2})

(j/query mysql-db
  ["select * from fruit where appearance = ?" "rosy"]
  {:row-fn :cost})
;; (24)

更多详情请参见 API 参考文档

开发者信息

  • GitHub 项目

  • Bug 跟踪器

  • 持续集成

  • 测试:

    • 目前默认情况下,测试仅针对 Derby 和 HSQLDB 这两个进程内数据库运行。
  • 若要针对 PostgreSQL 进行测试,请先创建用户和数据库:

$ sudo -u postgres createuser clojure_test -P clojure_test $ sudo -u postgres createdb clojure_test -O clojure_test

  • 或者类似地使用 MySQL:

      $ mysql -u root
      mysql> create database clojure_test;
      mysql> grant all on clojure_test.* to clojure_test identified by "clojure_test";
    
  • 然后使用 TEST_DBS 环境变量运行测试:

      $ TEST_DBS="mysql postgres" mvn test
    
  • 另请参阅使用 clj CLI 和 deps.edn 进行多版本测试的 run-tests.sh shell 脚本!

Change Log

  • 未发布的更改

    • 更新到最新的 parent pom 和 Clojure 1.11.4 作为依赖
    • 更新大多数测试依赖(并更新部分测试以匹配)。
    • 移除对 Clojure 1.7 和 1.8 的支持。针对 1.9、1.10、1.11 和 1.12 进行测试。
  • 2021-02-01 发布 0.7.12

    • 使协议 ISQLValueISQLParameterIResultSetReadColumn 可通过元数据扩展。
  • 2019-12-24 发布 0.7.11

    • 处理事务回滚失败的边缘情况 JDBC-179
  • 2019-08-24 发布 0.7.10

    • 使用 US-locale 的 lower-case 函数以避免某些区域设置(例如土耳其语)中的问题。HoneySQL 和 next.jdbc 最近也修复了类似的问题。
    • 清理作为属性传递给 JDBC 连接管理器的 db-spec 选项 JDBC-178
    • 放宽对 create-table-ddl 列规范的限制,允许使用数字(以及关键字和字符串)JDBC-177
  • 2019-02-21 发布 0.7.9

    • 修复当数据库不支持生成键时多插入的行为 JDBC-176.
    • 添加了对 datafy/nav(在 clojure.java.jdbc.datafy 命名空间中)的 高度实验性 支持。这包括一种基于约定的外键方法,并借助 :schema 选项提供一些辅助。此功能可能会发生变化,主要作为信息提供,作为 Clojure 1.10 中新功能的示例。这包括对 JDBC-175 中约定的修复。
    • 添加关于将批量操作重写为 insert-multi! 的说明,适用于某些驱动程序 JDBC-174.
    • 支持 Oracle SID 风格的 URL(dbtype 可以是 oracle:sid,映射到 oracle:thin,并使用 : 作为 dbname 值之前的分隔符) JDBC-173.
  • 2018-08-13 发布 0.7.8

    • 支持多个 JDBC 驱动程序类名(MySQL 在其 6.x 连接器中引入了新的驱动程序类名) JDBC-172.
    • 允许 with-db-connectionwith-db-metadata 嵌套 JDBC-171.
  • 2018-06-23 发布 0.7.7

    • 支持在返回生成键作为结果集的操作中使用 :as-arrays?:result-set-fn:row-fnexecute!insert!insert-multi!JDBC-169.
    • 如果您意外调用了期望 db-spec 的函数但传递了 java.sql.Connection 对象(仅 prepare-statement 需要),get-connection 会提供更好的反馈。
  • 2018-04-24 发布 0.7.6

    • execute! 现在支持将 :return-keys 作为列名向量,而不仅仅是简单的布尔值,适用于支持该功能的驱动程序 JDBC-166.
    • 添加对 H2 内存数据库的内置支持 (:dbtype "h2:mem").
    • 添加 db-spec 作为 java.net.URI 对象的缺失规范.
    • 修复 add-connection 对字符串 db-spec 的处理(变为 :connection-uri,而非 :connection-string).
    • 修复 with-db-* 函数的规范,以支持绑定形式中的选项 JDBC-165.
    • 更新测试,使其能正确配合字符串 db-spec 测试数据库工作.
    • 确保不存在反射警告.
    • 将本地测试基础设施切换为 CLI 和 deps.edn(来自 Leiningen),作为不使用“构建工具”进行多版本测试的示例.
  • 2017-12-29 发布 0.7.5

    • execute! 中添加对 :return-keys 的支持,以及在 db-do-prepared-return-keys 中添加对 :multi? 的支持 JDBC-163.
  • 2017-12-14 发布 0.7.4

    • 改进了其他 java.jdbc 文档的可发现性 JDBC-160.
    • 可选规范已根据 0.7.2 和 0.7.3 版本中的 :keywordize?:connection-uri 变更进行了更新.
    • 性能改进,主要涉及 queryreducible-query.
    • reducible-query 中实验性的 :raw? 结果集处理.
    • modify-connection 在面对 null 连接和无效选项值时更加健壮.
  • 2017-10-05 发布 0.7.3

    • :identifiers 旁边添加了 :keywordize? 选项,其默认值为 true,但可设置为 false 以选择不将标识符转换为关键字(因此列名等仅由作为 :identifiers 传递的函数处理) JDBC-159.
    • 如果在事务期间发生异常,随后回滚又因另一个异常而失败,现在这两个异常将被合并为一个 ex-info。此前,回滚异常掩盖了事务异常 JDBC-158.
  • 2017-10-02 发布 0.7.2

    • connection-uri 被错误地指定为 java.net.URI,但应为 string? JDBC-156.
    • 允许在 :connection-uri 中传递 :user:password,以便从连接字符串中省略凭据。
    • 澄清了 get-connection 的文档字符串,以显示 :user:password 可以传递的位置。
  • 2017-08-30 发布 0.7.1

    • 包含空值的连接字符串未正确解析 JDBC-155.
  • 2017-07-16 发布 0.7.0

    • create-table-ddldrop-table-ddl 添加 :conditional? 选项,以提供存在性检查(或一个用于操作生成的 DDL 的函数)。
    • 改进对 Oracle 连接的支持(默认端口为 1521,支持 :dbtype "oracle" -- 作为 "oracle:thin" -- 以及 :dbtype "oracle:oci",在主机前使用 @ 而非 //)。
  • 2017-07-05 发布 0.7.0-beta5

    • get-connection 现在接受带有 :auto-commit?:read-only? 选项的 opts 映射。如果存在,将在获取的连接上调用相应的方法。这些选项在任何可能底层调用 get-connection 的函数调用中均有效。这应允许在大多数数据库的查询中流式传输结果 JDBC-153.
    • prepared-statement 中执行了对选项的额外验证,以避免静默忽略 :concurrency:cursors:result-type:return-keys 的无效组合。
  • 2017-07-04 发布 0.7.0-beta4

    • opts 现在从 reducible-query 正确传递到 db-query-with-resultset
    • 更新了 ::query-options 规范,以明确 ::prepare-options 在那里也是可接受的。
  • 2017-07-04 发布 0.7.0-beta3

    • 移除了 reducible-result-set 中的反射警告 JDBC-152.
  • 2017-06-30 发布 0.7.0-beta2(又名:可归约的传奇,第二部分)

    • 已移除对 Clojure 1.5 和 1.6 的支持 -- 破坏性变更。
    • 或者换句话说,clojure.java.jdbc 现在需要 Clojure 1.7 或更高版本!
    • 所有公共函数现在都在可选的 clojure.java.jdbc.spec 命名空间中具有 specs(需要 clojure.spec.alpha)。
    • reducible-queryreducible-result-set 使用 IReduce 并正确支持 reduce 的无 init 元数,通过如果存在则使用 ResultSet 的第一行作为(缺失的)init 值,并且仅在 ResultSet 为空时才调用无参数的 freduceinit 元数仅使用两个参数调用 f
  • 2017-06-29 发布 0.7.0-beta1

    • 已移除对 Clojure 1.4.0 的支持 -- 破坏性变更。
    • 可选的 spec 支持现在使用 clojure.spec.alpha
    • reducible-query 接受一个 db-spec 和一个 SQL/参数向量,并返回一个可归约对象(在 Clojure 1.7 或更高版本中为 IReduce;在 Clojure 1.5/1.6 中为 CollReduce):当进行归约时,它会执行查询,获取一个可归约的结果集,然后对该结果集进行归约。可归约查询在每次归约时都会执行查询。辅助函数 reducible-result-set 是公开的:它接受一个 ResultSet 并生成一个可归约对象,该对象提供对行的一次遍历归约。这两个函数都尊重 reduced 值以短路该过程 JDBC-99
  • 2017-03-23 发布 0.7.0-alpha3

    • 现在 classname 可与 dbtype / dbname 一起使用,以便轻松为未知数据库类型指定 JDBC 驱动类名 JDBC-151
    • 已添加 redshift 作为 dbtype,驱动名称为 com.amazon.redshift.jdbc.Driver
  • 于 2017-03-01 发布 0.7.0-alpha2

    • 现已支持 pgsql 和 Impossibl PostgresSQL 'NG' 驱动程序(注意 :max-rows 与此驱动程序不兼容!);此外,在 db-spec 中提供未知的 dbtypesubprotocol 现在应抛出更友好的异常 JDBC-150.
    • quoted 现在接受用于数据库 / 方言的关键字(:ansi(包括 PostgresSQL)、:mysql:oracle:sqlserver -- 这些与 HoneySQL 中使用的关键字相匹配,HoneySQL 是 java.jdbc 推荐的第三方 SQL DSL)JDBC-149.
    • 重新排序 get-connection 子句,以便更容易在 db-spec 中组合键 JDBC-148.
    • 强制在驱动程序上调用 classForName 之前加载 DriverManager,以避免初始化时潜在的竞态条件 JDBC-145.
  • 2016-11-12 发布 0.7.0-alpha1 -- 可能存在破坏性变更

    • as-sql-namequoted 的签名略有变化:前者不再具有柯里化(单参数)版本,后者不再具有双参数版本。这一变更源于 Slack 上的一次讨论,该讨论指出柯里化函数不符合惯用写法。如果你依赖 as-sql-name 的柯里化版本,则无需使用 partial。如果你依赖 quoted 的双参数版本,则需要在单参数调用中添加一个额外的 ( )。鉴于 as-sql-name 实际上是一个实现细节,如果有人在使用它我会感到非常惊讶。同样,如果有人在使用 quoted 的双参数版本我也会感到惊讶,因为自然用法是使用 :entities (quoted [\[ \]]) 来创建命名策略(该策略提供 SQL 实体引用)。
    • 澄清了使用行映射序列的 insert-multi! 可能比使用行值向量序列慢得多(前者对每一行执行一次插入,后者对所有数据执行一次插入) JDBC-147.
    • 所有选项都会通过所有函数调用传递,扩展了可以传递给高级函数(如 insert!update!)的选项范围 JDBC-144.
    • 添加了 get-isolation-level 以返回当前事务的隔离级别(如果存在) JDBC-141.
  • 添加了对 read-columns 选项的支持,以允许更灵活地自定义从结果集中读取列值(特别是在多数据库应用程序中)。同时扩展了 set-parameters 对选项的支持(此前它只是 db-spec 的一部分)JDBC-137.

    • 将可选的 clojure.spec 覆盖范围扩展到几乎整个库 API。
  • 2016-08-25 发布 0.6.2-alpha3

    • 修复了 :qualifier 与现有 :identifiers 功能之间的不良交互 JDBC-140.
    • 更新了 README 和 docstrings,以反映 :dbtype 是编写 db-spec 映射的最简单/首选方式 JDBC-139.
    • 修复了 postgres / postgresql 别名支持 JDBC-138. 这也为 mssql (sqlserver)、jtds (jtds:sqlserver)、oracle (oracle:thin) 和 hsql (hsqldb) 添加了别名。
  • 2016-07-21 发布 0.6.2-alpha2

    • 更新 clojure.spec 支持,使其与 Clojure 1.9.0 Alpha 10 兼容。
  • 2016-07-05 发布 0.6.2-alpha1

    • 通过新的 clojure.java.jdbc.spec 命名空间提供对 clojure.spec 的实验性支持。需要 Clojure 1.9.0 Alpha 8(或更高版本)。
    • 现在所有函数的所有选项都可以在 db-spec 本身中拥有默认值 JDBC-136.
    • query(以及由此延伸的 find-by-keysget-by-id)现在支持 :explain?:explain-fn 选项,以帮助支持基本的性能分析 JDBC-135.
    • insert!insert-multi! 现在尊重 :identifiers:qualifier,因为在 PostgreSQL 上插入行会返回完整行,而不仅仅是新插入的键 JDBC-134.
    • 除了 :identifiers 选项外,现在可以使用 :qualifier 来指定在从 SQL 列名构建关键字时要使用的命名空间限定符(字符串)JDBC-133.
  • 2016-05-12 发布 0.6.1 -- 重要错误修复!

    • insert!insert-multi! 现在将 :transaction? 默认设置为 true(它们在 0.6.0 中本应如此!)JDBC-128。这两个函数还改进了文档字符串,以澄清将行作为 map 插入与将行作为一系列列值插入之间的行为差异。
    • 已改进对 PostgreSQL 的支持:java.jdbc 现在在本地针对 PostgreSQL 进行测试(以及 SQLite、Apache Derby、HSQLDB、H2、MySQL、MS SQL Server(包括 MS Type 4 驱动程序和 jTDS 驱动程序)。JDBC-127JDBC-129
  • 2016-05-11 发布 0.6.0 版本 -- 破坏性版本!已移除弃用功能!

    • find-by-keys 现在正确处理 nilJDBC-126. 0.6.0 / 2016-05-11.
    • find-by-keys:order-by 上调用 seq 以将 [] 视为没有 ORDER BY 子句. 0.6.0 / 2016-05-11.
    • db-query-with-resultset 现在接受一个选项映射并将其传递给 prepare-statement JDBC-125. 0.6.0-rc2 / 2016-05-07.
      • 不再支持将 prepare-statement 选项映射作为 [sql & params] 向量的第一个元素传递,这样做将抛出 IllegalArgumentException. 据我所知,它一直文档记录非常糟糕且几乎从未被使用.
    • db-query-with-resultset 不再要求 sql-params 参数必须是向量:序列也是可接受的. 这与接受序列的其他函数保持一致. 0.6.0-rc2 / 2016-05-07.
    • db-query-with-resultset 现在接受裸 SQL 字符串或 PreparedStatement 作为 sql-params 参数,当不需要参数时. 这与接受 SQL 或 PreparedStatement 的其他函数保持一致. 0.6.0-rc2 / 2016-05-07.
    • query 的选项映射现在传递给 db-query-with-resultset,因此可以包含用于构建 PreparedStatement 的选项 JDBC-125. 0.6.0-rc2 / 2016-05-07.
    • 添加了 get-by-idfind-by-keys 便捷函数(在 0.6.0 的 API 更改后,添加这些函数很容易,我们在 World Singles 中非常依赖它们,因此将它们放入核心供所有人使用似乎是合理的). 0.6.0-rc1 / 2016-05-04.
  • find-by-keys 接受一个 :order-by 选项,该选项期望一个排序序列;排序是一个列名(关键字)或从列名(关键字)到方向(:asc:desc)的映射。0.6.0-rc2 / 2016-05-07.
    • 确保在解构之前 SQL / params 实际上是向量(这解决了来自其他语言的互操作性边缘情况)JDBC-124. 0.6.0-alpha2 / 2016-04-18.
    • 修复 insert-multi! 参数验证异常中的拼写错误 JDBC-123. 0.6.0-alpha2 / 2016-04-18.
    • 所有已弃用的功能已被移除!JDBC-118. 0.6.0-alpha1 / 2016-04-13
      • 请参阅 0.5.5 到 0.5.8 版本中描述的更改,以了解哪些功能已被弃用
      • 使用版本 0.5.8 作为桥梁,以识别您的代码所依赖的任何已弃用的 API 调用!
      • db-transaction(在版本 0.3.0 中弃用)已被移除
      • java.jdbc.deprecated 命名空间已被移除
  • 2016-04-12 发布 0.5.8

    • db-do-commands 现在期望多个命令被包裹在一个向量中 JDBC-122。单个命令的形式保持不变(但可以被包裹在一个向量中)。使用多个命令(未包裹在单个向量中)调用 db-do-commands 将产生打印到控制台的 "DEPRECATED" 警告。
    • db-do-prepareddb-do-prepared-return-keys 现在期望接收一个 db-spec、一个可选的 transaction? 布尔值、一个 sql-params 参数,以及一个可选的选项映射。sql-params 是一个包含 SQL 字符串或 PreparedStatement 后跟参数的向量——类似于本库中的其他 API。此外,类似于 :multi? true 版本的 execute!db-do-prepared 可以接受一个包含参数组的向量:多个包含参数值组的向量 JDBC-122。使用展开的参数调用 db-do-prepared——SQL 字符串/语句后跟参数组——已弃用,并将产生打印到控制台的 "DEPRECATED" 警告。
  • 2016-04-10 发布 0.5.7

    • 在 0.5.6 中引入的 (insert! db table [:col] ["val"] {}) 语法会抛出异常 JDBC-121
  • 2016-04-10 发布 0.5.6

    • create-table-ddl 现在要求列规格包裹在单个向量中,并且不再需要 :options 分隔符来指定选项映射 JDBC-120.
      • 如果列规格未包裹在向量中,控制台将打印 "DEPRECATED" 警告。
    • insert! 现在仅支持单行插入;多行插入已弃用。已添加 insert-multi! 用于多行插入。:options 不再需要作为选项映射的分隔符 JDBC-119.
      • 如果调用 insert! 时包含多行,或指定了 :options,控制台将打印 "DEPRECATED" 警告。
    • 注意:所有已弃用的功能将在 0.6.0 版本中移除!
  • 2016-04-09 发布 0.5.5

    • 允许在所有先前接受可选关键字参数的调用中使用选项映射 JDBC-117.
      • 调用中展开的关键字参数形式已弃用——并在控制台打印 "DEPRECATED" 消息!——并将在 0.6.0 中移除。
  • 2016-03-27 发布 0.5.0

    • 允许在 db-do-prepared-return-keys 中使用 PreparedStatement JDBC-115.
    • 移除异常包装 JDBC-114.
    • 放弃对 Clojure 1.3 的兼容性。
  • 2015-09-15 发布 0.4.2

    • 移除冗余的类型提示 JDBC-113 - Michael Blume.
    • 避免对 .prepareStatement 进行反射 JDBC-112 - Michael Blume.
    • 添加 metadata-query 宏,以便更轻松地处理 JDBC-107 的元数据查询/结果。
    • prepare-statement :return-keys 现在可以是一个(自动生成的)列名向量,除了仅仅为真值或假值之外。这使得可以为更多数据库返回键。 JDBC-104.
    • 正式支持 H2(并对其进行测试)以支持 JDBC-91,并澄清文档字符串以改进对 SQL 的特定于驱动程序的调试限制。
  • 2015-07-26 发布 0.4.0 / 0.4.1

    • db-do-prepared 现在允许在将 PreparedStatement 作为第二个参数传递时省略 transaction? JDBC-111 - Stefan Kamphausen.
    • 嵌套事务检查隔离级别是否相同 JDBC-110 - Donald Ball.
    • 默认 PostgreSQL 端口;支持更多 dbtype/dbname 变体 JDBC-109.
    • 放弃对 Clojure 1.2 的兼容性。
  • 2015-05-18 发布 0.3.7

    • 提升 project.clj 中所有驱动程序的版本并重新测试。
    • 移除 insert-sql 中重复的 count 调用 JDBC-108 - Earl St Sauver.
    • 从 README 中移除驱动程序版本并链接到 Maven Central JDBC-106.
    • 修复 CHANGES 和 README 中的链接 JDBC-103 - John Walker.
  • 2014-10-28 发布 0.3.6

    • prepare-statement:cursors:concurrency:result-type 参数允许任意值 JDBC-102.
    • 允许 :as-arrays? :cols-as-is 在将结果集返回为数组时省略列名唯一性 JDBC-101.
    • prepare-statement 添加 :timeout 参数 JDBC-100.
  • 2014-08-01 发布 0.3.5

    • 已解决 executeUpdate 的反射警告。
    • 现在接受 HSQLDB 和 SQLite 的内存字符串 JDBC-94.
    • 通过 :read-only? 支持只读事务 JDBC-93.
  • 2014-06-30 发布 0.3.4

    • execute! 现在可以接受 PreparedStatement JDBC-96.
    • 支持使用 :dbtype 和 :dbname(以及可选的 :host 和 :port 等)的更简单的 db-spec JDBC-92.
    • 支持 oracle:oci 和 oracle:thin 子协议 JDBC-90.
  • 2014-01-30 发布 0.3.3

    • 防止在调用 query 时使用裸 SQL 字符串导致异常/崩溃 JDBC-89.
    • 为 metadata-result 函数添加 :row-fn 和 :result-set-fn JDBC-87.
    • 支持从 URI 进行键值配置 (Phil Hagelberg).
  • 2013-12-30 发布 0.3.2

    • 为 ISQLParameter 添加 nil 协议实现
  • 2013-12-29 发布 0.3.1(已损坏;请改用 0.3.2)

    • 改进 docstrings 并添加 :arglists 以生成更好的自动文档。
    • 将 insert-sql 设为私有 - 这从技术上讲是一个破坏性变更,但它本不应是公开的:抱歉各位!
    • 为在预编译语句中设置参数提供更好的协议 JDBC-86.
    • 修复两个已弃用测试中的括号 JDBC-85.
    • 使 create-table-ddl 在应用 as-sql-name 时不再那么激进,因此仅列规范中的第一个名称受影响。
  • 2013-12-16 发布 0.3.0

    • 确保使用规范的 Boolean 以规避某些 JDBC 驱动中的奇怪行为 JDBC-84.
    • 重命名最近引入的测试以确保名称唯一 JDBC-83.
    • 重命名协议实现中未使用的参数以支持 Android JDBC-82.
    • 正确处理 execute! 中的空参数组序列(这似乎仅影响 SQLite) JDBC-65.
  • 2013-12-12 发布 0.3.0-rc1

    • 弃用 db-transaction(0.3.0 新增),改用 with-db-transaction JDBC-81.
    • 添加 with-db-metadata 宏和 metadata-result 函数,以便更轻松地处理 SQL 元数据 JDBC-80.
    • 添加 with-db-connection 宏,以便更轻松地针对单个打开的连接执行一组操作 JDBC-79.
    • 添加 ISQLValue 协议,以便更轻松地支持 SQL 语句参数中的自定义 SQL 类型 JDBC-77.
    • 在 with-db-transaction 中添加对 :isolation 的支持 JDBC-75.
    • 为 DataSource 连接添加 :user 作为 :username 的别名 JDBC-74.
  • 2013-11-24 发布 0.3.0-beta2

    • 破坏性变更!
    • 0.3.0-alpha1 中引入的 DSL 命名空间已被弃用 - 如果您希望继续使用 DSL,请参阅 java-jdbc/dsl 了解迁移路径(尽管建议您切换到另一种更具表达力的 DSL)。
    • 在早期 0.3.0 版本中已弃用的旧版 API(0.2.3)已移至 clojure.java.jdbc.deprecated,以帮助简化 0.3.0 的 API 并清理文档。
  • 2013-11-03 发布 0.3.0-beta1

    • query as-arrays? 现在允许利用延迟结果获取 JDBC-72.
    • "h2" 被识别为 org.h2.Driver 的协议简写
    • 测试不再使用 :1 字面量 JDBC-71.
    • 条件性使用 javax.naming.InitialContext 以便能在 Android 上编译 JDBC-69.
    • 新的 db-query-with-resultset 函数取代了私有的 db-with-query-results* 并处理原始 ResultSet 对象 JDBC-63.
    • 允许在 db-spec 中使用 :set-parameters 来覆盖 set-parameters 内部函数,以允许对 SQL 参数值进行特定数据库的特殊处理(例如 Teradata 的 null) JDBC-40.
  • 2013-09-15 发布 0.3.0-alpha5

    • DDL 现在支持实体命名策略 JDBC-53.
    • 尝试解决由闭包引起的潜在内存泄漏 - 参见 Christophe Grand 关于宏、闭包和意外对象保留的博客文章.
    • 文档已迁移至 在 Clojure-Doc.org 上使用 java.jdbc
    • 添加了 Leiningen 支持以简化开发/测试(Maven 仍然是主要构建工具)。
    • 添加了 create-index / drop-index DDL JDBC-62 - moquist
    • 使各种 db-do-* 函数中的 transaction? 布尔值变为可选
    • 创建 clojure.java.jdbc.ddl 命名空间
    • 添加 create-table、drop-table、create-index 和 drop-index
    • 在主命名空间中弃用 create-table、create-table-ddl 和 drop-table
    • 更新 README 以澄清 PostgreSQL 说明。
    • 修复 PostgreSQL 测试套件 JDBC-59
    • 改进 Oracle 数据类型处理的钩子 JDBC-57
    • 修复反射警告 JDBC-55
  • 2013-05-11 发布 0.3.0-alpha4

    • 修复连接泄漏 JDBC-54
    • 允许 order-by 接受空序列(并返回空字符串)
  • 2013-05-04 发布 0.3.0-alpha3

    • 通过完全限定 Connection 类型来修复宏 / 导入交互问题。
  • 于 2013-05-03 发布 0.3.0-alpha2

    • 通过声明 get-connection 返回 java.sql.Connection 来解决 JDBC-51
    • 添加 IResultSetReadColumn 协议扩展点以支持自定义读取转换 JDBC-46
    • 为 execute! 添加 :multi? 以便用于重复操作 JDBC-52
    • 撤销了对 NULL 值的特殊处理(重新打开 JDBC-40
    • 将 :as-arrays 重命名为 :as-arrays?,因为它是布尔值
    • 添加 clojure.java.jdbc.sql/as-quoted-str 的柯里化版本
    • 正式弃用 resultset-seq
  • 2013-04-07 发布 0.3.0-alpha1

    • 重大 API 重构!
    • 旧版 0.2.x API 的大部分已被弃用,并引入了新的、更符合惯用法的 API,以及用于生成基本 SQL 的最小化 DSL
    • 具体细节:
    • 添加 insert!、query、update!、delete! 和 execute! 高级 API JDBC-20
    • 在 clojure.java.jdbc.sql 中添加可选的 SQL 生成 DSL(由 JDBC-20 隐含)
    • 添加低层 API 的 db- 前缀版本
    • 添加 db-transaction 宏
    • 添加 result-set-seq 作为 resultset-seq 的替代(后者将被弃用)
    • 事务现在能正确回滚非 Exception 类型的 Throwable JDBC-43
    • 使用新 API 重写旧 API 函数,并弃用旧 API JDBC-43
    • 为 query / result-set-seq 添加 :as-arrays 选项 JDBC-41
    • 更好地处理 NULL 值 JDBC-40JDBC-18 注意:JDBC-40 将在 0.3.0-alpha2 中回滚,因为它在 PostgreSQL 中引入了回归问题
    • db-do-commands 允许你在没有事务包裹的情况下执行 SQL JDBC-38
    • 从 execute-batch 中移除反射警告
    • 在 README 中添加关于第三方数据库驱动依赖的说明
    • 为 resultset-seq 添加可选的 :identifiers 参数,以便显式传入命名策略
  • 2012-06-18 发布 0.2.3

    • as-str 现在将 a.b 视为由 . 分隔的两个标识符,因此引用时生成 [a].[b] 而不是 [a.b]
    • 添加 :connection-uri 选项 JDBC-34
  • 2012-06-10 发布 0.2.2

    • 处理 Oracle 未知受影响行数 JDBC-33
    • 处理字符串数据库规范中的 jdbc: 前缀 JDBC-32
    • 处理 make column unique 中的空列 (Juergen Hoetzel) JDBC-31
  • 2012-05-10 发布 0.2.1

    • 结果集性能增强 (Juergen Hoetzel) JDBC-29
    • 实现 do-prepared-return-keys (供 Korma 团队使用) JDBC-30
  • 2012-04-23 发布 0.2.0

    • 将内部命名空间合并到主 jdbc 命名空间 JDBC-19
  • 2012-04-15 发布 0.1.4

    • 解包嵌套事务异常的 RTE (我们之前 已解包顶层事务的 RTE)。
    • 移除解包 RunTimeException 时的反射警告 (Alan Malloy)
  • 2012-02-29 发布 0.1.3

    • 修复 SQLite3 事务内生成的键 JDBC-26
  • 2012-02-29 发布 0.1.2

    • 正确处理预编译语句参数 JDBC-23
    • 添加对 SQLite3 的支持 JDBC-26
    • 用 repeat 替换 replicate (已弃用) JDBC-27
    • 确保 MS SQL Server 在 Microsoft 和 jTDS 驱动下均通过测试
    • 构建服务器现在默认测试 derby、hsqldb 和 sqlite
    • 根据 Stuart Sierra 为 contrib 项目制定的大纲更新 README
  • 2011-11-02 发布 0.1.1

    • 在连接定义中接受字符串或 URI JDBC-21
    • 允许推断驱动、端口和子协议 JDBC-22
  • 2011-10-16 发布 0.1.0

    • 移除对已弃用 structmap 的依赖 JDBC-15
  • 2011-10-11 发布 0.0.7

    • 重命名列 JDBC-9
    • 确保 do-prepared 捕获无效 SQL JDBC-16
  • 2011-08-04 发布 0.0.6

    • 改进异常处理(解包 RTE)
    • 更新时不使用批处理(在 Apache Derby 上会导致异常) JDBC-12
    • 添加测试套件
  • 2011-07-18 发布 0.0.5

    • 暴露 prepare-statement API
    • 允许 with-query-results 接受 PreparedStatement 或创建它的选项,而不是 SQL 查询字符串和参数
    • 支持无法返回生成键的数据库
  • 2011-07-17 发布 0.0.4

    • 允许在 create-table 中使用 :table-spec {string} JDBC-4
    • 移除反射警告 JDBC-8
    • 确保发生 Error 时事务不被提交 JDBC-11
  • 2011-07-01 发布 0.0.3

    • 与 MS SQL Server、PostgreSQL 的键生成兼容性 JDBC-10
  • 2011-06-07 发布 0.0.2

    • Clojure 1.2 兼容性 JDBC-7
  • 2011-05-07 发布 0.0.1

    • 初始版本
  • 来自 clojure.contrib.sql 的变更:

    • 暴露 print-... 函数;不再将异常写入 \*out\*
    • 定义 resultset-seq 以替代 clojure.core/resultset-seq
    • 添加命名/引用策略(参见 name mapping documentation
    • 在可能的情况下,从插入操作返回生成的键
    • 添加 insert-record 函数
    • Clojure 1.3 兼容性

Copyright and License

Copyright (c) Sean Corfield, Stephen Gilardi, 2011-2023. 保留所有权利。 本软件的使用和 分发条款由 Eclipse Public License 1.0 (https://opensource.org/license/epl-1-0/) 涵盖,该许可 可在本发行版根目录下的 epl-v10.html 文件中找到。 以任何方式使用本软件,即表示您同意受 本许可条款的约束。 您不得从本软件中移除此通知或 任何其他通知。