6.10 - 6.11
今天開始開發PowerPersonal, 希望能夠做成一款出色的個人管理軟體,第二個目标是學習java的基礎技術,從關系資料庫到UI的點點滴滴。好吧,出發!
做的第一個子產品是通訊錄管理。超級簡單,隻有一個表Contact:
Contact
------------------------
CONTACT_ID: int
NAME: varchar(32)
RELATION: int
EMAIL: varchar(32)
CELLPHONE: varchar(32)
HOMEPHONE: varchar(32)
WORKPHONE: varchar(32)
QQNUM: varchar(32)
資料庫使用一個輕量級的資料庫derby,使用一個derby.jar就可以了。的确相當簡單。
資料庫連接配接跟jdbc相容得很好,完全沒有必要考慮太多,但是還是花了一個下午看了quickstart.
(1) 總結一下資料庫連接配接的步驟:
(1)Class.forName(className)
( 2) conn = DriverManger.getConnection(connectionString)
( 3) statement = conn.createStatement()
注意這裡:建立statement時,可以傳入關于resultSet的參數,包括并發性(ReadOnly或者Updatable),Scroll_Sensitive等等
這些參數都很重要,下面用錯誤來說明。
(4) 建立表:statement.execute(CREATE_TABLE_SQL) 注意建立表之前可以用conn提供的getMetaData來檢查資料表是否已經存在
( 5) 插入:PreparedStatement ps= conn.prepareStatement(...?...) 用?表示需要替代的參數,然後用ps.setString(index, string)來fill in.
ps.executeUpdate()
(6) 删除同上
(7)修改,可以使用如插入一樣的方法,也可以直接在ResultSet中修改,然後update到資料庫中。
代碼很簡單:
ResultSet rs = statement.executeQuery(SQL)
rs.updateString(index, string)
rs.updateRow()
但是需要注意兩點:
(1)并發性要設定成UPDATABLE(在建立statement時設定)
(2)查詢SQL中不能出現order by,否則會認為是readonly.
(8) 最後是資料庫的shutdown。步驟是:
try {
DriverManager.getConnection("jdbc:derby:;shutdown=true");
} catch (SQLException se) {
if ( se.getSQLState().equals("XJ015") ) {
System.out.println("Database shut down normally");
}else{
System.out.println("Database did not shut down normally");
}
傳遞shutdown的消息,然後引擎就會關閉。
另外一個問題是:如何計算resultset的長度。
三種方法:
(1)用一個i++ (2)rs.last() / rs.getRow() 注意使用這種方法時需要ResultSet.Scroll這個參數(在建立statement時)
再另外一點就是HashMap的使用,其實用法就是相當簡單的,就是一個key,value,兩個都是Object類型。
不過要注意使用iterator時,注意一開始獲得的iterator對象是指向null的,需要next()一下才能獲得對象。iterator就是指針,明白這個就好辦了。