f06_d_觀摩_架構(gòu)與db引擎移植方法_ok_W_第1頁(yè)
f06_d_觀摩_架構(gòu)與db引擎移植方法_ok_W_第2頁(yè)
f06_d_觀摩_架構(gòu)與db引擎移植方法_ok_W_第3頁(yè)
f06_d_觀摩_架構(gòu)與db引擎移植方法_ok_W_第4頁(yè)
f06_d_觀摩_架構(gòu)與db引擎移植方法_ok_W_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基於軟硬整合觀點(diǎn)F06_d觀摩:ContentProvider架構(gòu)與DB引擎移植方法( d)By 高煥堂基於軟硬整合觀點(diǎn)5、展現(xiàn)DB引擎的變換自由度:以Linter引擎的移植為例 在上一個(gè)范例里,Client使用ContentProvider接口與SQLite DB引擎銜接。 onCreate() DataPersist對(duì)象是由Android框架所創(chuàng)建的。 之后,Client就調(diào)用getContentResolver() 函數(shù)來(lái)要求Android框架去進(jìn)行配對(duì)和綁定此DataPersist對(duì)象。然后間接綁定了Linter DB引擎。 此ContentProvider接口與特定DB引擎是無(wú)關(guān)的,

2、可以讓Client與DB引擎互為獨(dú)立。非常有助于雙方的獨(dú)立成長(zhǎng),或各自的版 本更新,甚至新DB引擎的移植。 例如,我們先將Linter DB引擎安裝到Android的Linux環(huán)境里,并建立JDBC存取通道;接著就我們能輕易地將Linter引擎整合到ContentProvider框架里。 這包含了3個(gè)類:1. LinterPersist類2. LinterCursor類3. DispActivity類 LinterPersist類實(shí)現(xiàn)query()接口,實(shí)際呼叫Linter數(shù)據(jù)庫(kù)的功能。 也就是說(shuō),DispActivity透過(guò)ContentProvider接口呼叫到LinterPersist

