raw下db文件的使用

[原]android 將.txt文件轉化爲.db並使用raw下的數據文件

2011-7-7閱讀3663 評論1

在做城市搜索,此時,需要數據庫,可數據源從何處獲得?

1.新建一個.txt文件,以固定格式存儲城市數據,如:

1||北京
2||天津
3|新疆|烏魯木齊
4|新疆|奎屯
5|新疆|伊犁
6|新疆|庫爾勒
7|新疆|阿克蘇
8|青海省|西寧    
9|河北省|石家莊
10|河北省|邯鄲
11|河北省|保定

第一個字段爲_id,第二個爲provience,第三個字段爲city

2.建數據庫

 public void onCreate(SQLiteDatabase db) {
                Log.d("DatabaseHelper","oncreat database-----------------------------------------");
                db.execSQL("CREATE TABLE "+ CITY_TABLE + " ("+
                        "_id INTEGER PRIMARY KEY , "+
                        "province TEXT, " +
                        "city TEXT);");                
                        
            }

到系統的/data/data目錄下的對應包下查看一下是否數據庫已建好。

3.將.txt數據導入到數據庫下

將.txt文件放到應用程序對應的databases目錄下
adb push ~/桌面/city.txt  /data/data/com.android.weather/databases

# cd /data/data/com.android.weather/databases
# ls
city.txt
city_search.db
# sqlite3 city_search.db
sqlite> .tables
android_metadata  citytable
sqlite> .import city.txt citytable
adb pull /data/data/com.android.weather/databases/city_search.db ~/桌面

現在已經獲取了一個city_search.db的文件在桌面上。

4.使用

package com.android.weather.db;

import java.io.File;

import java.io.FileOutputStream;
import java.io.InputStream;


import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.util.Log;
import com.android.weather.R;

public class CityDataProvider extends ContentProvider {
	private static final String TAG = "CityDataProvider";
	
	private static final String AUTHORITY = "com.android.weather.db.city";
	private DatabaseHelper mDatabase;
	public static final Uri CONTENT_URI = Uri.parse("content://"+AUTHORITY+"/city");
	private final static String dataBaseDesDir =  "/data/data/com.android.weather/databases";

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		Log.d(TAG,"query");
		SQLiteDatabase db = mDatabase.getReadableDatabase();		
		return db.query(DatabaseHelper.CITY_TABLE, projection, selection, selectionArgs, null, null, null);
	}
		
	
	public boolean onCreate() {

        mDatabase = DatabaseHelper.getInstance(getContext());
        onCreateDatabaseDir();
        
		return true;
	}
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		return 0;
	}
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		return 0;
	}
	public String getType(Uri uri) {
		return null;
	}
	public Uri insert(Uri uri, ContentValues values) {
		return null;
	}
	
	 private static  class DatabaseHelper extends SQLiteOpenHelper {
	        private static final String DATABASE_NAME = "city_search.db";
	        private static final String CITY_TABLE = "citytable";
	        private static final int DATABASE_VERSION =4;
	    	static synchronized DatabaseHelper getInstance(Context context) {

	    		return new DatabaseHelper(context);
	        }


	        public DatabaseHelper(Context context) {
	            super(context, DATABASE_NAME, null, DATABASE_VERSION);
	        }

	        public void onCreate(SQLiteDatabase db) {
	        	Log.d("DatabaseHelper","oncreat database-----------------------------------------");
//	        	db.execSQL("CREATE TABLE "+ CITY_TABLE + " ("+
//	    				"_id INTEGER PRIMARY KEY , "+
//	    				"province TEXT, " +
//	    				"city TEXT);");	        	
                        
	        }
	   	 

	        public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
//	        	db.execSQL("DROP TABLE IF EXISTS "+CITY_TABLE);
//	    		onCreate(db);

	        }
	    }
	 
	 private  void onCreateDatabaseDir() {
			
			File dir = new File(dataBaseDesDir);

			if (!dir.exists()) {
				try {
					dir.mkdir();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		
			copyDatabaseFile(dataBaseDesDir);
		}
		
		
		private  void copyDatabaseFile(String destDir) {
			File dest = new File(destDir+"/"+DatabaseHelper.DATABASE_NAME);       
			if(dest.exists())
			{
				return ;
			}
			
			try {
				Log.d(TAG,"the database is not exit,then copy it---------------------");
				
				InputStream in = CityDataProvider.this.getContext().getResources().openRawResource(R.raw.city_search);
				int size = in.available();
				byte buf[] = new byte[size];
				in.read(buf);
				in.close();
				
				FileOutputStream out = new FileOutputStream(dest);
				out.write(buf);
				out.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

}



查看評論
  • 1樓huangzcy2011-12-28 11:19

    能問下你的程序好像是把txt文件讀取進數據庫嗎???

更多評論(1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章