android SQLite数据库应用于草稿箱

作为android开发者,我们知道其有五种存储方法:

1)网络存储

2)文件存储

3)SharedPreferences

4)ContentProvider

5)SQLite数据库

以上除了网络存储是将数据存储在后台外,其余的都是基于本地的。在这里我主要讲解android SQLite数据库的使用以及使用sqlite打造一个草稿箱的功能。sqlite是一种关系型数据库,体积小运行库,其api也比较简单,可执行sql语句。

一般的,我们使用 SQLite数据库,首先我们需要创建一个类然后继承SQLiteOpenHelper这个抽象类,其默认需要重写实现onCreate和onUpgrade抽象方法,还需要创建一个类的构造函数。

public class CustomDatabaseHelper extends SQLiteOpenHelper {

    //创建表
    public static final String DATA_DRAFTS = "create table drafts ("
            + "drafts_id integer primary key autoincrement, "
            + "uers_id varchar, "
            + "title varchar, "
            + "content varchar, "
            + "tag_id varchar)";

    public CustomDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATA_DRAFTS);
    }

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

    }
}
复制代码

使用CustomDatabaseHelper的时候,会在onCreate中执行DATA_DRAFTS这条语句就会创建drafts这个表。 使用的时候,利用构造函数,将上下文context、数据库名字和版本号传进来就可以了,SQLiteOpenHelper和检测有没有该数据库,如果没有就会创建数据库并且调用onCreate方法,如果存在数据库并且数据库的版本号大于当前版本号就会升级数据库,也就是会调用onUpgrade方法。

dbHelper = new CustomDatabaseHelper(this, "Drafts.db", null, 1);
复制代码

sqlite数据库是支持sql编程的,当然其本身也提供了非常方便的数据库操作的api。 插入数据:

SQLiteDatabase db = dbHelper.getWritableDatabase(); 
ContentValues v = new ContentValues();
v.put("uers_id", "001"); 
v.put("title",  "my first drafts");
v.put("content", "hello world");
v.put("tag_id", "ox001");
db.insert("drafts", null, v); 
复制代码

更新数据db.update方法,删除数据db.delete方法,查询数据db.query方法。


接下来介绍操作数据库的另一种方式以及使用这种方式创建一个草稿箱。 首先创建一个数据库管理类DraftsDatabaseHelper,定义一些变量和sql数据。

private Context mContext;
	//存放路径
	public static String DATABASE_PATH = Utils.getSdcardPath() ;//数据库存放路径
	public static final String DATABASE_NAME = "drafts.db";
	public static final String DRAFTS_TABLE = "drafts";
	public static final String DRAFTS_ID = "drafts_id";
	public static final String DRAFTS_TITLE = "title";
	public static final String DRAFTS_CONTENT = "content";
	public static final String TAG_ID = "tag_id";
	//创建表
	public static final String CREATE_DRAFTS = "CREATE TABLE IF NOT EXISTS "+DRAFTS_TABLE+"("
			+ DRAFTS_ID+" integer primary key autoincrement, "
			+ USER_ID+" varchar, "
			+ DRAFTS_TITLE+" varchar, "
			+ DRAFTS_CONTENT+" varchar , "
			+ TAG_ID+" varchar )";
	private static SQLiteDatabase sDatabase;
	private static String sCurrentDir;
复制代码
        //打开数据库
	private static SQLiteDatabase openDatabase(String dir){
		if (dir == null)
			return null;
		File file = new File(dir);
		if (!file.exists()) {
			if (!file.mkdirs()) {
				return null;
			}
		}
		if (sCurrentDir != null && sCurrentDir.equals(dir) && sDatabase != null && sDatabase.isOpen()) {
			return sDatabase;
		}
		try {
			if (sDatabase != null && sDatabase.isOpen()) {
				sDatabase.close();
			}
			sDatabase = null;
			SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dir + "/" + DATABASE_NAME, null);
			db.execSQL(CREATE_DRAFTS);
			Cursor cursor = db.query(DRAFTS_TABLE, null, null, null, null, null, null);
			String[] columnNames = cursor.getColumnNames();
			cursor.close();
			String strColumns = "";
			if (columnNames != null) {
				for (int i = 0; i < columnNames.length; i++) {
					strColumns += columnNames[i] + ",";
				}
			}
			if (!strColumns.contains(DRAFTS_ID))
				db.execSQL("ALTER TABLE " + DRAFTS_TABLE + " ADD " + DRAFTS_ID + " integer");
			if (!strColumns.contains(USER_ID))
				db.execSQL("ALTER TABLE " + DRAFTS_TABLE + " ADD " + USER_ID + " varchar");
			if (!strColumns.contains(DRAFTS_TITLE))
				db.execSQL("ALTER TABLE " + DRAFTS_TABLE + " ADD " + DRAFTS_TITLE + " varchar");
			if (!strColumns.contains(DRAFTS_CONTENT))
				db.execSQL("ALTER TABLE " + DRAFTS_TABLE + " ADD " + DRAFTS_CONTENT + " varchar");
			if (!strColumns.contains(TAG_ID))
				db.execSQL("ALTER TABLE " + DRAFTS_TABLE + " ADD " + TAG_ID + " varchar");
			sDatabase = db;
			sCurrentDir = dir;
			return db;
		} catch (Exception e) {
			System.out.println("" + e.getMessage());
		}
		return null;
	}
