日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

學(xué)習(xí)Java6(六) ---嵌入式數(shù)據(jù)庫 Derby

 nbtymm 2007-01-17
一.  Derby簡介

    Derby
是一個(gè)關(guān)系型數(shù)據(jù)庫。
    Derby是一個(gè)用java實(shí)現(xiàn)的數(shù)據(jù)庫。
    Derby是一個(gè)開源的數(shù)據(jù)庫。
    Derby是一個(gè)嵌入式的數(shù)據(jù)庫。
    Derby是一個(gè)JDK6內(nèi)置的數(shù)據(jù)庫。

    1996年,一個(gè)叫做 Cloudscape, Inc 的新公司成立了,公司的目標(biāo)是構(gòu)建一個(gè)用 Java 語言編寫的數(shù)據(jù)庫服務(wù)器。公司的第一個(gè)發(fā)行版在一年之后推出,后來產(chǎn)品的名稱變成 Cloudscape。

1999年,Cloudscape, Inc. 被大型數(shù)據(jù)庫廠商 Informix Software, Inc. 收購。

2001年, Informix Software 又被 IBM 收購,然后 IBM Cloudscape™ 數(shù)據(jù)庫系統(tǒng)在許多 IBM 的產(chǎn)品中被用作內(nèi)嵌的數(shù)據(jù)庫引擎。

2004年4月,IBM 把 Cloudscape 數(shù)據(jù)庫軟件贈(zèng)送給 Apache 軟件基金會(huì)(ASF),從此 Apache Derby 項(xiàng)目誕生了。在 Apache 中這個(gè)項(xiàng)目叫做 Derby,它是一個(gè)孵化器項(xiàng)目。開發(fā)人員可以在 Apache 的許可下為 Derby 代碼作出貢獻(xiàn),或者下載 Derby 代碼。
 
二.Derby 在java6中的位置
   打開JDK6的安裝目錄就會(huì)發(fā)現(xiàn)比JDK5的安裝目錄里多了一個(gè)叫DB的文件夾,
  目錄結(jié)構(gòu)
  ├─demo--例子
  │  ├─databases
  │  │  └─toursdb
  │  │      ├─log
  │  │      └─seg0
  │  └─programs
  │      ├─nserverdemo
  │      ├─simple
  │      ├─toursdb
  │      └─workingwithderby
  ├─frameworks--框架
  │  ├─embedded
  │  │  └─bin
  │  └─NetworkServer
  │      └─bin
  └─lib--類庫
  使用該數(shù)據(jù)庫時(shí)會(huì)用到lib文件夾中的一些jar
 
三 .Derby使用的一個(gè)簡單例子
  1 import java.sql.Connection;
 2 import java.sql.DriverManager;
 3 import java.sql.ResultSet;
 4 import java.sql.Statement;
 5 
 6 public class TestDerbyBaisc {
 7     public static void main(String[] args) {
 8         try {           
 9             Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();//加載驅(qū)動(dòng)
10             Connection conn = DriverManager.getConnection("dbc:derby:TESTDB;create=true");//連接數(shù)據(jù)庫
11             Statement st = conn.createStatement();
12             st.execute("create table USER_INFO (ID INT NOT NULL,NAME VARCHAR(10) NOT NULL)");//建表
13             st.executeUpdate("insert into USER_INFO(ID,NAME) values (1,‘hermit‘)");//插入數(shù)據(jù)
14             st.executeUpdate("insert into USER_INFO(ID,NAME) values (2,‘test‘)");//插入數(shù)據(jù)
15             ResultSet rs = st.executeQuery("select * from USER_INFO");//讀取剛插入的數(shù)據(jù)
16             while(rs.next()){
17                 int id = rs.getInt(1);
18                 String name = rs.getString(2);
19                 System.out.println("ID="+id);
20                 System.out.println("NAME="+name);
21             }
22         } catch(Exception e){
23             e.printStackTrace();
24         }
25     }
26 }
運(yùn)行以后輸出
ID=1
NAME=hermit
ID=2
NAME=test

