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

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

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

    blogjava's web log

    blogjava's web log
    ...

    hibernate調用mysql5.0存儲過程小記


    準備工作:
    1.hibernate3
    到這下載hibernate3:http://sourceforge.net/project/showfiles.phpgroup_id=40712&package_id=127784&release_id=403223
    2.mysql (注意一定要用mysql5.0和最新驅動)
    ?mysql官方網站http://www.mysql.com/


    1 .建張表
    CREATE ? TABLE ?`proctest`?(
    ??`id`?
    int ( 11 )? NOT ? NULL ?auto_increment,
    ??`Name`?
    varchar ( 20 )? default ? '''''' ,
    ??`age`?
    int ( 11 )? default ? NULL ,
    ??`address`?
    varchar ( 50 )? default ? '' ,
    ??
    PRIMARY ? KEY ??(`id`)
    )?ENGINE
    = InnoDB? DEFAULT ?CHARSET = gb2312;
    插入幾條記錄
    INSERT ? INTO ?`proctest`? VALUES ?( 1 , ' tom ' , 22 , 'http://www.tkk7.com ' );
    INSERT ? INTO ?`proctest`? VALUES ?( 2 , ' wujun ' , 25 , 'http://www.tkk7.com/wujun ' );
    INSERT ? INTO ?`proctest`? VALUES ?( 3 , ' jerry ' , 30 , ' 深圳 ' );
    INSERT ? INTO ?`proctest`? VALUES ?( 4 , ' wujun ' , 40 , ' 南昌 ' );
    創建存儲過程
    -- 這只是一個例子,就來個簡單存儲過程
    create ? PROCEDURE ?testProc()
    begin
    ???
    select ? * ? from ?proctest;
    end ;



    打開eclipce新建個java工程,記的把hiberbate3類庫也一起加進去..
    看下結構圖:


    1.新建UserVO.java文件

    package ?net.wj.proc.vo;

    public ? class ?UserVO? {
    ????
    private ? int ?id;
    ????
    private ?String?name;
    ????
    private ? int ?age;
    ????
    private ?String?address;
    ????
    public ?UserVO()
    ????
    {}
    順便把它相對應的配置文件也寫上。。
    UserVO.hbm.xml?

    <?xml?version="1.0"?encoding='UTF-8'?>
    <!DOCTYPE?hibernate-mapping?PUBLIC
    ????????????????????????????"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
    ????????????????????????????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"?
    >

    <!--?DO?NOT?EDIT:?This?is?a?generated?file?that?is?synchronized?-->
    <!--?by?MyEclipse?Hibernate?tool?integration.???????????????????-->
    <!--?Created?Sat?Apr?22?17:08:56?CST?2006?????????????????????????-->
    <hibernate-mapping>

    ????
    <class?name="net.wj.proc.vo.UserVO"?table="proctest">
    ????????
    <id?name="id"?column="id">
    ????????????
    <generator?class="native"/>
    ????????
    </id>
    ????????
    ????????
    <property?name="name"?column="name"?type="string"?/>
    ????????
    <property?name="age"?column="age"?type="integer"?/>
    ????????
    <property?name="address"?column="address"?type="string"?/>

    ????
    </class>

    ????
    <!--sql查詢-->
    ?????
    <sql-query?name="select">
    ?????
    <![CDATA[select?{usr.*}?from?proctest?usr?]]>
    ?????
    <return?alias="usr"?class="net.wj.proc.vo.UserVO"?/>
    ?????
    </sql-query>

    ?????
    <!--調用存儲過程就在這里配了-->
    ????
    <sql-query?name="getUser"?callable="true">
    ?????
    <return?alias="user"?class="net.wj.proc.vo.UserVO">
    ?????
    ?????
    <return-property?name="id"?column="id"?/>
    ??????
    <return-property?name="name"?column="name"?/>
    ???????
    <return-property?name="age"?column="age"?/>
    ????????
    <return-property?name="address"?column="address"?/>
    ?????
    </return>
    ?????
    <!--這里就是我們剛剛創建的存儲過程名-->
    ?????{call?testProc()}
    ?????
    </sql-query>
    </hibernate-mapping>

    測試代碼
    package?net.wj.proc.test;


    import?java.util.List;

    import?org.hibernate.*;
    import?org.hibernate.cfg.*;
    import?net.wj.proc.vo.*;
    import?org.apache.log4j.*;


    public?class?ProcTest?{

    ????
    /**
    ?????*?
    @param?args
    ?????
    */

    ????Logger?log
    =Logger.getLogger(this.getClass());
    ????
    public?ProcTest()
    ????
    {}
    ????
    public?static?void?main(String[]?args)?{
    ????????System.out.print(
    "start.............................");
    ????????ProcTest?tt
    =new?ProcTest();
    ???????
    //?tt.LoadAll();
    ???????
    //?tt.ExampleSelect();
    ???????tt.ExampleProc();
    ????????
    ????}

    ????
    ????
    //得到Session,
    ????public?Session??getSession()
    ????
    {
    ????????
    try
    ????????
    {
    ????????????Configuration?cfg?
    =?new?Configuration().configure();
    ????????????SessionFactory?sf
    =cfg.buildSessionFactory();
    ????????????Session?ss
    =?sf.openSession();
    ????????????
    return?ss;

    ????????}

    ????????
    catch(Exception?ee)
    ????????
    {
    ????????????System.out.print(
    "失敗"+ee.getMessage());
    ????????????
    return?null;
    ????????}

    ??????
    ????}

    ????
    //這里調我們在UserVO.hbm.xml
    ????
    //sql-query?寫上的name屬性getUser
    ????public?void?ExampleProc()
    ????
    {
    ????????Session?ss
    =this.getSession();
    ????????List?li
    =ss.getNamedQuery("getUser").list();
    ????????
    for(int?i=0;i<li.size();i++)
    ????????
    {
    ????????????UserVO?vo
    =(UserVO)li.get(i);
    ????????????log.info(
    "name:"+vo.getName());
    ????????????log.info(
    "age"+vo.getAge());
    ????????????log.info(
    "address"+vo.getAddress());
    ????????}

    ????????ss.close();
    ????}

    ????
    //配置文件的sql查詢
    ????public?void?ExampleSelect()
    ????
    {
    ???????????Session?ss
    =this.getSession();
    ???????????List?li
    =?ss.getNamedQuery("select").list();
    ????????
    ???????????
    for(int?i=0;i<li.size();i++)
    ???????????
    {
    ????????????UserVO?vo
    =(UserVO)li.get(i);
    ????????????log.info(
    "name:"+vo.getName());
    ????????????log.info(
    "age"+vo.getAge());
    ????????????log.info(
    "address"+vo.getAddress());
    ???????????}

    ???????????ss.close();??
    ????}
    }


    記的用最新的驅動:
    要不然可能會報這個錯
    Exception?in?thread?"main"?org.hibernate.exception.GenericJDBCException:?could?not?execute?query
    ????at?org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:
    91)
    ????at?org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:
    79)
    ????at?org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:
    43)
    ????at?org.hibernate.loader.Loader.doList(Loader.java:
    2148)
    ????at?org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:
    2029)
    ????at?org.hibernate.loader.Loader.list(Loader.java:
    2024)
    ????at?org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:
    111)
    ????at?org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:
    1674)
    ????at?org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:
    147)
    ????at?org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:
    164)
    ????at?net.wj.proc.test.ProcTest.ExampleProc(ProcTest.java:
    45)
    ????at?net.wj.proc.test.ProcTest.main(ProcTest.java:
    22)
    Caused?by:?java.sql.SQLException:?Callable?statments?not?supported.
    ????at?com.mysql.jdbc.Connection.prepareCall(Connection.java:
    1278)
    ????at?org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:
    439)
    ????at?org.hibernate.jdbc.AbstractBatcher.prepareCallableQueryStatement(AbstractBatcher.java:
    115)
    ????at?org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:
    1557)
    ????at?org.hibernate.loader.Loader.doQuery(Loader.java:
    661)
    ????at?org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:
    224)
    ????at?org.hibernate.loader.Loader.doList(Loader.java:
    2145)
    ?????
    8?more
    09:38:18,837??INFO?SessionFactoryImpl:153?-?building?session?factory
    09:38:18,917??WARN?Configurator:126?-?No?configuration?found.?Configuring?ehcache?from?ehcache-failsafe.xml?found?in?the?classpath:?jar:file:/E:/lib/hibernate3/ehcache-1.1.jar!/ehcache-failsafe.xml
    09:38:21,951??INFO?SessionFactoryObjectFactory:82?-?Not?binding?factory?to?JNDI,?no?JNDI?name?configured
    Hibernate:?
    {call?testProc()}
    09:38:22,482??WARN?JDBCExceptionReporter:71?-?SQL?Error:?0,?SQLState:?S1C00
    09:38:22,482?ERROR?JDBCExceptionReporter:72?-?Callable?statments?not?supported.

    源代碼http://www.tkk7.com/Files/wujun/Proc.rar

    是不是挺簡單的.

    posted on 2006-05-20 11:21 record java and net 閱讀(6200) 評論(14)  編輯  收藏 所屬分類: java

    評論

    # re: hibernate調用mysql5.0存儲過程小記 2006-05-24 10:36 Tin

    哈哈,好文,謝謝。不過是否用過沒有返回值的存儲過程?我發現在Hibernate里面用沒有返回值的存儲過程總會出錯,不知是否解決?  回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2006-05-24 11:58 吳某人-不斷地學習

    看老兄的博客。。是牛人啊。。

    還是用session.connection得到jdbc實例進行調用吧。

    好象那樣不行。。我試了也報錯。。

      回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2006-05-30 11:14 老鼠

    呵呵,受教:)

    我把您這篇文章轉走了,您愿意么?

    如果有疑問,請在此留言或給我郵件:cammy.sun@hotmail.com.


    謝謝您:)  回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2006-05-30 11:24 吳某人-不斷地學習

    可以啊

    把轉載在那里告訴我一下。。

    呵呵  回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2006-05-30 12:13 老鼠

    :P

    呵呵,我把它轉tech.it168.com去了:p

    您同意么:P

    好象您也上ITPUB的喲:),我也是那里的常客:p

    :shake:  回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2006-05-30 17:22 吳某人-不斷地學習

    呵呵。。

      回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2006-06-07 10:19 sunqiqi

    不錯。贊一個。  回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2006-07-20 22:39 何為

    報Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not execute query
    這個錯。
    我的驅動版本是3.1.13的,還是報這個錯啊

    請問你用的是什么版本呢  回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2006-07-21 10:00 吳某人-不斷地學習

    用最新的驅動。。
    3.1.13 的可能不行。

    下最新 5。0的驅動就可以了
    http://dev.mysql.com/downloads/  回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2006-10-23 14:04 tt

    不過創建存儲過程
    -- 這只是一個例子,就來個簡單存儲過程
    create PROCEDURE testProc()
    begin
    select * from proctest;
    end ;
    像這樣子,只有一個語句的,好像可以,要是多個語句的在MYSQL管理里面沒有辦法編輯,老出問題,
      回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2007-07-10 16:12 超超

    此代碼對了嗎?為什么我在其它地方看到的代碼,他們都說要調用session.connection()去調用存儲過程呢?  回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2007-11-02 10:35 joyou

    朋友 你的測試 是否正確 否則看了之后 也不清楚 謝謝 :)  回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記 2008-12-12 14:36 stringtz

    請問數據庫的驅動放什么地方
    我照你的做為什么報錯是這樣的
    start.............................Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    The method getName() is undefined for the type UserVO
    The method getAge() is undefined for the type UserVO
    The method getAddress() is undefined for the type UserVO

    at net.wj.proc.test.ProcTest.ExampleProc(ProcTest.java:54)
    at net.wj.proc.test.ProcTest.main(ProcTest.java:23)  回復  更多評論   

    # re: hibernate調用mysql5.0存儲過程小記[未登錄] 2010-01-14 12:40 AAA

    能有點追求嗎》Hibernate如何調用out類型的參數寫了嗎,  回復  更多評論   

    導航

    常用鏈接

    留言簿(44)

    新聞檔案

    2.動態語言

    3.工具箱

    9.文檔教程

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 免费观看a级毛片| 国内外成人免费视频| 亚洲一区二区三区影院| 污污的视频在线免费观看| 国产精品自在自线免费观看| 亚洲熟女精品中文字幕| 青青草国产免费久久久下载| 亚洲日韩久久综合中文字幕| 日本19禁啪啪无遮挡免费动图| 亚洲国产无线乱码在线观看| 日本无卡码免费一区二区三区| 亚洲a∨国产av综合av下载| 四虎影视精品永久免费| 香蕉97碰碰视频免费| 亚洲欧洲国产成人综合在线观看| 色吊丝性永久免费看码| 中文字幕精品亚洲无线码二区 | 亚洲视频在线观看| 最近中文字幕国语免费完整| 91亚洲自偷在线观看国产馆| 波多野结衣久久高清免费| 成人午夜免费视频| 亚洲免费在线视频| 日韩免费视频观看| 国产午夜精品理论片免费观看| 亚洲视频免费在线观看| 毛片免费视频在线观看| 色网站在线免费观看| 亚洲一区爱区精品无码| 久草视频在线免费| 色婷婷精品免费视频| 亚洲成AV人片在线观看ww| 精品香蕉在线观看免费| 黄页视频在线观看免费| 亚洲视频在线观看免费视频| 在线观看免费大黄网站| 你懂的在线免费观看| 亚洲综合激情五月丁香六月| 国产综合精品久久亚洲| 特级做A爰片毛片免费69| 一区二区视频免费观看|