µ±Ç°Î»Ö㺠´úÂëÃÔ >> SQL >> 我的android ç¬?Èýå¤?SQLiteOpenHelper对数æ�?º“è¿›è?版本管ç�†
  Ïêϸ½â¾ö·½°¸

我的android ç¬?Èýå¤?SQLiteOpenHelper对数æ�?º“è¿›è?版本管ç�†

Èȶȣº2407   ·¢²¼Ê±¼ä£º2016-05-05 11:54:13.0
我的android ç¬?3å¤?-SQLiteOpenHelper对数æ�?º“è¿›è?版本管ç�†

我的android ç¬?3å¤?-SQLiteOpenHelper对数æ�?º“è¿›è?版本管ç�†

 

我们在编写数æ�?º“应用è½?»¶æ—¶ï¼Œéœ?è¦�è?ƒè™‘这样的问题:因为我们å¼?å�‘çš„è½?»¶å�?ƒ½ä¼šå®‰è£…在很å?用户的手机上,å?果应用使用到了SQLiteæ•°æ�®åº“,我们必须在用户åˆ�次使用软件时创建出应用使用到的数æ�?º“表结构å�Šæ·»åŠ ä¸?些åˆ�始化记录,å�¦å¤–在è½?»¶å�‡çº§çš„æ—¶å€™ï¼Œä¹Ÿéœ€è¦�å?æ•°æ�®è¡¨ç»“构进行更新ã?‚那么,我们如何æ‰�能实现在用户åˆ�次使用或å�‡çº§è½?»¶æ—¶è‡ªåŠ¨åœ¨ç”¨æˆ·çš„æ‰‹æœºä¸Šåˆ›å»ºå‡ºåº”ç”¨éœ€è¦�的数æ�®åº“表å‘?¼Ÿæ€»ä¸�能è?我们在æ¯�ä¸?œ€è¦�安装æ?è½?»¶çš„æ‰‹æœºä¸Šé€šè¿‡æ‰‹å·¥æ–¹å¼�创建数æ�®åº“表å�§ï¼Ÿå› ä¸ºè¿™ç?éœ?求是æ¯�个数æ�®åº“应用都è¦�é�¢ä¸´çš„,所以在Android系统,为我们æ��供了一ä¸?��为SQLiteOpenHelper的抽象类,必须继承它æ‰�能使用,它æ˜??šè¿‡å¯¹æ•°æ�?º“版本进è?管ç�†æ�¥å®žçްå‰�é�¢æ��出的éœ?求ã??/span>

为了实现对数æ�?º“版本进è?管ç�†ï¼ŒSQLiteOpenHelperç±»æ��供了两个é‡�è?的方法,分别是onCreate(SQLiteDatabase db)å’ŒonUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),å‰�者用于åˆ�次使用软件时生æˆ�æ•°æ�®åº“表,å�Žè€…用于å�‡çº§è½¯ä»¶æ—¶æ›´æ–°æ•°æ�®åº“表结构。当调用SQLiteOpenHelperçš„getWritableDatabase()或è?…getReadableDatabase()方法获å�–用于æ“�作数æ�®åº“çš„SQLiteDatabase实例的时候,如果数æ�®åº“ä¸�存在,Android系统会自动生æˆ�一ä¸?•°æ�?º“,接ç�?调用onCreate()方法,onCreate()方法在åˆ�次生æˆ�æ•°æ�?º“æ—¶æ‰�会è?调用,在onCreate()方法é‡?span style="color: red;" class="Apple-style-span">å�?»¥ç”Ÿæˆ�æ•°æ�®åº“表结构å�Šæ·»åŠ ä¸€äº›åº”ç”¨ä½¿ç”¨åˆ°çš„åˆ�始化数æ�®ã€‚onUpgrade()方法在数æ�?º“的版æœ?�‘生å�˜åŒ–时会è?调用,一èˆ?œ¨è½?»¶å�‡çº§æ—¶æ‰�éœ?改å�˜ç‰ˆæœ¬å�?/span>,è?Œæ•°æ�?º“的版æœ?˜¯ç”±ç¨‹åº�员控制的,å�‡è?æ•°æ�®åº“现在的版本æ˜?,由于业务的å�˜æ›´ï¼Œä¿®æ”¹äº†æ•°æ�®åº“表结构,这时å?™å°±éœ?è¦�å�‡çº§è½¯ä»¶ï¼Œå�‡çº§è½?»¶æ—¶å¸Œæœ›æ›´æ–°ç”¨æˆ·æ‰‹æœºé‡Œçš„æ•°æ�?º“表结构,为了实现这一ç›?š„,å�¯ä»¥æŠŠåŽŸæ�¥çš„æ•°æ�?º“版本设置ä¸?(有å�Œå­¦é—®è®¾ç½®ä¸?行ä¸�行?当然å�?»¥ï¼Œå?果你愿æ„�,è?ç½?¸º100也è?),并且在onUpgrade()方法里é�¢å®žçŽ°è¡¨ç»“æž„çš„æ›´æ–°ã€‚å½“è½?»¶çš„版æœ?�‡çº§æ?数比较å?,这时在onUpgrade()方法里é�¢å�?»¥æ ¹æ�®åŽŸç‰ˆå�·å’Œç›? ‡ç‰ˆæœ¬å�·è¿›è¡Œåˆ¤æ–?¼Œç„¶å�Žä½œå‡ºç›¸åº”的表结构å�Šæ•°æ�?›´æ–°ã??/span>