在項(xiàng)目下會(huì)生成一個(gè)文件夾TESTDB
 
四 .Derby網(wǎng)絡(luò)版服務(wù)器端
 
  1 import java.io.BufferedReader;
 2 import java.io.InputStreamReader;
 3 import java.io.PrintWriter;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.Statement;
 7 import org.apache.derby.drda.NetworkServerControl;
 8 
 9 public class TestDerbyServer {
10     public static void main(String[] args) {
11         try {
12             NetworkServerControl dbserver = new NetworkServerControl();//啟動(dòng)服務(wù)器
13             
14             PrintWriter pw = new PrintWriter(System.out);//獲取服務(wù)器輸出
15             dbserver.start(pw);
16             
17             Connection conn = DriverManager.getConnection("jdbc:derby:TESTDB;create=true");//本地連接數(shù)據(jù)庫
18             
19             Statement st = conn.createStatement();
20             st.execute("create table USER_INFO (ID INT NOT NULL,NAME VARCHAR(10) NOT NULL)");//建表
21             st.executeUpdate("insert into USER_INFO(ID,NAME) values (1,‘hermit‘)");//插入數(shù)據(jù)
22             st.executeUpdate("insert into USER_INFO(ID,NAME) values (2,‘test‘)");//插入數(shù)據(jù)
23             
24             /*
25              *等待用戶輸入,讓程序繼續(xù)運(yùn)行,不然程序會(huì)運(yùn)行結(jié)束,客戶端就連不上了 
26              */
27             BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
28             System.out.println("Press [Enter] to stop Server");
29             in.readLine();
30 
31         } catch (Exception ex) {
32             ex.printStackTrace();
33         }
34     }
35 }運(yùn)行輸出:
服務(wù)器準(zhǔn)備在端口 1527 上接受連接。
Press [Enter] to stop Server

再強(qiáng)調(diào)一下,in.readLine();很重要,不然,程序運(yùn)行完畢,服務(wù)器也就停了

五.Derby網(wǎng)絡(luò)版客戶端
 
  運(yùn)行這個(gè)客戶端之前要先運(yùn)行
學(xué)習(xí)Java6(六) 嵌入式數(shù)據(jù)庫Derby(4)網(wǎng)絡(luò)版服務(wù)端
中的服務(wù)端

 1 import java.sql.Connection;
 2 import java.sql.DriverManager;
 3 import java.sql.ResultSet;
 4 import java.sql.Statement;
 5 
 6 public class TestDerbyClient {
 7     public static void main(String[] args) {
 8         String URL = "jdbc:derby://127.0.0.1:1527/TESTDB;create=true";
 9         try {
10    
11             Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();//加載驅(qū)動(dòng)
12             Connection conn = DriverManager.getConnection(URL);//建立連接
13             
14             Statement st = conn.createStatement(); 
15             ResultSet rs = st.executeQuery("select * from USER_INFO");//讀取數(shù)據(jù)
16             while(rs.next()){
17                 int id = rs.getInt(1);
18                 String name = rs.getString(2);
19                 System.out.println("ID="+id);
20                 System.out.println("NAME="+name);
21             }
22             
23         } catch (Exception ex) {
24             ex.printStackTrace();
25         }
26     }
27 }
運(yùn)行輸出:
ID=1
NAME=hermit
ID=2
NAME=test
六. Derby 用myeclipse網(wǎng)絡(luò)方式連接Derby
 
  首先啟動(dòng)學(xué)習(xí)Java6(六) 嵌入式數(shù)據(jù)庫Derby(4)網(wǎng)絡(luò)版服務(wù)端一文中的服務(wù)端。
在打開myeclipse的首選項(xiàng),找到


snap007005.jpg

點(diǎn)擊“new...”。
如下圖所示配置:
snap007006.jpg

