【发布时间】:2013-11-22 10:44:05
【问题描述】:
我正在尝试将 Java 数组传递给 PLSQL 存储过程,但是当我尝试执行时,出现以下异常
java.sql.SQLException: Inconsistent java and sql object types
我的DAO类代码sn-p
List projectList = new ArrayList();
public void saveRecord(List<Project> project)
throws DatabaseException,SQLException {
for (Project items: project) {
insertRecord(items);
}
}
private void insertRecord(Project project) throws SQLException {
projectList.add(project);
callablestatement =
(OracleCallableStatement)connection.prepareCall("{call my_proc(?)}");
Object[] project1 = projectList.toArray();
StructDescriptor projectTypeDesc = StructDescriptor.createDescriptor("MY_TYPE",
conn);
STRUCT structProject1 = new STRUCT(projectTypeDesc,
connection, project);
STRUCT[] structArrayOfProjects = {structProject1};
ArrayDescriptor projectTypeArrayDesc = ArrayDescriptor.createDescriptor
("MY_ARRAY", connection);
ARRAY arrayOfProjects = new ARRAY(projectTypeArrayDesc, connection,
structArrayOfProjects);// error in this line
callablestatement.setArray(1, arrayOfProjects);
我该如何解决这个问题?
编辑 1
如果我这样做
Object[] project1 = new Object[]{project.getProjectId(), project.getProjectTitle()};
然后没有错误和记录被插入到表中。
但是如果我会这样做
Object[] project1 = projectList.toArray();
然后抛出异常Inconsistent java and sql object types
【问题讨论】:
-
你在这里做了一些奇怪的事情,你在这个线程中没有明白我的意思:Pass Array from Java to Oracle。是否有任何特殊原因导致您尝试将一个数组从 Java 传递到 Oracle,其中只有一个元素?无论如何,请提供
Project类的代码以及MY_TYPE和MY_ARRAY类型的定义。 -
@PrzemyslawKruglej 如果我直接将值分配给 Object[],那么它会向表中插入值,但是如果我这样做
projectList.toArray(),我会收到错误消息。我已经用这个更新了我的问题。我是否需要手动将所有值分配给 Object[] 或者我可以遍历projectList并添加到Object[]?
标签: java oracle jdbc plsql oracle10g