如何从 jdbc 代码传递数组对象

Posted

技术标签:

【中文标题】如何从 jdbc 代码传递数组对象【英文标题】:How to pass an array object from jdbc code 【发布时间】:2010-07-14 16:53:30 【问题描述】:

我在informix 11.5 数据库中有一个存储过程get_data(estargs set(char(1000) not null))。我必须使用此存储过程才能从数据库中获取值。

我尝试使用这种方式但失败了:

conn = dataSource.getConnection();
            String [] arrayObj="and code = 'Value1'","and lmt= 10000.000";
            CallableStatement test=conn.prepareCall("call get_data(?)");
            test.setObject(1, arrayObj);
            test.execute();
            ResultSet testrs = test.getResultSet();
            while (testrs.next()) 
                int data = testrs.getInt(1);
                System.out.println(data);

            

这不起作用。你觉得我做错了什么?

【问题讨论】:

【参考方案1】:

这是不可能的。替换

conn.prepareCall("call get_data(?)");

通过

conn.prepareCall("call get_data(?, ?)");

替换

test.setObject(1, arrayObj);

通过

test.setObject(1, arrayObj[0]);
test.setObject(2, arrayObj[1]);

相关问题:

How to set multiple values in IN clause?

更新:使其更加“动态”,您希望借助以下两种实用方法自己生成和填充占位符:

public static String preparePlaceHolders(int length) 
    StringBuilder builder = new StringBuilder(length * 2 - 1);
    for (int i = 0; i < length; i++) 
        if (i > 0) builder.append(',');
        builder.append('?');
    
    return builder.toString();


public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException 
    for (int i = 0; i < values.length; i++) 
        preparedStatement.setObject(i + 1, values[i]);
    

可以这样使用:

private static final String SQL_CALL_GET_DATA = "call get_data(%s)";

// ...
String sql = String.format(SQL_CALL_GET_DATA, preparePlaceholders(arrayObj.length));
statement = connection.prepareCall(sql);
setValues(statement, arrayObj);
// ...

【讨论】:

我不能这样做,因为我只能在运行时知道我在存储过程中传递了多少参数。 您是否点击了“相关问题”链接?它包含一个如何生成?,?,? 等并动态填充它的示例。【参考方案2】:

您是否尝试过使用java.sql.Array?

【讨论】:

我看到了,但我不知道如何将 Java Array 转换为 java.sql.Array。

以上是关于如何从 jdbc 代码传递数组对象的主要内容,如果未能解决你的问题,请参考以下文章

如何传递连接代码?

如何在调用WebService方法时,传递对象数组参数

数组应该如何从 C# 传递给 Javascript 函数?

如何通过单击按钮从反应状态挂钩数组中删除对象

如何在Javascript中从数组中提取值

Form表单如何传递List数组对象到后台的解决办