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

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

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

    posts - 23,comments - 66,trackbacks - 0

    學(xué)習(xí)使用Java DataBase (Derby) -- 嵌入式數(shù)據(jù)庫

    學(xué)習(xí)使用Java DataBase

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

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

    在看如何使用java db以前,先看看java db 是什么, 有什么特點(diǎn).

    ?

    What's Java DB?

    要使用Java DB, 就不免想問起什么是java db, 其實(shí)java db就是在ibm 捐贈給Apache開源項(xiàng)目組的一個(gè)用java實(shí)現(xiàn)的輕量級嵌入式數(shù)據(jù)庫代碼基礎(chǔ)上發(fā)展起來的. 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 項(xiàng)目主頁:http://db.apache.org/derby/

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

    Java DB 的特性以及優(yōu)點(diǎn):

    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的優(yōu)點(diǎn)還是很多的.以后在sun 的軟件中都帶有Java DB了.

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

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

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

    # 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

    當(dāng)然了 以上配置信息,也可以用一個(gè)Property 屬性對象來構(gòu)造,然后在得到數(shù)據(jù)庫連接的時(shí)候把該對象傳遞進(jìn)去也是可以的. 不過使用配置文件是為了方便修改相關(guān)配置信息而設(shè)定的.

    通過如下方法來設(shè)置 數(shù)據(jù)庫數(shù)據(jù)的存放目錄:

    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();
    ?}

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

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

    這樣,加載了驅(qū)動以后,只有得到Connection就可以操作數(shù)據(jù)了.

    在操作數(shù)據(jù)以前,我們先建立一個(gè) 數(shù)據(jù)表, 使用的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)?"?+
    ????????????")";

    然后使用如下方法來建立數(shù)據(jù)庫和數(shù)據(jù)表:

    ????private?boolean?createTables(Connection?dbConnection)?{
    ????????boolean?bCreatedTables?=?false;
    ????????Statement?statement?=?null;
    ????????try?{
    ????????????statement?=?dbConnection.createStatement();
    ????????????//?創(chuàng)建表格...
    ????????????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;
    ????}

    由于是嵌入式數(shù)據(jù)庫,創(chuàng)建表格也要編程來實(shí)現(xiàn),當(dāng)然也有和IDE配合使用的插件可以使用.

    在創(chuàng)建數(shù)據(jù)庫和表時(shí), 需要指定 一個(gè)create 屬性為true, 就象上面的那樣, 同樣,在斷開連接 關(guān)閉數(shù)據(jù)庫時(shí),我們也要指定屬性 用編程的方法來關(guān)閉數(shù)據(jù)庫, 這是和普通數(shù)據(jù)庫不同的地方. 下面是關(guān)閉數(shù)據(jù)庫的代碼:

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

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

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

    ?

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

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

    posted on 2006-07-06 22:08 rd2pm 閱讀(1041) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     

    主站蜘蛛池模板: 成年人免费网站在线观看| 久久国产美女免费观看精品| 中文字幕成人免费视频| 国内成人精品亚洲日本语音| 一级特黄a免费大片| 免费久久精品国产片香蕉| 久久久久久久久无码精品亚洲日韩| 最近的中文字幕大全免费版| 亚洲 欧洲 自拍 另类 校园| 成年网站免费视频A在线双飞| 亚洲国产成人va在线观看网址| 久久久久av无码免费网| 亚洲中久无码永久在线观看同| 一个人看的hd免费视频| 亚洲日韩中文无码久久| 99精品在线免费观看| 亚洲人成网站在线观看播放动漫| 成年女人免费视频播放77777| 亚洲日韩av无码中文| 免费在线观看中文字幕| 两个人看www免费视频| 久久精品国产亚洲av日韩| 免费一本色道久久一区| 曰批全过程免费视频观看免费软件 | 亚洲国产一成久久精品国产成人综合| 特级毛片免费播放| 亚洲国产精品无码久久一线| 亚洲毛片免费观看| 亚洲国产成人AV网站| 亚洲国产精品福利片在线观看| 免费看又黄又无码的网站| 亚洲一卡一卡二新区无人区 | 精品国产香蕉伊思人在线在线亚洲一区二区| 精精国产www视频在线观看免费| 亚洲AV日韩AV高潮无码专区| 国产精品69白浆在线观看免费| 精品久久久久久久久亚洲偷窥女厕| 亚洲中久无码永久在线观看同| 欧洲乱码伦视频免费| 成人免费视频一区二区| 亚洲白色白色在线播放|