栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PostgreSQL,JDBC和流式BLOB

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PostgreSQL,JDBC和流式BLOB

我的猜测是,您混合使用了OID和BYTEA样式的Blob。大型二进制对象与Ogre列间接存储在Postgres中。实际的文件数据由Postgres存储在数据库表之外的某个位置。该列仅包含一个对象标识符,该标识符在内部与Blob相关联。例如:

janko=# CREATE TABLE blobtest1 (name CHAr(30), image OID);CREATE TABLE  janko=# INSERT INTO blobtest1 VALUES ('stackoverflow', lo_import('/tmp/stackoverflow-logo.png'));INSERT 0 1janko=# SELECt * FROM blobtest1;   name   | image--------------------------------+------- stackoverflow       | 16389(1 row)

如果您使用该

ResultSet#getBlob(String)
方法,那么应该是OID样式列。
getBlob
从列中读取数据并将其转换为
Long
。然后,它尝试从其内部存储中读取关联的二进制数据。

另一方面,使用BYTEA,您可以将小的二进制数据直接放入数据库中。例如:

janko=# CREATE TABLE blobtest2 (name CHAr(30), image BYTEA);CREATE TABLEjanko=# INSERT INTO blobtest2 VALUES ('somebinary', E'\336\255\276\357\336\255\276\357');INSERT 0 1janko=# SELECt * FROM blobtest2;   name   |   image--------------------------------+---------------------------------- somebinary          | 336255276357336255276357(1 row)

在这里,数据列直接包含二进制数据。如果您尝试

getBlob
在这样的列上使用,数据仍会被解释为OID,但显然不会适合
Long
。让我们在刚刚创建的数据库上尝试一下:

groovy:000> import java.sql.*===> [import java.sql.*]groovy:000> Class.forName("org.postgresql.Driver");===> class org.postgresql.Drivergroovy:000> db = DriverManager.getConnection("jdbc:postgresql:janko", "janko", "qwertz");===> org.postgresql.jdbc4.Jdbc4Connection@3a0b2c64groovy:000> ps = db.prepareStatement("SELECt image FROM blobtest2 WHERe name = ?");===> SELECt image FROM blobtest2 WHERe name = ?groovy:000> ps.setString(1, "somebinary")===> nullgroovy:000> rs = ps.executeQuery()===> org.postgresql.jdbc4.Jdbc4ResultSet@66f9104agroovy:000> rs.next()===> truegroovy:000> rs.getBlob("image")ERROR org.postgresql.util.PSQLException: Bad value for type long : 336255276357336255276357        at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toLong (AbstractJdbc2ResultSet.java:2796)        at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getLong (AbstractJdbc2ResultSet.java:2019)        at org.postgresql.jdbc4.Jdbc4ResultSet.getBlob (Jdbc4ResultSet.java:52)        at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBlob (AbstractJdbc2ResultSet.java:335)        at groovysh_evaluate.run (groovysh_evaluate:3)        ...


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438773.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号