打開DB BROWSER視圖,建立連接,如下圖:
snap007007.jpg
用戶名密碼任意,但是不能為空,奇怪啊。
完成。
打開新建的連接,即可像一般數(shù)據(jù)庫一樣進(jìn)行操作了。
snap007009.jpg
 
 
七. Derby用myeclipse本地方式連接Derby
 
  方式連Derby和網(wǎng)絡(luò)方式的配置有很大的區(qū)別:注意看下面兩個(gè)圖:
  方式:
snap007006.jpg

本地方式,注意紅圈處的不同:
snap007010.jpg

首次連接時(shí)會(huì)在c盤下面創(chuàng)建TESTDB目錄。如果不寫絕對(duì)路徑,數(shù)據(jù)庫會(huì)被創(chuàng)建到eclipse的根目錄下面。
 
八 . Derby + Spring+hibernate的配置
 
1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd">
 3 
 4 <beans>
 5 
 6 
 7     <bean id="dataSource"
 8         class="org.apache.commons.dbcp.BasicDataSource">
 9         <property name="driverClassName">
10             <value>org.apache.derby.jdbc.EmbeddedDriver</value>
11         </property>
12         <property name="url">
13             <value>jdbc:derby:c:/TESTDB;create=true</value>
14         </property>
15         <property name="username">
16             <value>test</value>
17         </property>
18         <property name="password">
19             <value>test</value>
20         </property>
21     </bean>
22     <bean id="sessionFactory"
23         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
24         <property name="dataSource">
25             <ref bean="dataSource" />
26         </property>
27         <property name="hibernateProperties">
28             <props>
29                 <prop key="hibernate.dialect">                    org.hibernate.dialect.DerbyDialect                </prop>
30             </props>
31         </property>
32         <property name="mappingResources">
33             <list>
34                 <value>UserInfo.hbm.xml</value></list>
35         </property></bean>
36     <bean id="UserInfoDAO" class="UserInfoDAO">
37         <property name="sessionFactory">
38             <ref bean="sessionFactory" />
39         </property>
40     </bean></beans>
UserInfo.java
 1 // default package
 2 
 3 
 4 
 5 /**
 6  * UserInfo generated by MyEclipse - Hibernate Tools
 7  */
 8 
 9 public class UserInfo  implements java.io.Serializable {
10 
11 
12     // Fields    
13 
14      private Integer id;
15      private String name;
16 
17 
18     // Constructors
19 
20     /** default constructor */
21     public UserInfo() {
22     }
23 
24     /** minimal constructor */
25     public UserInfo(Integer id) {
26         this.id = id;
27     }
28     
29     /** full constructor */
30     public UserInfo(Integer id, String name) {
31         this.id = id;
32         this.name = name;
33     }
34 
35    
36     // Property accessors
37 
38     public Integer getId() {
39         return this.id;
40     }
41     
42     public void setId(Integer id) {
43         this.id = id;
44     }
45 
46     public String getName() {
47         return this.name;
48     }
49     
50     public void setName(String name) {
51         this.name = name;
52     }
53    
54 
55 
56 
57 
58 
59 
60 
61 
62 }

UserInfo.hbm.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate./hibernate-mapping-3.0.dtd">
 4 <!-- 
 5     Mapping file autogenerated by MyEclipse - Hibernate Tools
 6 -->
 7 <hibernate-mapping>
 8     <class name="UserInfo" table="USER_INFO" schema="APP">
 9         <id name="id" type="java.lang.Integer">
10             <column name="ID" />
11             <generator class="assigned" />
12         </id>
13         <property name="name" type="java.lang.String">
14             <column name="NAME" length="10" />
15         </property>
16     </class>
17 </hibernate-mapping>
18 

