Java 将sql查询的输出写入文件
我有一个SQL查询:Java 将sql查询的输出写入文件,java,postgresql,file-io,postgresql-copy,Java,Postgresql,File Io,Postgresql Copy,我有一个SQL查询: SELECT 'DROP TABLE ' || tablename FROM pg_catalog.pg_tables where tablename like 'r_395%'; 其输出是: ?column? -------------------- DROP TABLE r_395_0 DROP TABLE r_395_1 DROP TABLE r_395_2 DROP TABLE r_395_3 DROP TABLE r_395_4 DR
SELECT 'DROP TABLE ' || tablename
FROM pg_catalog.pg_tables where tablename like 'r_395%';
其输出是:
?column?
--------------------
DROP TABLE r_395_0
DROP TABLE r_395_1
DROP TABLE r_395_2
DROP TABLE r_395_3
DROP TABLE r_395_4
DROP TABLE r_395_5
DROP TABLE r_395_6
DROP TABLE r_395_7
DROP TABLE r_395_8
DROP TABLE r_395_9
(10 rows)
我正在使用实体管理器执行此查询:
StringBuffer query = new StringBuffer();
query.append("SELECT 'DROP TABLE ' || tablename
FROM pg_catalog.pg_tables where tablename like 'r_395%'");
entityManager.createNativeQuery(query.toString()).executeUpdate();
我想把这个输出写入一个文件。如果它只是一个文本文件,我会使用filewriter和缓冲writer。但现在它是一个SQL生成的文件,我有点困惑。有没有一种方法可以在Java中实现这一点?如果您想在本地(在数据库的机器上)编写文件,对于这样的情况,还有一种非常快速和简单的方法:
COPY $$SELECT 'DROP TABLE ' || tablename
FROM pg_catalog.pg_tables
WHERE tablename ~~ 'r_395%'$$ TO /path/to/myfile;
我在这里使用,以避免转义单引号。如果您想在本地(在数据库的机器上)写入文件,对于这样的情况,也有非常快速和简单的方法:
COPY $$SELECT 'DROP TABLE ' || tablename
FROM pg_catalog.pg_tables
WHERE tablename ~~ 'r_395%'$$ TO /path/to/myfile;
我在这里使用,以避免转义单引号。使用SQL COPY的一个非常类似的解决方案(参见Erwin Brandstetter的答案)是使用
\COPY
。这里的区别在于,您不需要对数据库框进行本地访问。SQL COPY的输出只能写入数据库框中系统用户postgres具有写入权限的位置。使用psql\copy,您可以将输出写入客户端上的某个位置
使用psql连接到数据库并执行命令
psql -h host -p port -U user database
\copy (SELECT 'DROP TABLE ' || tablename FROM pg_catalog.pg_tables WHERE tablename ~~ 'r_395%') to '/path/to/myfile'
或者使用-c参数直接将命令传递给psql:
psql -h host -p port -U user -c "\copy (SELECT 'DROP TABLE ' || tablename FROM pg_catalog.pg_tables WHERE tablename ~~ 'r_395%') to '/path/to/myfile'" database
HTH使用SQL COPY的一个非常类似的解决方案(参见Erwin Brandstetter的答案)是使用
\COPY
。这里的区别在于,您不需要对数据库框进行本地访问。SQL COPY的输出只能写入数据库框中系统用户postgres具有写入权限的位置。使用psql\copy,您可以将输出写入客户端上的某个位置
使用psql连接到数据库并执行命令
psql -h host -p port -U user database
\copy (SELECT 'DROP TABLE ' || tablename FROM pg_catalog.pg_tables WHERE tablename ~~ 'r_395%') to '/path/to/myfile'
或者使用-c参数直接将命令传递给psql:
psql -h host -p port -U user -c "\copy (SELECT 'DROP TABLE ' || tablename FROM pg_catalog.pg_tables WHERE tablename ~~ 'r_395%') to '/path/to/myfile'" database
HTH数据来源并不重要。听起来输出文件确实是一个文本文件。是的,特洛伊敌人是对的。您只需将数据写入文本文件,数据的来源并不重要。听起来输出文件确实是一个文本文件。是的,特洛伊敌人是对的。您只需将数据写入文本文件。您还可以使用\o从psql设置输出文件,非常简单。您还可以使用\o从psql设置输出文件,非常简单。