天天看點

PowerPersonal開發實錄:從Database到User Interface

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就是指針,明白這個就好辦了。