Java 我们可以在postgresql中以gzip格式存储数据吗
下面是java代码,它试图将gzip格式的数据存储在表“TESTBYTEA”中。我正在使用postgresql数据库。TESTBYTEA表有一列BYTEA类型的“数据”。我想压缩数据并存储它。在从数据库读取数据时,我希望将其解压缩并读取。但我得到一个例外“不是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
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();