获得;无效列类型";将java对象序列化到oracle数据库时
我创建了一个数据类型为CLOB的列,当尝试将JAVA对象序列化到该列时,出现以下异常获得;无效列类型";将java对象序列化到oracle数据库时,java,oracle,serialization,Java,Oracle,Serialization,我创建了一个数据类型为CLOB的列,当尝试将JAVA对象序列化到该列时,出现以下异常 INFO: using Agent sizeof engine java.sql.SQLException: Invalid column type at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:8516) at oracle.jdbc.driver.Ora
INFO: using Agent sizeof engine
java.sql.SQLException: Invalid column type
at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:8516)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8034)
at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:8767)
at oracle.jdbc.driver.OraclePreparedStatement.setObject(OraclePreparedStatement.java:8748)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setObject(OraclePreparedStatementWrapper.java:230)
at com.oneshield.service.policyworkflow.ExecuteAsyncTest.writeJavaObject(ExecuteAsyncTest.java:108)
at com.oneshield.service.policyworkflow.ExecuteAsyncTest.testSerializeDesirialize(ExecuteAsyncTest.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
节目是
public static long writeJavaObject(Connection conn, Object object) {
PreparedStatement pstmt;
try
{
pstmt = conn.prepareStatement(writeSQL);
pstmt.setObject(1, object);
pstmt.setLong(2, 23205557351L);
pstmt.executeUpdate();
return 23205557351L;
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0L;
}
public void testSerializeDesirialize() throws Exception
{
String sql = "update sl_service_op_log set request_object = ? where job_id = ?";
Connection connection = dataAccessManager.getConnection();
创建java对象
ServiceLayerOperationRequest serviceLayerOperationRequest = new ServiceLayerOperationRequest();
serviceLayerOperationRequest.setSe`enter code here`ssionId("23133356761");
serviceLayerOperationRequest.setServiceOpInvocationId("Oneshield");
serviceLayerOperationRequest.setTransactionId("1");
writeJavaObject(connection, serviceLayerOperationRequest);
}
我也尝试过使用数据类型作为BLOb。你能添加一些示例代码或告诉我们你是如何做到这一点的代码片段吗,stacktrace本身是没有帮助的!setObject()不会自动序列化。自行序列化为字节数组,并设置保存该字节数组。但如果我是你,我会尽一切办法避免存储序列化的Java对象。