复制代码
	 //插入数据
	public static boolean add(String dir, CircleInfo.DraftsInfo info) {
		if (info == null) {
			return false;
		}
		SQLiteDatabase db = openDatabase(dir);
		if (db != null) {
			db.beginTransaction();
			try {
				ContentValues values = new ContentValues();
				values.put(USER_ID, info.drafts_user_id);
				values.put(DRAFTS_TITLE, info.drafts_title);
				values.put(DRAFTS_CONTENT, info.drafts_content);
				values.put(TAG_ID,info.tagId);
				db.insert(DRAFTS_TABLE,null,values);
			} catch (SQLiteConstraintException e) {
				e.printStackTrace();
			}
			db.setTransactionSuccessful();
			db.endTransaction();
			return true;
		}
		return false;
	}
复制代码
	 //更新数据
	public static boolean update(DraftsInfo info, String rootDir) {
		if (StrUtils.isEnpty(rootDir)) {
			return false;
		}
		File file = new File(rootDir);
		if (!file.exists()) {
			if (!file.mkdirs()) {
				return false;
			}
		}
		SQLiteDatabase db = openDatabase(rootDir);
		if (db != null) {
			try {
				ContentValues values = new ContentValues();
				values.put(USER_ID, info.drafts_user_id);
				values.put(DRAFTS_TITLE, info.drafts_title);
				values.put(DRAFTS_CONTENT, info.drafts_content);
				values.put(TAG_ID,info.tagId);
				db.update(DRAFTS_TABLE, values, DRAFTS_ID + "=?", new String[]{info.drafts_id + ""});
				return true;
			} catch (Exception e) {
				e.printStackTrace();
				return false;
			}
		}
		return false;
	}
复制代码
	 //删除数据
	public static boolean deleteByTagId(String tagId,String dir) {
		if (dir == null || tagId == null)
			return false;
		File file = new File(dir);
		if (!file.exists() || !file.isDirectory() ) {
			return false;
		}
		SQLiteDatabase db = openDatabase(dir);
		if (db != null) {
			try {
				db.delete(DRAFTS_TABLE, TAG_ID + "=?", new String[]{tagId});
				return true;
			} catch (Exception e) {
				return false;
			}
		}
		return false;
	}
复制代码
	 //查询数据
	public static ArrayList<DraftsInfo> queryData(String path,String state) {
		if (TextUtils.isEmpty(path)) {
			return null;
		}
		String finalDir = path;
		File file = new File(finalDir);
		if (!file.exists()) {
			if (!file.mkdirs()) {
				return null;
			}
		}
		SQLiteDatabase db = openDatabase(finalDir);
		if (db != null) {
			try {
				Cursor cursor = db.rawQuery("select * " + " from " + DRAFTS_TABLE,null);
				if (cursor != null) {
					ArrayList<DraftsInfo> infos = cursorToMsgs(cursor);
					cursor.close();
					return infos;
				}
			} catch (Exception e) {
				return null;
			}
		}
		return null;
	}
复制代码
private static ArrayList<DraftsInfo> cursorToMsgs(Cursor cursor) {
		ArrayList<DraftsInfo> infos = new ArrayList<DraftsInfo>();
		DraftsInfo info = null;
		cursor.moveToFirst();
		int columnCount = cursor.getColumnCount();
		while (!cursor.isAfterLast()) {
			info = new DraftsInfo();
			for (int i = 0; i < columnCount; i++) {
				String name = cursor.getColumnName(i);
				if (name.equals(DRAFTS_ID)) {
					info.drafts_id = cursor.getInt(i);
				}
				if (name.equals(USER_ID)) {
					info.drafts_user_id = cursor.getString(i);
				}
				if (name.equals(DRAFTS_TITLE)) {
					info.drafts_title = cursor.getString(i);
				}
				if (name.equals(DRAFTS_CONTENT)) {
					info.drafts_content = cursor.getString(i);
				}
				if(name.equals(TAG_ID)){
					info.tagId = cursor.getString(i);
				}
			}
			infos.add(info);
			cursor.moveToNext();
		}
		return infos;
	}
复制代码

以上就是打开sqlite数据库的另外一种方式,以及创建的草稿箱数据库,大家可以根据草稿箱需要,添加自己业务所需要的字段进行存储。使用的时候只需要提供数据库的存放路径即可。这种方式主要是根据需求可以将数据库存放在自己想要存放的地方。 使用时需要提供存放路径,如查询数据ArrayList<DraftsInfo> infos = DraftsDatabaseHelper.queryData(DraftsDatabaseHelper.DATABASE_PATH);

本文希望对大家的开发有所帮助。如果文章写得有所不足,希望大家指出来,我会好好的更正,大家互相学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值