使用Java通过存储过程插入Oracle JDBC

使用Java通过存储过程插入Oracle JDBC,java,oracle,Java,Oracle,我正在尝试使用Java在Oracle11g中插入一条记录。我还在学Java 我必须调用存储过程来插入记录。我在users表中的主键是user\u id。我还有一个user\u id递增2的序列 现在,在Java中设置输入参数时,我需要传递什么用户id?此外,如果日期参数为: Users:user_id number (primary key), email varchar, created_date Date 我有以下java代码: Class.forName("oracle.

我正在尝试使用Java在Oracle11g中插入一条记录。我还在学Java

我必须调用存储过程来插入记录。我在users表中的主键是user\u id。我还有一个user\u id递增2的序列

现在,在Java中设置输入参数时,我需要传递什么用户id?此外,如果日期参数为:

Users:user_id number (primary key), email varchar, created_date Date
我有以下java代码:

        Class.forName("oracle.jdbc.OracleDriver");          
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@101.12.11.11:1521:demo", "demo_app", "demo");

        CallableStatement cs = conn.prepareCall("{exec demo.my_pkg.insert_users(?,?,?)}");
        cs.registerOutParameter(1, Types.INTEGER);
        cs.setInt(1, ?????);

        cs.execute();
我需要在这里设置用户id吗?如果是,我应该将其设置为什么,因为它是一个序列? 日期字段和电子邮件字段呢


我需要这里的registerOutParameter吗?若然,原因为何

最后,我如何确认插入成功


谢谢

如果存储过程中没有用户id的触发器/计算,那么,是的,您需要从Java代码中传递用户id(获取Java中的下一个序列值,并将其传递给存储函数)。 如果函数返回值,则需要注册出参数。
确认取决于执行情况。例如,如果您的函数返回值是否由用户插入,只需检查返回值。

此处是否需要registerOutParameter?若然,原因为何

是的,如果存储过程返回任何值(即它是一个函数),则需要registerOutParameter

要设置日期字段,请使用java.sql.date类作为类型

  • 我需要在这里设置用户id吗? RE:您可以在设置序列值之前获取它:

    从dual中选择sequence_name.nextval


  • 我需要这里的registerOutParameter吗?若然,原因为何? RE:如果您想获得返回值,可以使用registerOutParameter,如果不需要,请忽略它

  • 如何确认插入成功? RE:您可以从out参数或过程的返回值获取结果


  • 如果我有序列的触发器呢?我需要在参数中传递什么?在这种情况下,用户id是在您的数据库中生成的,您不应该从java传递它。若你们有一个触发器,为什么在存储过程中有用户id参数?我可以直接将序列作为CallableStatement cs=conn.prepareCall(“{exec demo.my_pkg.insert_users(seq_users.nextval,,?)}”)传递吗;