代码之家  ›  专栏  ›  技术社区  ›  MetroidFan2002

如何将ArrayList绑定到Oracle中的PreparedStatement?

  •  5
  • MetroidFan2002  · 技术社区  · 17 年前

    我想知道是否有办法将ArrayList(或任何类型的列表)绑定到PreparedStatement,该语句最终将用于访问Oracle数据库。我发现:

    PreparedStatement IN clause alternatives?

    3 回复  |  直到 9 年前
        1
  •  5
  •   erickson    17 年前

    不能将列表绑定到已准备语句中的单个参数。

    为列表中的每个元素生成带有参数标记的SQL,例如:

    SELECT NAME FROM ITEM WHERE ID IN (?, ?, ?, ?)
    

    PreparedStatement . 如果您的列表包含 String

    但即使是安全型的,比如 Integer 对象,一些驱动程序或中间件可以缓存 PreparedStatements

        2
  •  3
  •   Dave Costa    17 年前

    你不能直接绑定它。有一种方法可以将数组作为参数传递。我不知道你想在数据库方面用它做什么,所以这可能对你没有帮助。

    基本上,您必须在数据库中创建嵌套表类型;基于该类型构建一个Java对象,其中包含来自数组的数据;并将其作为参数传递。

    如果在数据库中创建了这些对象:

    CREATE OR REPLACE TYPE my_nested_table IS TABLE OF VARCHAR2(20);
    CREATE TABLE my_table (a  my_nested_table) NESTED TABLE a STORE AS my_table_a;
    

    然后您可以编写如下Java代码:

    String[] insertvalues = { "a", "b", "c" };
    PreparedStatement p = conn.prepareStatement("INSERT INTO my_table VALUES( ? )");
    ARRAY insertParameter = new ARRAY( a_desc, conn, insertvalues );
    p.setArray( 1, insertParameter );
    p.execute();
    

    dev> select * from my_table;
    
    A
    --------------------------------------------------------------------------------
    MY_NESTED_TABLE('a', 'b', 'c')
    
        3
  •  0
  •   fospathi Eddie    5 年前

    好吧,从这个问题的答案来看,尤其是对我在那个问题上错误答案的评论,你不能。

    https://docs.oracle.com/javase/1.5.0/docs/guide/jdbc/getstart/mapping.html#996857 .

    推荐文章