如何在PreparedStatement中使用JDBC中的批处理SQL?

时间:2013-03-11 19:10:40

标签: java oracle jdbc

我在执行代码时遇到此错误,该代码应该以批处理模式处理SQL语句:

  

ORA-03115:不支持的网络数据类型或表示

这是代码,运行时生成错误:

public class Login {

    public static void main(String args[]) throws SQLException {
        Connection con = null;
        PreparedStatement stmt = null;
        Statement st = null;
        try {
            Driver driver = new oracle.jdbc.driver.OracleDriver();
            DriverManager.registerDriver(driver);
            System.out.println("coneecting to the database:");
            con = DriverManager.getConnection("url", "user", "pass");
            con.setAutoCommit(false);
            System.out.println("creating statement");
            String sql = "insert into shweta values(?,?)";
            stmt = con.prepareStatement(sql);

            printrows(stmt);

            stmt.setString(1, "love");
            stmt.setInt(2, 45);
            stmt.addBatch();

            stmt.setString(1, "kaun");
            stmt.setInt(2, 29);
            stmt.addBatch();

            int count[] = st.executeBatch();

            con.commit();

            printrows(stmt);

            // printRs(rs);

            st.close();
            stmt.close();
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
            try {
                if (con != null)
                    con.rollback();
            } catch (SQLException en) {
                en.printStackTrace();
            }
        }

        catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null)
                    stmt.close();
            } catch (Exception e) {
            }
            try {
                if (con != null)
                    con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
        System.out.println("good bye ashish");
    }

    public static void printrows(Statement stmt) throws SQLException {
        String sql = "select * from shweta";
        ResultSet rs = stmt.executeQuery(sql);

        while (rs.next()) {
            // Retrieve by column name

            int age = rs.getInt("age");
            String first = rs.getString("auth");

            System.out.print(", Age :    " + age + "\n");
            System.out.print("AUTH :     " + first + "\n");

        }
        System.out.println();
    }
}

我是编码的新手,不确定如何解决此错误,所有帮助表示赞赏。感谢。

3 个答案:

答案 0 :(得分:0)

此版本不支持用户绑定或定义或Oracle功能 异构SQL *网络连接。  升级旧版Oracle,然后重试。

答案 1 :(得分:0)

语句st未初始化 - 并在executeBatch中使用。用于插入的语句stmt不应更改为在printrows中运行另一个sql。

答案 2 :(得分:0)

我发现导致代码抛出异常的问题。原因是我是    将我的陈述初始化为Statement st = con.createstatement();由于哪个    编译器抛出错误。我们不能直接传递预处理语句对象作为参数来执行查询。所以我们如何使用语句并将其引用传递给printrows中的参数。