Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生成";“创建表格”;来自jdbc的脚本(clojure/java)_Java_Sql_Jdbc_Clojure - Fatal编程技术网

生成";“创建表格”;来自jdbc的脚本(clojure/java)

生成";“创建表格”;来自jdbc的脚本(clojure/java),java,sql,jdbc,clojure,Java,Sql,Jdbc,Clojure,有人知道使用clojure或java通过jdbc从数据库生成“创建表脚本”是否可用吗 我可以只从系统表或信息模式中获取数据,但根据不同的数据库类型,这是不同的。例如,MSSQL必须是查询,才能从InformationSchema和ibm.systables中的db2构建创建表(或视图)。我希望这个问题以前在JDBC世界已经解决了 例如,我希望在源数据库和目标数据库之间区分CREATETABLE语句 谢谢,尝试使用hibernate工具项目。它将生成一个hibernate映射,您可以从中生成cre

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

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

例如,我希望在源数据库和目标数据库之间区分CREATETABLE语句


谢谢,

尝试使用hibernate工具项目。它将生成一个hibernate映射,您可以从中生成create语句


但是,既然数据库可以为您这样做,为什么要这样做呢…

在MySQL中,您可以使用
show create table

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

测试:

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

(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 "%")))))))))
测试:


)

有多个不同类型的数据库。。。我正在考虑一个数据迁移项目,可能是数据仓库类型。我试图抽象出数据库的细节,因为它是一个多数据库环境。。。我将查询系统表,返回示例结果集,然后通过内省为入站数据定义一个容器。我正在考虑在Clojure这样的语言中“ETL程序”应该是什么样子。这看起来很不错。。。我想我要做的是对每个数据库都有一些特定的东西。ShowTable非常出色,但据我所知,它只适用于teradata和mysql。
(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)