getWritableDatabase()å’ŒgetReadableDatabase()方法都å�¯ä»¥èŽ·å�–一ä¸?”¨äºŽæ“�作数æ�?º“çš„SQLiteDatabase实例。但getWritableDatabase()方法以è?写方å¼�打å¼?æ•°æ�®åº“,ä¸?旦数æ�?º“çš„ç?盘空间满了,数æ�®åº“å°±å�?ƒ½è¯»è?Œä¸�能写,å?˜è‹¥ä½¿ç”¨çš„æ˜¯getWritableDatabase() 方法就会出错。getReadableDatabase()方法先以读写方å¼�打开数æ�®åº“,如果数æ�®åº“çš„ç£�盘空间满了,就会打å¼?失败,当打开失败å�Žä¼šç»§ç»­å°�试以å�ªè¯»æ–¹å¼�打å¼?æ•°æ�®åº“ã??/span>

 

public class DatabaseHelper extends SQLiteOpenHelper {

    //类没有实例化,æ˜?¸�能用作父类构造器的å�‚æ•?/span>,必须声明为é�™æ€?/span>

         private static final String name = "itcast";//数�库��/span>

         private static final int version = 1; //数�库版�/span>

         publicDatabaseHelper(Context context) {

//ç¬?¸‰ä¸?�‚æ•?/span>CursorFactory指定在执行查询时获得ä¸?ä¸?¸¸æ ‡å®žä¾‹çš„工厂ç±?/span>,设置ä¸?/span>null,代表使用系统默è?的工厂类

                super(context, name, null, version);

         }

        @Override public void onCreate(SQLiteDatabase db) {

              db.execSQL("CREATETABLE IF NOT EXISTS person (personidinteger primary key autoincrement,name varchar(20),age INTEGER)");  

         }

        @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

               db.execSQL("DROPTABLE IF EXISTS person");

               onCreate(db);

         }

}

上é�¢onUpgrade()方法在数æ�?º“版本æ¯�æ?å�‘生å�˜åŒ–时都会把用户手机上的数æ�®åº“表删除,然å�Žå†�é‡�新创建。一èˆ?œ¨å®žé™…项目ä¸?˜¯ä¸�能这样å�šçš„,æ?ç¡?š„å�𿳕æ˜?œ¨æ›´æ–°æ•°æ�®åº“表结构时,还è?考虑用户存放于数æ�?º“ä¸?š„æ•°æ�®ä¸�会丢失ã€?/span>

 

下载视é?代ç �

 

  Ïà¹Ø½â¾ö·½°¸