Android下建立数据库

来源:互联网 发布:linux服务器书籍推荐 编辑:程序博客网 时间:2024/04/28 06:47
一,数据库基本数据public final class DataTools {public static final String AUTHORITY = "yourpackageName.WeatherProvider";public static final String PACKAGE_NAME = "yourpackageName";public static final int GET_ALL_CHANNEL = 100;public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/getAllData");public static final String TABLE_NAME = "weatherTable";public static final String DB_PATH = "/data/data/" + PACKAGE_NAME + "/databases/weather.db";public static final String DB_NAME = "weather.db";public static final int DATABASE_VERSION = 1;public static final String _ID = "id";public static final String HASHCODE = "hashcode";public static final String CITY = "city";public static final String TEMP_CUR = "temp_cur";public static final String TEMP_L = "temp_l";public static final String TEMP_H = "temp_h";public static final String IMAGE = "image";public static final String STATUS = "status";}二,数据库后台操作public class WeatherProvider extends ContentProvider {private static final String TAG = "ChannelProvider";private static UriMatcher mMatcher = new UriMatcher(UriMatcher.NO_MATCH);private WeatherDataBaseHelper mDBHelper;static {mMatcher.addURI(DataTools.AUTHORITY, "getAllData", DataTools.GET_ALL_CHANNEL);}@Overridepublic boolean onCreate() {// TODO Auto-generated method stubLog.v("pin", "*************WeatherProvider onCreate db----------------");mDBHelper = new WeatherDataBaseHelper(this.getContext(), DataTools.DB_PATH, 1);return true;}public WeatherDataBaseHelper getDBHelper() {return mDBHelper;}// delete(String table, String whereClause, String[] whereArgs)@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {// TODO Auto-generated method stubint rowId = 0;SQLiteDatabase db = mDBHelper.getReadableDatabase();rowId = db.delete(DataTools.TABLE_NAME, selection, selectionArgs);getContext().getContentResolver().notifyChange(uri, null);return rowId;// return 0;}@Overridepublic String getType(Uri uri) {// TODO Auto-generated method stubreturn null;}// insert(String table, String nullColumnHack, ContentValues values)@Overridepublic Uri insert(Uri uri, ContentValues values) {// TODO Auto-generated method stubSQLiteDatabase db = mDBHelper.getWritableDatabase();long rowId = db.insert(DataTools.TABLE_NAME, null, values);if (rowId > 0) {Log.v(TAG, "insert url return rowId " + rowId);getContext().getContentResolver().notifyChange(uri,null);// duopinreturn uri;}return null;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {// TODO Auto-generated method stubSQLiteDatabase db = mDBHelper.getReadableDatabase();return db.query(DataTools.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);// return null;}@Overridepublic int update(Uri uri, ContentValues values, String selection,String[] selectionArgs) {// TODO Auto-generated method stubint rowId = 0;SQLiteDatabase db = mDBHelper.getReadableDatabase();rowId = db.update(DataTools.TABLE_NAME, values, selection, selectionArgs);getContext().getContentResolver().notifyChange(uri, null);return rowId;// return 0;}}三,建立数据库public class WeatherDataBaseHelper extends SQLiteOpenHelper {private static final String TAG = "pin";// private static final String CREAT_TABLE_SQL =// "create table IPTV(_id integer primary key autoincrement,"// +"_name String not null, _path String not null)";// private static final String CREAT_TABLE_SQL = "create table " +// DataTools.TABLE_NAME + "("// + DataTools._ID + " integer  autoincrement,"// + DataTools.NAME + " String not null,"// + DataTools.PATH + " String not null,"// + DataTools.HASHCODE + " integer "// + "primary key(" + DataTools._ID + "," + DataTools.HASHCODE + ")"// + ")";private static final String CREAT_TABLE_SQL = "create table " + DataTools.TABLE_NAME + "("+ DataTools._ID + " integer primary key,"+ DataTools.CITY + " String not null,"+ DataTools.TEMP_CUR + " String not null,"+ DataTools.TEMP_L + " String not null,"+ DataTools.TEMP_H + " String not null,"+ DataTools.STATUS + " String not null,"+ DataTools.IMAGE + " blob not null" + ")";// blob/** * @param context */public WeatherDataBaseHelper(Context context) {super(context, DataTools.DB_NAME, null, DataTools.DATABASE_VERSION);// TODO Auto-generated constructor stub}/** * @param context * @param name * @param factory * @param version */public WeatherDataBaseHelper(Context context, String name, int version) {super(context, name, null, version);// TODO Auto-generated constructor stubLog.v(TAG, " WeatherDataBaseHelper-------constructor------------");}@Overridepublic void onCreate(SQLiteDatabase db) {Log.v(TAG, "WeatherDataBaseHelper on creat-------------------");db.execSQL(CREAT_TABLE_SQL);}/** * when version changed,updata database */@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {Log.v(TAG, "on upgrade");String sql = " DROP TABLE IF EXISTS " + DataTools.TABLE_NAME;db.execSQL(sql);onCreate(db);}}四,操作数据库(应用)public class WeatherResolver {private static final String TAG = "ChannelResolver";private final Context mContext;WeatherDataBaseHelper db;SQLiteDatabase mSQLiteDatabase;public WeatherResolver(Context c) {mContext = c;db = new WeatherDataBaseHelper(c);mSQLiteDatabase = db.getWritableDatabase();// then creat db}public ArrayList<Map<String, String>> getChannelList() {return null;}// insert one channel to system data basepublic boolean insertOneData(Context con, Map<String, String> data, byte[] bytes) {if (data == null || data.size() == 0)return false;// ContentResolver resolver = con.getContentResolver();// Cursor cursor = resolver.query(DataTools.CONTENT_URI, new String[] {// DataTools.CITY, DataTools.NAME },// DataTools.CITY + " = ? ",// new String[] { channel.get(DataTools.CITY) }, DataTools.NAME);Log.d("pin", "insertOneChannel..City Name:" + data.get(DataTools.CITY).toString());// Cursor cursor = mSQLiteDatabase.rawQuery("select * from " +// DataTools.TABLE_NAME + " where " + DataTools.CITY// + "='" + channel.get(DataTools.CITY).toString() + "'",// null);xing// Cursor cursor = mSQLiteDatabase.rawQuery(// "select * from " + DataTools.TABLE_NAME + " where " + DataTools.CITY// + "=?",// new String[] { channel.get(DataTools.CITY).toString() });Cursor cursor = mSQLiteDatabase.rawQuery("select * from " + DataTools.TABLE_NAME, null);ContentValues value = new ContentValues();value.put(DataTools.CITY, data.get(DataTools.CITY));value.put(DataTools.TEMP_CUR, data.get(DataTools.TEMP_CUR));value.put(DataTools.TEMP_L, data.get(DataTools.TEMP_L));value.put(DataTools.TEMP_H, data.get(DataTools.TEMP_H));value.put(DataTools.STATUS, data.get(DataTools.STATUS));// value.put(DataTools.IMAGE, data.get(DataTools.IMAGE));bytesvalue.put(DataTools.IMAGE, bytes);// database have data ,then not insertif (cursor != null && cursor.moveToFirst()) {updateOneDatabyID(con, value, 1);con.getContentResolver().notifyChange(DataTools.CONTENT_URI, null);Log.d("pin", "insert have pre data...not insert,then update data, db notifyChange");cursor.close();return false;}// value.put(DataTools.HASHCODE,// channel.get(DataTools.PATH).hashCode());// resolver.insert(DataTools.CONTENT_URI, value);mSQLiteDatabase.insert(DataTools.TABLE_NAME, null, value);Log.d("pin", "insert data...success");// mSQLiteDatabase.notifyAll();con.getContentResolver().notifyChange(DataTools.CONTENT_URI, null);if (cursor != null) {cursor.close();}return true;}public boolean insertAllChannel2DB(Context con, Map<String, String> channelMap) {SQLiteDatabase database = SQLiteDatabase.openDatabase(DataTools.DB_PATH, null, SQLiteDatabase.OPEN_READWRITE);return true;}public boolean deleteAllChannel(Context con) {return true;}public boolean deleteOneChannel(Context con, String channelPath) {return true;}public boolean updateOneDatabyID(Context con, ContentValues values, int id) {mSQLiteDatabase.update(DataTools.TABLE_NAME, values, "" + DataTools._ID + "=?", new String[] { String.valueOf(id) });Log.d("pin", "updateOneData data...success");return true;}}
PS:当插入多条数据时,要采用事务方式:
public boolean insertAllChannel2DB(Context con, Map<String, String> channelMap) {SQLiteDatabase database = SQLiteDatabase.openDatabase(DataTools.DB_PATH, null, SQLiteDatabase.OPEN_READWRITE);if (database.isReadOnly()) {Log.e(TAG, "database.isReadOnly...");return false;}long start = Calendar.getInstance().getTimeInMillis();Log.e("8", "====== start insert time:" + String.valueOf(start));ContentResolver resolver = con.getContentResolver();try {database.beginTransaction();for (String name : channelMap.keySet()) {Log.v(TAG, "name:" + name);String path = channelMap.get(name);// key->valuesLog.v(TAG, "path:" + path);ContentValues value = new ContentValues();value.put(DataTools._ID, path.hashCode());value.put(DataTools.NAME, name);value.put(DataTools.PATH, path);String[] args = new String[] { String.valueOf(path.hashCode()) };database.delete(DataTools.TABLE_NAME, DataTools._ID + "=?", args);// resolver.insert(DataTools.CONTENT_URI, value);// String sql = "insert into " + DataTools.TABLE_NAME +// " values(?,?,?)";database.insert(DataTools.TABLE_NAME, null, value);// database.execSQL(sql, new Object[] { path.hashCode(), name,// path });}database.setTransactionSuccessful();database.endTransaction();} catch (Exception e) {Log.e(TAG, "Exception-》database.setTransaction not Successful()...");return false;} finally {database.close();Log.e("8", "====== caculate insert time:" + String.valueOf(Calendar.getInstance().getTimeInMillis() - start));// resolver.notifyChange(uri, observer)}return true;}




                                             
0 0
原创粉丝点击