UserInfoDAO.java
  1 // default package
  2 
  3 import java.util.List;
  4 import org.apache.commons.logging.Log;
  5 import org.apache.commons.logging.LogFactory;
  6 import org.hibernate.LockMode;
  7 import org.springframework.context.ApplicationContext;
  8 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  9 
 10 /**
 11  * Data access object (DAO) for domain model class UserInfo.
 12  * @see .UserInfo
 13  * @author MyEclipse - Hibernate Tools
 14  */
 15 public class UserInfoDAO extends HibernateDaoSupport {
 16 
 17     private static final Log log = LogFactory.getLog(UserInfoDAO.class);
 18 
 19     protected void initDao() {
 20         //do nothing
 21     }
 22     
 23     public void save(UserInfo transientInstance) {
 24         log.debug("saving UserInfo instance");
 25         try {
 26             getHibernateTemplate().save(transientInstance);
 27             log.debug("save successful");
 28         } catch (RuntimeException re) {
 29             log.error("save failed", re);
 30             throw re;
 31         }
 32     }
 33     
 34     public void delete(UserInfo persistentInstance) {
 35         log.debug("deleting UserInfo instance");
 36         try {
 37             getHibernateTemplate().delete(persistentInstance);
 38             log.debug("delete successful");
 39         } catch (RuntimeException re) {
 40             log.error("delete failed", re);
 41             throw re;
 42         }
 43     }
 44     
 45     public UserInfo findById( java.lang.Integer id) {
 46         log.debug("getting UserInfo instance with id: " + id);
 47         try {
 48             UserInfo instance = (UserInfo) getHibernateTemplate()
 49                     .get("UserInfo", id);
 50             return instance;
 51         } catch (RuntimeException re) {
 52             log.error("get failed", re);
 53             throw re;
 54         }
 55     }
 56     
 57     
 58     public List findByExample(UserInfo instance) {
 59         log.debug("finding UserInfo instance by example");
 60         try {
 61             List results = getHibernateTemplate().findByExample(instance);
 62             log.debug("find by example successful, result size: " + results.size());
 63             return results;
 64         } catch (RuntimeException re) {
 65             log.error("find by example failed", re);
 66             throw re;
 67         }
 68     }    
 69     
 70     public List findByProperty(String propertyName, Object value) {
 71       log.debug("finding UserInfo instance with property: " + propertyName
 72             + ", value: " + value);
 73       try {
 74          String queryString = "from UserInfo as model where model." 
 75                                  + propertyName + "= ?";
 76          return getHibernateTemplate().find(queryString, value);
 77       } catch (RuntimeException re) {
 78          log.error("find by property name failed", re);
 79          throw re;
 80       }
 81     }
 82 
 83     public UserInfo merge(UserInfo detachedInstance) {
 84         log.debug("merging UserInfo instance");
 85         try {
 86             UserInfo result = (UserInfo) getHibernateTemplate()
 87                     .merge(detachedInstance);
 88             log.debug("merge successful");
 89             return result;
 90         } catch (RuntimeException re) {
 91             log.error("merge failed", re);
 92             throw re;
 93         }
 94     }
 95 
 96     public void attachDirty(UserInfo instance) {
 97         log.debug("attaching dirty UserInfo instance");
 98         try {
 99             getHibernateTemplate().saveOrUpdate(instance);
100             log.debug("attach successful");
101         } catch (RuntimeException re) {
102             log.error("attach failed", re);
103             throw re;
104         }
105     }
106     
107     public void attachClean(UserInfo instance) {
108         log.debug("attaching clean UserInfo instance");
109         try {
110             getHibernateTemplate().lock(instance, LockMode.NONE);
111             log.debug("attach successful");
112         } catch (RuntimeException re) {
113             log.error("attach failed", re);
114             throw re;
115         }
116     }
117 
118     public static UserInfoDAO getFromApplicationContext(ApplicationContext ctx) {
119         return (UserInfoDAO) ctx.getBean("UserInfoDAO");
120     }
121 }
 
 
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多