java - 将 java 对象保存到 PostgreSQL 问题

标签 java sql postgresql serialization jdbc

我正在尝试使用以下代码将对象保存在 postgre 列 (bytea) 中:

Utilisateur utilisateur = new Utilisateur("aa","aa","aa",10,"aaammm",12,Role.ADMINISTRATEUR);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(utilisateur);
        oos.close();
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

        Connection connection = null;
        PreparedStatement preparedStatement = null;


        connection = Connect();
        String SOME_SQL= "INSERT INTO test (id, objet) VALUES( ?, ?)";
        preparedStatement = connection.prepareStatement(SOME_SQL);
        preparedStatement.setBinaryStream(2, bais);
        preparedStatement.setInt(1, 11);
        preparedStatement.executeUpdate();
        preparedStatement.close();

但是我得到了这个异常(exception):

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at org.eclipse.ve.internal.java.vce.launcher.remotevm.JavaBeansLauncher.main(JavaBeansLauncher.java:86)
Caused by: org.postgresql.util.PSQLException: Function org.postgresql.jdbc4.Jdbc4PreparedStatement.setBinaryStream(int, InputStream) is not implemented.
    at org.postgresql.Driver.notImplemented(Driver.java:753)
    at org.postgresql.jdbc4.AbstractJdbc4Statement.setBinaryStream(AbstractJdbc4Statement.java:129)
    at com.grst.connector.SerializeToDatabase.<init>(SerializeToDatabase.java:35)
    ... 5 more

我猜,jdbc4 中没有实现 setBinaryStream(int , InputStream)。还有其他方法吗?

最佳答案

您需要使用 setBinaryStream(int, InputStream, int),其中第三个参数表示输入流的字节长度。

所以在你的情况下,这将是这样的:

byte[] data = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(data);
..
..
preparedStatement.setBinaryStream(2, bais, data.length);

关于java - 将 java 对象保存到 PostgreSQL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299765/

相关文章:

python - 如何将 Select * Postgres/Redshift 查询结果放入字典(列/值)

postgresql - 选定时间间隔内来自 PostgreSQL 数据库的数据

java - Android 中停止 AsyncTask doInBackground 方法

mysql - 从第二个表返回类别(如果存在)

mysql - 使用 GROUP BY 填充多个值的缺失日期

php - 通过一次mysql查询获得递归效果

java - 从 MemoryClassLoader 加载库?

java - 在内存中存储等距网格的最佳方法是什么?

java - Scala 在线程中对待 "sharing"局部变量的方式与 Java 不同?它是如何工作的?

sql - 一个检查约束中的多个子句?