我正在使用Spring框架中的JdbcTemplate。
数据库是Postgres。
问题是我正在 java 中读取.cer文件,并希望将此证书的内容存储到列类型 OID 并使用 jdbctemplate 的后退数据库中,但得到异常是
列“cert_file”是类型的,但表达式是类型的字节
下面是代码
final String sql1 = "INSERT INTO sp_certificate_detail " +
"(public_key,cert_file)values(?,?)";
status = jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(
Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(
sql1, new String[] { "cert_id" });
ps.setString(1, spreg.getPublicKey());
ps.setBytes(2, spreg.getCertFileContent());//This is byte[] of type
return ps;
}
}, keyHolder);
To get certiticate content am using below code
cfb = CertificateFactory.getInstance("X.509");
X509Certificate certb = (X509Certificate) cfb.generateCertificate(fileInputStream);
spreg.setCertFileContent(certb.getEncoded());
请任何人建议解决方法
我尝试将 byte[] 转换为 LOB,然后得到不同的异常
大型对象不能在自动提交模式下使用。;嵌套异常是org.postgresql.util。PSQLException:在自动提交模式下不能使用大型对象
代码如下
ps.setBlob(10, (new SerialBlob(spreg.getCertFileContent())));
将下面的一段代码与您的代码集成,应该可以工作。
import org.postgresql.largeobject.LargeObject;
import org.postgresql.largeobject.LargeObjectManager;
(在postgresql-jdbc-jar中提供的包)
LargeObjectManager largeObjectManager = null;
LargeObject largeObject = null;
Long largeObjectRef = null;
largeObjectManager = ((org.postgresql.PGConnection) connection).getLargeObjectAPI();
largeObjectRef = largeObjectManager.createLO(LargeObjectManager.READ | LargeObjectManager.WRITE);
largeObject = largeObjectManager.open(largeObjectRef, LargeObjectManager.WRITE);
largeObject.write("string/file content to write into oid column".getBytes());
largeObject.close();
包括需要设置的其余代码/参数,以及以下内容,
ps.setLong(2, largeObjectRef);
ps.executeUpdate();
我已将列类型更改为bytea
,现在它可以工作
问题内容: 说我有一个postgres表,如下所示: 我什至可以使用Spring Data插入列或?如果可能的话,它看起来如何作为存储库和实体?我还没有找到任何解决此问题的文档或示例,可能是因为它与更常见的用例重叠,并以一对多关系插入到多个表中。说到这,我完全打算使用Postgresql 数据类型,并且不使用任何关系表。 问题答案: 您需要创建自己的类型并实现。根据下一个响应,我编写了一个泛型,可
问题内容: 我正在尝试将字节数组插入sqlite数据库的blob列中。我已经尝试过使用setBinaryStream和setBytes,但是我无法通过SQLite JDBC驱动程序异常来实现。我正在使用sqlite-jdbc-3.8.7.jar。我应该使用哪个jar来完成这项工作?谢谢! 这是我的代码: 问题答案: 一旦对象已经与创建 该对象已经处理了命令文本。是时候执行PreparedState
问题内容: 我在将Integer数组插入Postgresql Table时遇到问题,该如何解决? 其中ballNumbers和ballNumbersMegaBall是ArrayList。填充2位数字。 这是PostgreSQL表: 这是Springboot的错误: 发生意外错误(类型=内部服务器错误,状态= 500)。PreparedStatementCallback; 错误的SQL语法[INSE
我在向Postgresql表中插入整数数组时遇到问题,我该怎么做? 其中ball Numbers和ball NumbersMegaBall是ArrayList。用两位数填充。 以下是PostgreSQL表: 这是来自Springboot的错误: 出现意外错误(类型=内部服务器错误,状态=500)。PreparedStatementCallback;错误的SQL语法[INSERT in draw_r
我们使用spring frameworks jdbcTemplate插入数据,如下所示: 但这给出了一个例外: badsqlgrammareXception:PreparedStatementCallback;错误的SQL语法[插入test1值(?,?)];嵌套异常是org.PostgreSQL.util.psqlException:错误:列“id”是整数类型,但表达式是字符变化类型错误:列“id
初始情况:我有这两个实体,杂货清单和产品。 杂货清单:一个杂货清单可以有几种产品。 产品:一个产品可以分配给多个杂货店 实体和关系存储在Postgres中的三个不同表中(一个用于列表,一个用于产品,一个用于关系映射表)。 映射表:映射表"lists_products" 示例产品:Id=4的示例产品 问题是:我正在尝试创建新的列表,这很有效。但是,正如您可以从映射表图像中看到的那样,Hibernat