【问题标题】:How to pass an array object from jdbc code如何从 jdbc 代码传递数组对象
【发布时间】: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);

            }

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

【问题讨论】:

    标签: java jdbc core informix


    【解决方案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]);
    

    相关问题:


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

    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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2021-11-08
    • 1970-01-01
    • 2014-12-28
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多