精华内容
下载资源
问答
  • java调用存储过程实例

    2009-02-17 17:17:08
    java调用存储过程实例,详细实例!!!!!!!!!
  • NULL 博文链接:https://dolphin-ygj.iteye.com/blog/436936
  • package ...import java.sql.CallableStatement;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.text...

    package com.xxx.srm.sourcing.service.impl;

    import java.sql.CallableStatement;

    import java.sql.Connection;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.sql.Statement;

    import java.text.DecimalFormat;

    import java.util.ArrayList;

    import java.util.HashMap;

    import java.util.List;

    import java.util.Map;

    import org.apache.ibatis.session.SqlSession;

    import org.apache.ibatis.session.SqlSessionFactory;

    import org.mybatis.spring.SqlSessionFactoryBean;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.stereotype.Service;

    import com.framework.common.util.StringUtil;

    @Service

    public class QuarterPeDao {

    @Autowired

    private SqlSessionFactoryBean sqlSessionFactory;

    public Map executeOracleStoredProcedure(String peNum){

    CallableStatement cstmt = null;

    ResultSet rs1=null;

    ResultSet rs2=null;

    String param="$per_num$="+peNum;

    Map map=new HashMap();

    List works=new ArrayList();

    float count=0;

    DecimalFormat df = new DecimalFormat("0.00");

    try {

    SqlSessionFactory factory= sqlSessionFactory.getObject();

    SqlSession session=factory.openSession();

    Connection connect=session.getConnection();

    cstmt = connect.prepareCall("{CALL pkg_public_int.get_data(?,?,?,?,?)}");

    cstmt.setString(1, "PE_INIT");

    cstmt.setString(2, param);

    cstmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);

    cstmt.registerOutParameter(4, oracle.jdbc.OracleTypes.CURSOR);

    cstmt.registerOutParameter(5, oracle.jdbc.OracleTypes.FLOAT);

    cstmt.execute();

    rs1=(ResultSet) cstmt.getObject(3);

    rs2=(ResultSet) cstmt.getObject(4);

    count=cstmt.getFloat(5);

    List> resultList=new ArrayList>();

    while(rs2.next()){

    String site=rs2.getString(1);

    works.add(site);

    }

    String[] header = new String[works.size()];

    header=works.toArray(header);

    while (rs1.next()) {

    Map mapObj = new HashMap();

    mapObj.put("companyCode", rs1.getString("COMPANY_CODE"));

    mapObj.put("itemCode",rs1.getString("ITEMGROUPOUT_CODE"));

    mapObj.put("vendorCode", rs1.getString("VENDOR_CODE"));

    mapObj.put("vendorName", rs1.getString("VENDOR_NAME"));

    mapObj.put("year", rs1.getString("YEAR"));

    mapObj.put("quarter", rs1.getString("QUARTER"));

    for(int j = 0; j < header.length; j++){

    String qty = rs1.getString("QTY_" + header[j])+"";

    String je = rs1.getString("JE_" + header[j]);

    if (!StringUtil.isEmpty(qty)) {

    qty = df.format(Double.parseDouble(qty)) + "%";

    }

    if (!StringUtil.isEmpty(je)) {

    je = df.format(Double.parseDouble(je)) + "%";

    }

    mapObj.put("qty"+header[j], qty);

    mapObj.put("je"+header[j], je);

    mapObj.put("fqty"+header[j], rs1.getString("FQTY_" + header[j]));

    mapObj.put("fje"+header[j], rs1.getString("FJE_" + header[j]));

    }

    resultList.add(mapObj);

    }

    map.put("works", header);

    map.put("list", resultList);

    map.put("count", count);

    }

    catch (Exception e) {

    e.printStackTrace();

    }finally{

    close(cstmt);

    }

    return map;

    }

    public void close(Statement stat)

    {

    try

    {

    if (stat != null)

    {

    stat.close();

    }

    }

    catch (SQLException e)

    {

    e.printStackTrace();

    }

    }

    }

    展开全文
  • 创建BOOK表CREATE TABLE BOOK(ID VARCHAR2(200),NAME VARCHAR2(200),describle VARCHAR2(200))创建存储过程create or replace procedure book_procedure(v_name in varchar2,v_describle varchar2)isv_sql varchar2...

    创建BOOK表

    CREATE TABLE BOOK(

    ID VARCHAR2(200),

    NAME VARCHAR2(200),

    describle VARCHAR2(200)

    )

    创建存储过程

    create or replace procedure book_procedure(

    v_name in varchar2,

    v_describle varchar2)

    is

    v_sql varchar2(200);

    v_id_number number(20);

    v_id_varchar varchar2(200);

    begin

    v_sql:='select count(*) from book';

    execute immediate v_sql into v_id_number;

    v_id_varchar:=to_char(sysdate,'yyyymmdd')||'0000'+v_id_number;

    insert into book(id,name,describle) values (v_id_varchar,v_name,v_describle);

    end;

    dao层调用

    //添加

    public void addBook(String name,String describle){

    try {

    this.getJdbcTemplate().execute("call book_procedure('"+name+"','"+describle+"')");

    } catch (Exception e) {

    logger.error(e.getMessage(), e);

    }

    }

    service调用

    //添加

    public void addBook(String name,String describle){

    bookDao.addBook(name, describle);

    }

    @RequestMapping("/addBook")

    public ModelAndView addSerial(HttpServletRequest request) {

    String name = request.getParameter("name");

    String describle = request.getParameter("describle");

    bookService.addBook(name, describle);

    return findSerialList(request);

    }

    af7c2973f4bb4575d379becb22ca6f76.png

    展开全文
  • 本文实例讲述了java调用MysqL存储过程的方法。分享给大家供大家参考。具体如下:数据库的测试代码如下 :1、新建表testcreate table test(field1 int not null)TYPE=MyISAM ;insert into test(field1) values(1);2、...

    本文实例讲述了java调用MysqL存储过程的方法。分享给大家供大家参考。具体如下:

    数据库的测试代码如下 :

    1、新建表test

    create table test(

    field1 int not null

    )

    TYPE=MyISAM ;

    insert into test(field1) values(1);

    2、删除已存在的存储过程:

    -- 删除储存过程

    delimiter // -- 定义结束符号

    drop procedure p_test;

    3、MysqL存储过程定义:

    create procedure p_test()

    begin

    declare temp int;

    set temp = 0;

    update test set field1 = values(temp);

    end

    CallableStatement cStmt = conn.prepareCall("{call p_test()}");

    cStmt.executeUpdate();

    import java.sql.*;

    /**

    iGoder

    */

    public class ProcedureTest {

    /*

    表和存储过程定义如下:

    delimiter //

    DROP TABLE if exists test //

    CREATE TABLE test(

    id int(11) NULL

    ) //

    drop procedure if existssp1 //

    create procedure sp1(in p int)

    comment 'insert into a int value'

    begin

    declare v1 int;

    set v1 = p;

    insert into test(id) values(v1);

    end

    //

    drop procedure if exists sp2 //

    create procedure sp2(out p int)

    begin

    select max(id) into p from test;

    end

    //

    drop procedure if exists sp6 //

    create procedure sp6()

    begin

    select * from test;

    end//

    */

    public static void main(String[] args) {

    //callIn(111);

    //callOut();

    callResult();

    }

    /**

    * 调用带有输入参数的存储过程

    * @param in stored procedure input parametervalue

    */

    public static void callIn(int in){

    //获取连接

    Connection conn = ConnectDb.getConnection();

    CallableStatement cs = null;

    try {

    //可以直接传入参数

    //cs = conn.prepareCall("{call sp1(1)}");

    //也可以用问号代替

    cs = conn.prepareCall("{call sp1(?)}");

    //设置第一个输入参数的值为110

    cs.setInt(1,in);

    cs.execute();

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

    try {

    if(cs != null){

    cs.close();

    }

    if(conn != null){

    conn.close();

    }

    } catch (Exception ex) {

    ex.printStackTrace();

    }

    }

    }

    /**

    * 调用带有输出参数的存储过程

    *

    */

    public static void callOut() {

    Connection conn = ConnectDb.getConnection();

    CallableStatement cs = null;

    try {

    cs = conn.prepareCall("{call sp2(?)}");

    //第一个参数的类型为Int

    cs.registerOutParameter(1,Types.INTEGER);

    cs.execute();

    //得到第一个值

    int i = cs.getInt(1);

    System.out.println(i);

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

    try {

    if(cs != null){

    cs.close();

    }

    if(conn != null){

    conn.close();

    }

    } catch (Exception ex) {

    ex.printStackTrace();

    }

    }

    }

    /**

    * 调用输出结果集的存储过程

    */

    public static void callResult(){

    Connection conn = ConnectDb.getConnection();

    CallableStatement cs = null;

    ResultSet rs = null;

    try {

    cs = conn.prepareCall("{call sp6()}");

    rs = cs.executeQuery();

    //循环输出结果

    while(rs.next()){

    System.out.println(rs.getString(1));

    }

    } catch (Exception e) {

    e.printStackTrace();

    } finally {

    try {

    if(rs != null){

    rs.close();

    }

    if(cs != null){

    cs.close();

    }

    if(conn != null){

    conn.close();

    }

    } catch (Exception ex) {

    ex.printStackTrace();

    }

    }

    }

    }

    /**

    *获取数据库连接的类

    */

    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.PreparedStatement;

    import java.sql.ResultSet;

    import java.sql.sqlException;

    import java.sql.Statement;

    class ConnectDb {

    public static Connection getConnection(){

    Connection conn = null;

    PreparedStatement preparedstatement = null;

    try {

    Class.forName("org.gjt.mm.MysqL.Driver").newInstance();

    String dbname = "test";

    String url="jdbc:MysqL://localhost/"+dbname+"?user=root&password=root&useUnicode=true&characterEncoding=8859_1";

    conn= DriverManager.getConnection(url);

    } catch (Exception e) {

    e.printStackTrace();

    }

    return conn;

    }

    }

    希望本文所述对大家的java程序设计有所帮助。

    相关文章

    总结

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

    展开全文
  • 共4个 一.只有输入参数没有返回结果的存储过程 ...四、Hibernate调用oracle存储过程     一.只有输入参数没有返回结果的存储过程 建表 create table table_1(id varchar2(10),name varchar2(10));

    共4个

    一.只有输入参数没有返回结果的存储过程

    二. 有输入和有一个返回值的存储过程

    三、返回多行记录的存储过程(返回的是游标)

    四、Hibernate调用oracle存储过程

     

     

    一.只有输入参数没有返回结果的存储过程

    建表 create table table_1(id varchar2(10),name varchar2(10));

     

    --没有返回值的存储过程
    create or replace procedure prc_1(t_id in varchar2,t_name in varchar2)
    as 
     begin 
      insert into table_1 values(t_id,t_name); 
    end prc_1;

     

    1.在sql plus 中执行
    SQL> exec prc_1('1','杨2');
    PL/SQL procedure successfully completed

    2. 在java 中执行,返回结果
         Class.forName("oracle.jdbc.OracleDriver").newInstance();
         String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
         String user = "atf_ygj";
         String password = "mas123";
         conn = DriverManager.getConnection(url, user, password);
         conn.setAutoCommit(false);
         cstmt = conn.prepareCall("{ call prc_1(?,?) }");
         cstmt.setString(1, "100");

         cstmt.setString(2, "TestOne");

         cstmt.execute();
         conn.commit();

     

    ========================================

    二. 有输入和有一个返回值的存储过程

    --有一个返回值的存储过程
    create or replace procedure prc_2(t_id IN VARCHAR2,t_name OUT VARCHAR2)  AS
    begin
       SELECT name INTO t_name FROM table_1 WHERE id= t_id and rownum<2; 
    end prc_2;

    1. 在sql plus中执行,返回结果
    SQL> var name varchar2(100);
    SQL> exec prc_2('1',:name);

    PL/SQL procedure successfully completed
    name
    ---------
    杨2


    2. 在java 中执行,返回结果
     Class.forName("oracle.jdbc.OracleDriver").newInstance();
     String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
     String user = "atf_ygj";
     String password = "mas123";
     conn = DriverManager.getConnection(url, user, password);
     conn.setAutoCommit(false);
     cstmt = conn.prepareCall("{ call prc_2(?,?) }");
     cstmt.setString(1, "1");
     cstmt.registerOutParameter(2, Types.VARCHAR);
     cstmt.execute();
     conn.commit();
     String testPrint = cstmt.getString(2);
     System.out.println("返回值:::::: " + testPrint);

    输出:
    返回值:::::: 杨2

     

    三、返回多行记录的存储过程(返回的是游标)

     

    由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,

    1,  建一个程序包。
    create or replace package test_package as
     type test_CURSOR is ref cursor;
    end test_package;

    2,建立存储过程,存储过程为:
    create or replace procedure prc_3(p_CURSOR out test_package.test_CURSOR) is 
    begin
        OPEN p_CURSOR FOR SELECT * FROM table_1 order by id;
    end prc_3;
    可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。


    ===========================
    3.在java中的执行
      Class.forName("oracle.jdbc.OracleDriver").newInstance();
         String url = "jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";
         String user = "atf_ygj";
         String password = "mas123";
         conn = DriverManager.getConnection(url, user, password);
         cstmt = conn.prepareCall("{ call prc_3(?) }");
         cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
         cstmt.execute();
         rs = (ResultSet) cstmt.getObject(1);
         while (rs.next())
         {
                  System.out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
         }
    输出结果:
    <tr><td>1</td><td>杨2</td></tr>
    <tr><td>100</td><td>TestOne</td></tr>
    <tr><td>100</td><td>杨1</td></tr>
    <tr><td>100</td><td>TestOne</td></tr>
    <tr><td>200</td><td>Test2</td></tr>

    4.在sql plus中执行
    用一个存储过程调用prc_3

    create or replace procedure prc_4 is
    c test_package.test_CURSOR; 
    id varchar2(100); 
    name varchar2(100); 
    begin 
    prc_3(c); 
    LOOP 
         FETCH c INTO id,name; 
    EXIT WHEN c%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE('=='||id||'==='||name); 
    END LOOP; 
    CLOSE c; 
    end prc_4;

    执行
    SQL> set serveroutput on;
    SQL> exec dbms_output.enable(999999999999999999999);

    PL/SQL procedure successfully completed

    SQL> exec prc_4;

    ==1===杨2
    ==100===TestOne
    ==100===杨1
    ==100===TestOne
    ==200===Test2

    PL/SQL procedure successfully completed

     

    四、Hibernate调用oracle存储过程

    private void prc_test()
        {
     getHibernateTemplate().execute(new HibernateCallback()
     {
         public Object doInHibernate(Session session) throws HibernateException, SQLException
         {
      CallableStatement cstmt = session.connection().prepareCall("{ call prc_3(?) }");
      cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
      cstmt.execute();
      ResultSet rs = (ResultSet) cstmt.getObject(1);
      while (rs.next())
      {
          System.out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
      }
      return null;
         }
     }, true);
        }


    ----------------------------------------------------------------------------------------------------------------------------------

    此文档由转载而来


    展开全文
  • JavaOracleSQLJDBCHibernate 共4个 一.只有输入参数没有返回结果的...四、Hibernate调用oracle存储过程 一.只有输入参数没有返回结果的存储过程 建表 create table table_1(id varchar2(10),name varcha...
  • import java.sql.*; import javax.sql.*; import javax.naming.*; ......   private int InsertProject(HttpServletRequest request, HttpServletResponse response)  {  int Result = -1;    // 调用
  • Java调用存储过程实例

    2011-09-22 16:43:22
     * 调用只是查询的存储过程,没有任何参数(sqlserver2005)  * 存储过程如下:  * create procedure p_findName  * as  * select studentname from student;  * go  */  public void find...
  • 共4个 ...四、Hibernate调用oracle存储过程     一.只有输入参数没有返回结果的存储过程 建表 create table table_1(id varchar2(10),name varchar2(10));   --没有返回值的存储过程cr...
  • Java直接调用存储过程实例
  • 本文实例讲述了java调用mysql存储过程的方法。分享给大家供大家参考。具体如下:数据库的测试代码如下 :1、新建表testcreate table test(field1 int not null)TYPE=MyISAM ;insert into test(field1) values(1);2、...
  • java 调用 mysql存储过程实例
  • 主要介绍了java调用mysql存储过程的方法,以实例形式较为详细的分析了mysql数据库的建立和存储过程的实现方法,需要的朋友可以参考下
  • java调用存储过程

    2008-03-25 22:06:15
    java调用存储过程实例详解
  • 实例java调用存储过程 摘要:java调用存储过程,有四种情况,下面进行详细介绍。标签:java调用存储过程 java调用存储过程,有四种情况,下面进行详细介绍。 一.只有输入参数没有...
  • 一个完整的java调用Oracle存储过程实例,含存储过程和代码注释
  • 详解java调用存储过程并封装成map本文代码中注释写的比较清楚不在单独说明,希望能帮助到大家,实例代码:public List> doCallProcedure(String procedureString,String[] parameters)throws ...
  • 1、使用不带参数的存储过程使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列。不带参数的 call 转义序列的语法如下所示:{call procedure-name} 作为实例,在 SQL Server 2005 ...
  • 0.1 删除存储过程 drop procedure test_xg_pt; 0.2 sql/plus中调用存储过程,显示结果 set serveoutput on --打开输出 var info1 number; --输出1 var info2 number; --输出2 declare var1 varchar2(20); ...
  • 建立存储过程: in 型: delimiter // create procedure demo_in(in p_in int) begin select p_in; set p_in=2; select p_in; end; // delimiter ; java测试代码: CallableStatement callstatement = conn....
  • 相关API:Java.sql.CallableStatement使用到java.sql.CallableStatement接口,该接口专门用来调用存储过程;该对象的获得依赖于java.sql.Connection;通过Connection实例的prepareCall()方法返回CallableStatement对象...
  • JAVA调用MYSQL存储过程 实例

    千次阅读 2016-04-05 09:46:02
    类ProcedureTest import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Types; public class Procedure...* 表和存储过程定义如下: delimiter // *

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 648
精华内容 259
关键字:

java调用存储过程实例

java 订阅