3、的query()函數(shù)。 此時(shí)創(chuàng)建一個(gè)LinterCursor對(duì)象,將其Cursor接口回傳給DispActivity 。onCreate()connect() 此LinterPersist對(duì)象是由Android框架所創(chuàng)建的。 之后,Client就調(diào)用getContentResolver() 函數(shù)來(lái)要求Android框架去進(jìn)行配對(duì)和綁定此LinterPersist對(duì)象。然后間接綁定了Linter DB引擎。 Linter + Android 范例代碼 于此,我們需要撰寫3個(gè)類:1. LinterPersist類2. LinterCursor類3. DispActivity類/* - Linter

4、Persist.java 程序代碼*/ .public class LinterPersist extends ContentProvider private static final StringLINTER_TABLE_NAME= Student123;Override public boolean onCreate() try Class.forName(com.relx.jdbc.LinterDriver).newInstance(); con = DriverManager.getConnection( jdbc:Linter:linapid:localhost:1070:local

5、, SYSTEM,MANAGER); catch(Exception e) Log.e(Conn failed, e.toString(); return false;try Statement stmt = con.createStatement(); stmt.executeUpdate(drop table +LINTER_TABLE_NAME); catch (Exception e) Log.e(drop table failed, e.toString(); try Statement stmt = con.createStatement(); stmt.executeUpdate

6、( create table +LINTER_TABLE_NAME + (stud_no char(10),stud_name char(20);); PreparedStatement prepstmt1 = con.prepareStatement(insert into + LINTER_TABLE_NAME + values (?,?);); prepstmt1.setString(1, linter_5);prepstmt1.setString(2, Lisa); prepstmt1.executeUpdate();prepstmt1.setString(1, linter_8);p

7、repstmt1.setString(2, Kitty); prepstmt1.executeUpdate( ); catch (Exception e) Log.e(create/insert table failed,e.toString();return false; return true;Override public Cursor query(Uri uri, String projection, String selection,String selectionArgs, String sortOrder) ResultSet rs = null;try Statement st

8、mt = con.createStatement(); rs = stmt.executeQuery(select * from +LINTER_TABLE_NAME); catch (Exception e) e.printStackTrace(); return null; Cursor c = new LinterCursor(rs, con); return c;Overridepublic String getType(Uri uri) return null;Override public Uri insert(Uri uri, ContentValues initialValue

9、s) String field_1 = initialValues.get(stud_no).toString(); String field_2 = initialValues.get(stud_name).toString(); try PreparedStatement prepstmt1 = con.prepareStatement(insert into + LINTER_TABLE_NAME + values (?,?);); prepstmt1.setString(1, field_1);prepstmt1.setString(2, field_2); prepstmt1.exe

10、cuteUpdate(); catch (Exception e) Log.e(ERROR, e.toString(); return uri;Override public int delete(Uri uri, String where, String whereArgs) return 0; Override public int update(Uri uri, ContentValues values, String where,String whereArgs) return 0;/ 定義LinterCursor 類 class LinterCursor implements Cur

11、sorResultSet res;Connection conn; LinterCursor( ResultSet rs, Connection con) res = rs;conn = con; Overridepublic void close() try res.close();conn.close(); catch (java.sql.SQLException e) e.printStackTrace();Overridepublic void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) Override pu

12、blic void deactivate() Override public byte getBlob(int columnIndex) return null; Override public int getColumnCount() return 0; Override public int getColumnIndex(String columnName)return 0; Overridepublic int getColumnIndexOrThrow(String columnName) throws IllegalArgumentException return 0;Overrid

13、e public String getColumnName(int columnIndex)return null;Override public String getColumnNames() return null;Override public int getCount() return 0;Override public double getDouble(int columnIndex) return 0;Override public Bundle getExtras() return null; Override public float getFloat(int columnIn

14、dex) return 0;Override public int getInt(int columnIndex) return 0;Override public long getLong(int columnIndex) return 0; Override public int getPosition() return 0;Override public short getShort(int columnIndex) return 0; Override public String getString(int columnIndex) try return res.getString(c

15、olumnIndex + 1); catch (java.sql.SQLException e) e.printStackTrace(); return null;Override public boolean getWantsAllOnMoveCalls() return false;Override public boolean isAfterLast() try return res.isAfterLast(); catch (java.sql.SQLException e) e.printStackTrace(); return false; Override public boole

16、an isBeforeFirst() try return res.isBeforeFirst(); catch (java.sql.SQLException e)e.printStackTrace(); return false; Override public boolean isClosed() return false; Override public boolean isFirst() return false; Override public boolean isLast() return false; Override public boolean isNull(int colu

17、mnIndex) return false; Override public boolean move(int offset) return false; Override public boolean moveToFirst() try return res.first(); catch (java.sql.SQLException e) e.printStackTrace(); return false; Override public boolean moveToLast() return false; Override public boolean moveToNext() try r

18、eturn res.next(); catch (java.sql.SQLException e)e.printStackTrace(); return false; Override public boolean moveToPosition(int position)return false;Override public boolean moveToPrevious() return false; Override public void registerContentObserver(ContentObserver observer) Override public void regi

19、sterDataSetObserver(DataSetObserver observer) return null; Override public boolean requery() return false; Override public Bundle respond(Bundle extras) Override public void setNotificationUri(ContentResolver cr, Uri uri) Override public void unregisterContentObserver(ContentObserverobserver)Overrid

20、e public void unregisterDataSetObserver(DataSetObserver observer) LinterPersist類里的指令:Override public Cursor query(Uri uri, String projection, String selection, String selectionArgs, String sortOrder)ResultSet rs = null;try Statement stmt = con.createStatement(); rs = stmt.executeQuery(select * from

21、+LINTER_TABLE_NAME); catch (Exception e) e.printStackTrace(); return null; Cursor c = new LinterCursor(rs, con); return c;此函數(shù)呼叫了Linter的executeQuery()函數(shù),要求Linter進(jìn)行數(shù)據(jù)庫(kù)的查詢?nèi)蝿?wù)。Linter回傳一個(gè)ResultSet對(duì)象,讓應(yīng)用程序可瀏覽所查詢到的各筆數(shù)據(jù)。在這query()函數(shù)里,就誕生一個(gè)LinterCursor 對(duì)象,讓它內(nèi)含該ResultSet對(duì)象,然后將此LinterCursor對(duì)象回傳給DispActivity應(yīng)用類。

22、于是,順利地將Linter數(shù)據(jù)庫(kù)配上ContentProvider接口,飛上枝頭變鳳凰, 成為Android嫡系成員。 終于完成我們的目:讓遠(yuǎn)從之外的Linter舶來(lái)組件,順利融入(移植到)Android之中,成為其嫡系成員之一/* - DispActivity.java*/ public class DispActivity extends ListActivity public static final String AUTHORITY= vider.rx09-04; public static final Uri CONTENT_URI= Uri.parse(c

23、ontent:/ + AUTHORITY +/Stud202);private static final String PROJECTION=new String stud_no, stud_name;Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);Intent intent = getIntent();if (intent.getData() = null) intent.setData(CONTENT_URI); Cursor cursor = ge

24、tContentResolver().query(getIntent().getData(),PROJECTION, null, null, null);if(cursor = null)return;ArrayListMap coll= new ArrayListMap(); Map item; cursor.moveToFirst();while (!cursor.isAfterLast() item = new HashMap(); item.put(c1, cursor.getString(0) + , +cursor.getString(1);coll.add(item); cursor.moveToNext();this.setListAdapter

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論