<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,  comments - 11,  trackbacks - 0
    > 引言
    日常開發(fā)中,使用Oracle存儲(chǔ)過程,有時(shí)候會(huì)處理返回多個(gè)游標(biāo)的情況,下面介紹使用 Jorm 框架來處理這一情況

    > 數(shù)據(jù)庫準(zhǔn)備
    1.表
    CREATE TABLE `t_user` (                
            `id` 
    int(11NOT NULL,               
            `name` 
    varchar(50DEFAULT NULL,     
            `sex` 
    char(4DEFAULT NULL,          
            `age` 
    int(11DEFAULT NULL,          
            `career` 
    varchar(100DEFAULT NULL,  
            
    PRIMARY KEY (`id`)                   
    ) ENGINE
    =InnoDB DEFAULT CHARSET=utf8;

    2.存儲(chǔ)過程
    -- 定義存儲(chǔ)過程
    CREATE OR REPLACE PROCEDURE pro_query_users
    (
    --參數(shù)IN表示輸入?yún)?shù),OUT表示輸入?yún)?shù),類型可以使用任意Oracle中的合法類型。
     in_id IN NUMBER,
     out_cursor_one OUT package_one.cursor_one,
     out_cursor_two OUT package_two.cursor_two     
    )
    AS
    --定義變量
     vs_id_value   NUMBER;  --變量
     
    BEGIN
     
    --用輸入?yún)?shù)給變量賦初值。
     vs_id_value:= in_id;

     
    OPEN out_cursor_one FOR SELECT * FROM t_user WHERE id > vs_id_value;
     
     
    OPEN out_cursor_two FOR SELECT * FROM t_user WHERE name LIKE '%a%';
     
     
    --錯(cuò)誤處理部分。OTHERS表示除了聲明外的任意錯(cuò)誤。SQLERRM是系統(tǒng)內(nèi)置變量保存了當(dāng)前錯(cuò)誤的詳細(xì)信息。
    Exception
       
    WHEN OTHERS Then
       
    ROLLBACK;
       
    Return;
    End pro_query_users;


    > 代碼
    1.實(shí)體類 User.java

    import org.javaclub.jorm.annotation.Entity;
    import org.javaclub.jorm.annotation.Id;
    import org.javaclub.jorm.annotation.NoColumn;
    import org.javaclub.jorm.annotation.PK;

    @Entity(table 
    = "t_user", lazy = true)
    @PK(value 
    = "id")
    public  class  User  {

        @Id
        
    private int id;

        
    private String name;

        
    private String sex;

        
    private Integer age;

        
    private String career;

        @NoColumn
        
    private int kvalue;

        
    public User() {
            
    super();
        }

        
    public User(String name, String sex, Integer age, String[] career) {
            
    super();
            
    this.name = name;
            
    this.sex = sex;
            
    this.age = age;
            
    this.career = career;
        }

        
    public int getId() {
            
    return id;
        }

        
    public void setId(int id) {
            
    this.id = id;
        }

        
    public String getName() {
            
    return name;
        }

        
    public void setName(String name) {
            
    this.name = name;
        }

        
    public String getSex() {
            
    return sex;
        }

        
    public void setSex(String sex) {
            
    this.sex = sex;
        }

        
    public Integer getAge() {
            
    return age;
        }

        
    public void setAge(Integer age) {
            
    this.age = age;
        }

        
    public String[] getCareer() {
            
    return career;
        }

        
    public void setCareer(String[] career) {
            
    this.career = career;
        }

        
    public int getKvalue() {
            
    return kvalue;
        }

        
    public void setKvalue(int kvalue) {
            
    this.kvalue = kvalue;
        }

        
    public String toString() {
            StringBuffer sb 
    = new StringBuffer();
            sb.append(
    "[" + id + "" + name + "" + sex + "" + age + "" + career + "]");
            
    return sb.toString();
        }
    }

    2.測試

    import java.sql.CallableStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Types;
    import java.util.ArrayList;
    import java.util.List;

    import org.javaclub.jorm.Jorm;
    import org.javaclub.jorm.Session;
    import org.javaclub.jorm.common.Numbers;
    import org.javaclub.jorm.common.Strings;
    import org.javaclub.jorm.demos.entity.User;
    import org.javaclub.jorm.jdbc.callable.ProcedureCaller;
    import org.javaclub.jorm.jdbc.sql.SqlParams;
    import org.junit.AfterClass;
    import org.junit.Assert;
    import org.junit.BeforeClass;
    import org.junit.Test;

    /**
     * ProcedureTest
     *
     * 
    @author <a href="mailto:gerald.chen.hz@gmail.com">Gerald Chen</a>
     * 
    @version $Id: ProcedureTest.java 2011-8-25 下午06:18:17 Exp $
     
    */
    public class ProcedureTest {

        
    static Session session;

        @BeforeClass
        
    public static void setUpBeforeClass() throws Exception {
            session 
    = Jorm.getSession();
        }
        
        @AfterClass
        
    public static void destroyAfterClass() {
            Jorm.free();
        }

        
        @Test
        
    public void save_user() {
            session.clean(User.
    class);
            User user 
    = null;
            
    for (int i = 0; i < 1600; i++) {
                String sex 
    = (i % 2 == 0 ? "" : "");
                user 
    = new User(Strings.fixed(5), sex, Numbers.random(98), Strings.random(8));
                session.save(user);
            }
        }
        
        @Test
        
    public void oracle_load_two_cursor() {
            
            save_user();
            
            
    final String pro = "{call pro_query_users(?, ?, ?)}";
            
    final List<User> gtIdUsers = new ArrayList<User>();
            
    final List<User> likeNameUsers = new ArrayList<User>();
            
            session.call(
    new ProcedureCaller() {
                
                
    public CallableStatement prepare() throws SQLException {
                    CallableStatement cs 
    = this.getSession().getConnection().prepareCall(pro);
                    cs.setInt(
    120);
                    cs.registerOutParameter(
    2,oracle.jdbc.OracleTypes.CURSOR);
                    cs.registerOutParameter(
    3,oracle.jdbc.OracleTypes.CURSOR); 
                    
    return cs;
                }
                
                
    public String callback(CallableStatement cs) throws SQLException {
                    cs.execute();
                    ResultSet rsOne 
    = (ResultSet) cs.getObject(2);//返回第一個(gè)游標(biāo)
                    ResultSet rsTwo = (ResultSet) cs.getObject(3);//返回第二個(gè)游標(biāo)
                    while(rsOne != null && rsOne.next()) {
                        gtIdUsers.add(session.getPersister().toBean(rsOne, User.
    class));
                    }
                    
    while(rsTwo != null && rsTwo.next()) {
                        likeNameUsers.add(session.getPersister().toBean(rsTwo, User.
    class));
                    }
                    
    return null;
                }
            });
            
            Assert.assertTrue(gtIdUsers.size() 
    > 0);
            System.out.println(gtIdUsers.size() 
    + " => " + gtIdUsers);
            
            Assert.assertTrue(likeNameUsers.size() 
    > 0);
            System.out.println(likeNameUsers.size() 
    + " => " + likeNameUsers);
        }
    }

    項(xiàng)目地址:http://javaclub.sourceforge.net/jorm.html
    下載地址: http://sourceforge.net/projects/javaclub/files/jorm/
    posted on 2011-09-23 16:17 jadmin 閱讀(1272) 評(píng)論(1)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 性色午夜视频免费男人的天堂 | 日韩精品在线免费观看| 亚洲精品自产拍在线观看动漫| 永久免费在线观看视频| 成人免费看吃奶视频网站| 美女羞羞免费视频网站| 国产美女无遮挡免费视频网站 | 免费毛片a在线观看67194| 亚洲精品日韩专区silk| 6080午夜一级毛片免费看| 亚洲乱亚洲乱妇24p| 亚洲韩国精品无码一区二区三区 | 亚洲精品在线免费观看视频| 永久在线毛片免费观看| 亚洲精品伦理熟女国产一区二区| 中文字幕无码播放免费| 美景之屋4在线未删减免费| 亚洲v高清理论电影| 亚洲高清视频免费| 特黄特色的大片观看免费视频| 亚洲国产午夜福利在线播放| 一个人看的hd免费视频| 国产精品亚洲一区二区三区在线| 国产麻豆视频免费观看| 亚洲一卡2卡3卡4卡5卡6卡| 国产又粗又猛又爽又黄的免费视频| 两个人看的www高清免费观看| 亚洲2022国产成人精品无码区 | 国产精品免费播放| 亚洲国产精品免费在线观看| 亚洲国产人成网站在线电影动漫| 全部免费毛片在线| 在线观看av永久免费| 久久国产精品免费观看| 日韩精品无码永久免费网站| 亚洲熟妇自偷自拍另欧美| 亚洲日韩乱码久久久久久| 国产福利免费在线观看| 免费A级毛片无码无遮挡内射| 国产午夜精品免费一区二区三区| gogo免费在线观看|