栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JDBC批处理INSERT,返回ID

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC批处理INSERT,返回ID

我假设这是关于Oracle的。据我所知,这是不可能的,但是您可以

FORALL
在匿名PL /
SQL块中使用进行批量插入,如我最近写的这篇文章中所述:https://codingdict.com/blog/1619

这是本文中的一个自包含的JDBC示例,该示例插入值数组,然后将结果批量收集回JDBC客户端:

try (Connection con = DriverManager.getConnection(url, props);    Statement s = con.createStatement();    // The statement itself is much more simple as we can    // use OUT parameters to collect results into, so no    // auxiliary local variables and cursors are needed    CallableStatement c = con.prepareCall(        "DECLARE "      + "  v_j t_j := ?; "      + "BEGIN "      + "  FORALL j IN 1 .. v_j.COUNT "      + "    INSERT INTO x (j) VALUES (v_j(j)) "      + "    RETURNING i, j, k "      + "    BULK COLLECT INTO ?, ?, ?; "      + "END;")) {    try {        // Create the table and the auxiliary types        s.execute( "CREATE TABLE x ("          + "  i INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,"          + "  j VARCHAr2(50),"          + "  k DATE DEFAULT SYSDATE"          + ")");        s.execute("CREATE TYPE t_i AS TABLE OF NUMBER(38)");        s.execute("CREATE TYPE t_j AS TABLE OF VARCHAr2(50)");        s.execute("CREATE TYPE t_k AS TABLE OF DATE");        // Bind input and output arrays        c.setArray(1, ((OracleConnection) con).createARRAY( "T_J", new String[] { "a", "b", "c" })        );        c.registerOutParameter(2, Types.ARRAY, "T_I");        c.registerOutParameter(3, Types.ARRAY, "T_J");        c.registerOutParameter(4, Types.ARRAY, "T_K");        // Execute, fetch, and display output arrays        c.execute();        Object[] i = (Object[]) c.getArray(2).getArray();        Object[] j = (Object[]) c.getArray(3).getArray();        Object[] k = (Object[]) c.getArray(4).getArray();        System.out.println(Arrays.asList(i));        System.out.println(Arrays.asList(j));        System.out.println(Arrays.asList(k));    }    finally {        try { s.execute("DROP TYPE t_i"); s.execute("DROP TYPE t_j"); s.execute("DROP TYPE t_k"); s.execute("DROP TABLE x");        }        catch (SQLException ignore) {}    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390459.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号