大家好!
开门见山。 是否有任何 java 库可以从数据库生成 Postgres SQL 脚本?
例如我有表 job_table
name | job
Andy | pull
Benny | push
然后,我想得到这样的字符串sql脚本
String sqlInsert =
"INSERT INTO job_table(name, job) VALUES ('Andy', 'pull');"+
"INSERT INTO job_table(name, job) VALUES ('Benny', 'push');";
或者类似的东西。
有人知道吗?
注意:我已经用 java 编写了自己的代码来手动生成它。 但我就是不喜欢它。 :)
先谢谢了。
最佳答案
使用 PgJDBC 对 COPY 命令的支持将制表符分隔或 CSV 数据送入数据库,并以相同的格式提取它。您想要CopyManager ,可以从 PgConnection 获得.
目前,CopyManager 的文档记录相当不足,但它只是 COPY
的包装器。命令。
访问PgConnection
通过将 java.sql.Connection 强制转换为 PgConnection
来实现接口(interface)。如果连接由连接池服务包装,您可能必须将其解开才能获取 PgJDBC 返回的真正底层连接。如果您使用 JPA,同样的情况,您必须访问真正的 PgJDBC 连接或创建一个新连接。
如果您确实需要INSERT
语句,而不是向数据库传递数据的有效方式,您的具体需求是什么?可移植性?如果是这样,您将如何处理诸如 NUMERIC/DECIMAL/等等的不同表示形式之类的事情?
如果您只需要处理“标准”数据类型,那么您的手写代码可能是最好的方法。
目前唯一严格安全的方法是通过 pg_dump。您可以调用 pg_dump --data-only --table=thetable
处理并从其标准输出读取来完成这项工作,尽管这确实需要(a)直接了解应用程序中的数据库详细信息,而不仅仅是数据源或从容器注入(inject)的实体管理器; (b) 了解 pg_dump 路径,以及 (c) 执行外部进程的安全权限。不幸的是,目前还没有任何办法解决这个问题。 pg_dump 并不是设计用作库的(尽管有人讨论过将其转换),即使它是,它也是一个 C 库,您必须通过 JNI 或类似的方式包装。恶心。
关于用于从数据库生成 Postgres SQL 脚本的 Java 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10274976/