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

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

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

    Ryan's Java world!

    something about Java and opensource!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      51 Posts :: 25 Stories :: 59 Comments :: 0 Trackbacks

    ?

    學習使用Java DataBase

    在前幾天,轉貼了java網站上一篇介紹使用Java DB的文章,http://blog.matrix.org.cn/page/icess?entry=using_java_db_in_desktop 里面介紹了如何在桌面程序中使用java DB,今天使用了一下感覺很不錯.

    但上面那篇文章中,是通過一個桌面程序來介紹java DB的,看的時候可能會感到比較混亂,今天我就按照他的例子,從中拿出 介紹java db的代碼, 來看看如何使用它吧!

    在看如何使用java db以前,先看看java db 是什么, 有什么特點.

    ?

    What's Java DB?

    要使用Java DB, 就不免想問起什么是java db, 其實java db就是在ibm 捐贈給Apache開源項目組的一個用java實現的輕量級嵌入式數據庫代碼基礎上發展起來的. sun Java DB主頁的描述如下:

    ?

    Java DB is Sun's supported distribution of the open source Apache Derby 100% Java technology database. It is fully transactional, secure, easy-to-use, standards-based -- SQL, JDBC API, and Java EE -- yet small, only 2MB. The Apache Derby project has a strong and growing community that includes developers from large companies such as Sun Microsystems and IBM as well as individual contributors.

    Apache Derby 項目主頁:http://db.apache.org/derby/

    Java DB主頁: http://developers.sun.com/prodtech/javadb/

    Java DB 的特性以及優點:

    Features & Benefits
    ?
    Sun Java DB is based on the open source Apache Derby project. It provides a full-featured, robust, small-footprint Java database management system that is cost effective and simple to deploy.

    ?
    Pure Java
    Java DB is written in Java to take advantage of Java's write once, run anywhere promise. Java DB supports J2SE, J2EE and J2ME standards.

    ?
    Standards- based
    Java DB technology adheres to database standards such as JDBC and ANSI SQL standards. This means Java DB provides the functionality expected of a sophisticated relational database, including SQL syntax, transaction management, concurrency, triggers, and backups. It also means that it is easy to upgrade an application using Java DB to other standards-based databases, such as Oracle and DB2.

    ?
    Easy to use
    Java DB is easy to use and requires zero-administration. This eliminates the need for a database administrator.

    ?
    Application-embedded or client-server mode
    The flexibility to support both embedded and client-server mode allows Java DB to adapt to diverse deployment scenarios. In embedded mode, Java DB runs on the same JVM as the application and users may not even be aware that they are accessing a relational database.

    ?
    Secure
    Java DB provides a numbers of security mechanisms including database file encryption, authentication through either external LDAP directory or built-in repository, and authorization. In addition, access to the database can also be controlled at read-only or read-write level.

    ?
    Sophisticated – with triggers and stored procedures
    Java DB allows users to define trigger to ensure referential integrity. It also supports Java stored procedures.

    ?
    Small foot-print
    With a foot-print of 2MB, Java DB is a perfect fit for desktop applications, mobile solutions and small devices that require a full featured, robust database.

    ?
    Cost-effective
    Java DB is available for free under the Apache license and requires no administration if embedded and little if used in client-server mode.

    ?
    Full support from Sun
    Sun offers full, 24 x 7 support for Java DB.

    可以看出Java DB的優點還是很多的.以后在sun 的軟件中都帶有Java DB了.

    下面來看看如何使用Java? DB吧.

    嵌入式數據庫和一般的數據庫不同,在使用以前,需要指定一個存放數據的目錄和指定數據庫的配置文件.

    配置文件可以很簡單:不用解釋了 如下:

    # Sample ResourceBundle properties file

    user=

    addressuser

    password=

    addressuser

    derby.driver=

    org.apache.derby.jdbc.EmbeddedDriver

    derby.url=

    jdbc:derby:

    db.table=

    ADDRESS

    db.schema=

    APP

    當然了 以上配置信息,也可以用一個Property 屬性對象來構造,然后在得到數據庫連接的時候把該對象傳遞進去也是可以的. 不過使用配置文件是為了方便修改相關配置信息而設定的.

    通過如下方法來設置 數據庫數據的存放目錄:

    private?void?setDBSystemDir()?{
    ????????//?decide?on?the?db?system?directory
    ????????//String?userHomeDir?=?System.getProperty("user.home",?".");
    ????????String?userHomeDir?=?System.getProperty("user.dir",?".");
    ????????String?systemDir?=?userHomeDir?+?"/.addressbook";
    ????????System.setProperty("derby.system.home",?systemDir);
    ????????
    ????????//?create?the?db?system?directory
    ????????File?fileSystemDir?=?new?File(systemDir);
    ????????fileSystemDir.mkdir();
    ?}

    然后就是加載數據庫驅動了, Java DB的數據庫驅動是集成在一起的,也是通過 Class.forName() 的方式加載的,內嵌的驅動名字是org.apache.derby.jdbc.EmbeddedDriver 本例子中使用下面的方法加載驅動.
    ?

    ????private?void?loadDatabaseDriver(String?driverName)?{
    ????????//?load?Derby?driver
    ????????try?{
    ????????????Class.forName(driverName);
    ????????}?catch?(ClassNotFoundException?ex)?{
    ????????????ex.printStackTrace();
    ????????}
    ????????
    ????}

    這樣,加載了驅動以后,只有得到Connection就可以操作數據了.

    在操作數據以前,我們先建立一個 數據表, 使用的sql 語句如下:

    ????private?static?final?String?strCreateAddressTable?=
    ????????????"create?table?APP.ADDRESS?("?+
    ????????????"????ID??????????INTEGER?NOT?NULL?PRIMARY?KEY?GENERATED?

    ???????????? ALWAYS?AS?IDENTITY?(START?WITH?1,?INCREMENT?BY?1),"?
    +
    ????????????"????LASTNAME????VARCHAR(30),?"?+
    ????????????"????FIRSTNAME???VARCHAR(30),?"?+
    ????????????"????MIDDLENAME??VARCHAR(30),?"?+
    ????????????"????PHONE???????VARCHAR(20),?"?+
    ????????????"????EMAIL???????VARCHAR(30),?"?+
    ????????????"????ADDRESS1????VARCHAR(30),?"?+
    ????????????"????ADDRESS2????VARCHAR(30),?"?+
    ????????????"????CITY????????VARCHAR(30),?"?+
    ????????????"????STATE???????VARCHAR(30),?"?+
    ????????????"????POSTALCODE??VARCHAR(20),?"?+
    ????????????"????COUNTRY?????VARCHAR(30)?"?+
    ????????????")";

    然后使用如下方法來建立數據庫和數據表:

    ????private?boolean?createTables(Connection?dbConnection)?{
    ????????boolean?bCreatedTables?=?false;
    ????????Statement?statement?=?null;
    ????????try?{
    ????????????statement?=?dbConnection.createStatement();
    ????????????//?創建表格...
    ????????????statement.execute(strCreateAddressTable);
    ????????????bCreatedTables?=?true;
    ????????}?catch?(SQLException?ex)?{
    ????????????ex.printStackTrace();
    ????????}
    ????????
    ????????return?bCreatedTables;
    ????}
    ????private?boolean?createDatabase()?{
    ????????boolean?bCreated?=?false;
    ????????Connection?dbConnection?=?null;
    ????????
    ????????String?dbUrl?=?getDatabaseUrl();
    ????????dbProperties.put("create",?"true");
    ????????
    ????????try?{
    ????????????dbConnection?=?DriverManager.getConnection(dbUrl,?dbProperties);
    ????????????bCreated?=?createTables(dbConnection);
    ????????}?catch?(SQLException?ex)?{
    ????????}
    ????????dbProperties.remove("create");
    ????????return?bCreated;
    ????}

    由于是嵌入式數據庫,創建表格也要編程來實現,當然也有和IDE配合使用的插件可以使用.

    在創建數據庫和表時, 需要指定 一個create 屬性為true, 就象上面的那樣, 同樣,在斷開連接 關閉數據庫時,我們也要指定屬性 用編程的方法來關閉數據庫, 這是和普通數據庫不同的地方. 下面是關閉數據庫的代碼:

    ????public?void?disconnect()?{
    ????????if(isConnected)?{
    ????????????String?dbUrl?=?getDatabaseUrl();
    ????????????dbProperties.put("shutdown",?"true");
    ????????????try?{
    ????????????????DriverManager.getConnection(dbUrl,?dbProperties);
    ????????????}?catch?(SQLException?ex)?{
    ????????????}
    ????????????isConnected?=?false;
    ????????}
    ????}

    然后我們就可以通過得到Connection 象操作普通數據庫一樣來操作Java DB了. 如下:

    dbConnection = DriverManager.getConnection(dbUrl, dbProperties);
    stmtSaveNewRecord = dbConnection.prepareStatement(strSaveAddress, Statement.RETURN_GENERATED_KEYS);

    ?

    性能如何呢: 經過我的測試 插入 100 行(每行有11個字符串) 數據 要2100 多毫秒. 取出100 行需要 1500多毫秒 不知道大家認為如何.

    本文用到的全部代碼: 可以在此出下載:? http://icess.my.china.com/downloads/index.htm?

    posted on 2006-04-13 21:19 冰雨 閱讀(9188) 評論(6)  編輯  收藏

    Feedback

    # re: 學習使用Java DataBase (Derby) -- 嵌入式數據庫 2006-04-14 09:04 大雁北飛
    Can derby support blob and clob datatype?  回復  更多評論
      

    # re: 學習使用Java DataBase (Derby) -- 嵌入式數據庫 2006-04-14 09:44 冰雨
    哦 是個問題 我到主頁看看
    少候給你 回信  回復  更多評論
      

    # re: 學習使用Java DataBase (Derby) -- 嵌入式數據庫 2006-04-14 14:59 冰雨
    支持 blob 和clob

    Derby supports the standard CLOB and BLOB data types. BLOB and CLOB values are limited to a maximum of 2,147,483,647 characters.

    BLOB
    A BLOB (binary large object) is a varying-length binary string that can be up to 2,147,483,647 characters long. Like other binary types, BLOB strings are not associated with a code page. In addition, BLOB strings do not hold character data.
    The length is given in bytes for BLOB unless one of the suffixes K, M, or G is given, relating to the multiples of 1024, 1024*1024, 1024*1024*1024 respectively.
    Note: Length is specified in bytes for BLOB.
    Syntax

    { BLOB | BINARY LARGE OBJECT } [ ( length [{K |M |G }] ) ]

    Default
    A BLOB without a specified length is defaulted to one megabyte.
    Corresponding compile-time Java type
    java.sql.Blob
    JDBC metadata type (java.sql.Types)
    BLOB
    Use the getBlob method on the java.sql.ResultSet to retrieve a BLOB handle to the underlying data.
    Related information
    see java.sql.Blob and java.sql.Clob

    create table pictures(name varchar(32) not null primary key, pic blob(16M)); --find all logotype pictures select length(pic), name from pictures where name like '%logo%'; --find all image doubles (blob comparsions) select a.name as double_one, b.name as double_two from pictures as a, pictures as b where a.name < b.name and a.pic = b.pic order by 1,2;

      回復  更多評論
      

    # re: 學習使用Java DataBase (Derby) -- 嵌入式數據庫 2006-04-14 22:25 大雁北飛
    Thanks.  回復  更多評論
      

    # re: 學習使用Java DataBase (Derby) -- 嵌入式數據庫 2007-01-26 12:52 8936392
    謝謝分享  回復  更多評論
      

    # re: 學習使用Java DataBase (Derby) -- 嵌入式數據庫 2007-09-11 15:34 williams
    請問如何在JavaDB中創建存儲過程。
      回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    JSF中文技術文摘
    主站蜘蛛池模板: 国产国拍亚洲精品福利 | 亚洲毛片基地日韩毛片基地| 亚洲无av在线中文字幕| 亚洲性久久久影院| 久久精品国产精品亚洲| 中文字幕亚洲综合久久菠萝蜜| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 一区二区免费视频| 日本一卡精品视频免费| 日韩精品人妻系列无码专区免费| 日本一区二区免费看| 免费国产黄网站在线观看视频| 免费人成在线观看网站品爱网 | 日本一区二区三区在线视频观看免费| 老司机精品视频免费| 一级做a爰片久久毛片免费陪| 国产乱妇高清无乱码免费| 中文字幕视频在线免费观看| 免费网站看av片| 亚洲无砖砖区免费| 成人免费午夜在线观看| 性做久久久久免费观看| 亚洲精品偷拍视频免费观看 | 成年男女免费视频网站| 国产成人免费a在线资源| 亚洲中文字幕伊人久久无码| 亚洲国产精品无码一线岛国| 亚洲首页在线观看| 亚洲精品无码人妻无码| 九九视频高清视频免费观看 | 免费看美女午夜大片| a毛片久久免费观看| 91短视频在线免费观看| 野花高清在线电影观看免费视频| 青青青国产免费一夜七次郎| 亚洲精品高清在线| 亚洲黄色免费网址| 久久精品国产亚洲AV电影网| a毛片免费观看完整| 岛国大片免费在线观看| 国产啪亚洲国产精品无码|