我的代码在以下行中引发了上述异常(第2行):
final ArrayDescriptor tParamArrayDescriptor = ArrayDescriptor.createDescriptor("MY_SYSTEM.T_PARAM_ARRAY", databaseHandler.getConnection());
final ARRAY oracleArray = new ARRAY(tParamArrayDescriptor, databaseHandler.getConnection(), myObjects.toArray());
Run Code Online (Sandbox Code Playgroud)
它给了我以下例外:
java.sql.SQLException: Fail to convert to internal representation:
Run Code Online (Sandbox Code Playgroud)
这myObjects
是以下POJO的ArrayList:
public class MyObject
{
private String name;
private String surname;
private int age;
...
// Accessors etc..
}
Run Code Online (Sandbox Code Playgroud)
该T_PARAM_ARRAY
数据库上看起来如下:
create or replace
TYPE T_PARAM_ARRAY AS OBJECT (NAME VARCHAR2(50), SURNAME VARCHAR2(50), AGE NUMBER(1));
Run Code Online (Sandbox Code Playgroud)
经过一些研究,我认为我的POJO和数据库类型之间的数据类型映射不能正确匹配.我有理由相信String匹配到VARCHAR2确定,但我认为转换int
为a时存在问题NUMBER
.
我尝试过使用BigDecimal,但这并没有改善这种情况.
有什么建议?
编辑:根据Oracle文档:Where intArray is an oracle.sql.ARRAY, corresponding to a VARRAY of …
我想转换我的Object[] Array
in oracle.sql.ARRAY
,所以我可以将它插入到我的 Oracle 数据库 (12c) 中。
public class Datatransfer{
public static void main(String[] args) throws SQLException, ClassNotFoundException{
Connection accessConn = null;
Connection oracleConn = null;
Statement stmt = null;
ResultSet rs = null;
String mySelectSQL = "Select * from Supplier";
try{
oracleConn = DBConnection.connOracle();
accessConn = DBConnection.connAccess();
stmt = accessConn.createStatement();
rs = stmt.executeQuery(mySelectSQL);
while(rs.next()){
do_something...
Object[] addressArray = {rs.getString("Street"),
rs.getString("Location"),
rs.getString("Region"),
rs.getString("Postcode"),
rs.getString("Country")};
oracle.sql.ARRAY myAddressArray =
((oracle.jdbc.OracleConnection)oracleConn).
createARRAY("ADDRESS_ARRAY", addressArray);
do_something...
}
catch(SQLException | ClassNotFoundException e)
{e.printStrackTrace();} …
Run Code Online (Sandbox Code Playgroud)