Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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
Java 我们可以在postgresql中以gzip格式存储数据吗_Java_Postgresql - Fatal编程技术网

Java 我们可以在postgresql中以gzip格式存储数据吗

Java 我们可以在postgresql中以gzip格式存储数据吗,java,postgresql,Java,Postgresql,下面是java代码,它试图将gzip格式的数据存储在表“TESTBYTEA”中。我正在使用postgresql数据库。TESTBYTEA表有一列BYTEA类型的“数据”。我想压缩数据并存储它。在从数据库读取数据时,我希望将其解压缩并读取。但我得到一个例外“不是GZIP格式” 但我得到了以下例外 Exception in thread "main" java.io.IOException: Not in GZIP format at java.util.zip.GZIPInputStrea

下面是java代码,它试图将gzip格式的数据存储在表“TESTBYTEA”中。我正在使用postgresql数据库。TESTBYTEA表有一列BYTEA类型的“数据”。我想压缩数据并存储它。在从数据库读取数据时,我希望将其解压缩并读取。但我得到一个例外“不是GZIP格式”

但我得到了以下例外

Exception in thread "main" java.io.IOException: Not in GZIP format
    at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:141)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:56)
    at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:65)
    at postgresjdbc.PostgresJDBC.gunzip(PostgresJDBC.java:237)
    at postgresjdbc.PostgresJDBC.readBytes(PostgresJDBC.java:230)
    at postgresjdbc.PostgresJDBC.main(PostgresJDBC.java:208)
Java Result: 1
线程“main”java.io.IOException中的异常:不是GZIP格式 位于java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:141) 位于java.util.zip.GZIPInputStream。(GZIPInputStream.java:56) 位于java.util.zip.GZIPInputStream。(GZIPInputStream.java:65) 位于postgresjdbc.postgresjdbc.gunzip(postgresjdbc.java:237) 位于postgresjdbc.postgresjdbc.readBytes(postgresjdbc.java:230) 位于postgresjdbc.postgresjdbc.main(postgresjdbc.java:208) Java结果:1
非常感谢您的帮助。

您的问题是如何插入字节:

"INSERT INTO TESTBYTEA (data) VALUES ('\\\\x"+bytes+"')"
将产生类似于

INSERT INTO TESTBYTEA (data) VALUES ('\\x[B@187c6c7')
(基本上,
byte[]
引用用于字节数组的
.toString()

你为什么不用事先准备好的声明呢

PreparedStatement pstmt = connection.prepareStatement(
   "INSERT INTO TESTBYTEA (data) VALUES (?)");
pstmt.setBytes(1, bytes);
pstmt.executeUpdate();
编辑:

别忘了:

pstmt.close();

顺便说一句,postgresql会自动压缩足够大的文本值,以便进行脱机存储
pstmt.close();