gpt4 book ai didi

java - 从 jdbc (clojure/java) 生成 "create table"脚本

转载 作者:行者123 更新时间:2023-11-30 11:34:35 27 4
gpt4 key购买 nike

有谁知道是否可以使用 clojure 或 java 通过 jdbc 从数据库生成“创建表脚本”?

我可以只从系统表或信息模式中获取数据,但根据不同的数据库类型会有所不同。例如,MSSQL 必须是从信息模式构建创建表(或 View )和从 ibm.systables 构建 db2 的查询。希望这个问题以前在 JDBC 世界中可能已经解决了。

例如,我希望区分源数据库和目标数据库之间的创建表语句。

谢谢,

最佳答案

在 MySQL 中你可以使用 show create table:

(需要'[clojure.java.jdbc :as jdbc])

(defn gen-script [db table]
(jdbc/with-connection db
(jdbc/with-query-results rs [(str "show create table " table)]
(get (first rs) (keyword "create table")))))

测试:

(def db {:classname "com.mysql.jdbc.Driver"
:subprotocol "mysql"
:subname (str "//localhost:3306/testtest")
:user "root"
:password "..."})

(println (gen-script db "example"))

=> CREATE TABLE `example` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

在其他数据库中,您可以从这个开始:

(defn- gen-script [db table]
(jdbc/with-connection db
(let [conn (jdbc/connection)
meta (.getMetaData conn)]
(format "create table %s (\n%s\n)"
table
(apply str
(interpose ",\n"
(map (fn [x]
(format " %s %s(%s)%s%s%s"
(:column_name x)
(:type_name x)
(:column_size x)
(if (not= "YES" (:is_nullable x)) " NOT NULL" "")
(if (= "YES" (:is_autoincrement x)) " AUTO_INCREMENT""")
(if (= "YES" (:column_def x)) " DEFAULT" "")))
(resultset-seq (.getColumns meta nil nil table "%")))))))))

测试:

(println (gen-script db "example"))

=> create table example (
id INT(10) NOT NULL AUTO_INCREMENT,
name VARCHAR(30),
age INT(10)

)

关于java - 从 jdbc (clojure/java) 生成 "create table"脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15571680/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com