sqlite存储方法跟sql,mysql 无差.
不敢说史上最全,也不敢说史上最强大。
反正就那么着了。
下面实例源码演示
首先我们创建DBHELPER类 要继承SQLiteOpenHelper 类.
一定会实现几个方法。分别是onCreate方法,onUpgrade方法。
//数据库名 private static final String DATABASE_NAME = "XXXX.db"; //数据库版本 private static final int DATABASE_VERSION = 1; //表名 private final String table_out = "XXXX";
实例化方法
public XXXXXX(Context context) { //父类构造方法 super(context, DATABASE_NAME, null, DATABASE_VERSION); }db.execSQL("Create table budget ( _id INTEGER PRIMARY KEY AUTOINCREMENT, budget_count INTEGER, budget_month TEXT, budget_year TEXT)");/这段话 是创建一个名字为budget的表, _id 为主键,ps : 看见资料说,sqlite很奇怪,主键的那啥一定要加 _ -- 囧.
onUpgrade() 方法主要是针对 sqlite版本的不同所针对的.
DROP TABLE IF EXISTS +tableName一般执行这段sql语句过后再 onCreate() 方法即可
数据库已经创立完成....该写入数据进行下一步了.
我推荐的方法是 创建一个 DBManager类.方便管理.
//定义一个SQLiteDatabase变量 private SQLiteDatabase sqlDB; //定义一个XXXXHelper变量 private XXXXHelper dbHelper; //表名private Context mContext;
而构造方法 我只需要传入一个 Context 值即可.
在构造方法里,只需要将上诉的变量给实例化即可.
mContext = context; dbHelper = new XXXXHelper(context); sqlDB = dbHelper.getWritableDatabase();
关于SQLiteDatabase的一些方法.
execSQL(String sql, Object[] bindArgs) throws SQLException void;execSQL(String sql) throws SQLException void;insert(String table, String nullColumnHack, ContentValues values) long;insert(String table, String nullColumnHack, ContentValues values) int;update(String table, ContentValues values, String whereClause, String[] whereArgs) int;rawQuery(String sql, String[] selectionArgs) Cursor;
我推荐使用 execSQL 和rawQuery;
public int add_out(ContentValues values){ int result = 0; sqlDB.beginTransaction(); try{ sqlDB.execSQL("INSERT INTO "+table_name+" VALUES(null, ?, ?, ? ,? ,?)", new Object[]{values.getAsString("type"),values.getAsInteger("count"),values.getAsString("day"),values.getAsString("month"),values.getAsString("year")}); sqlDB.setTransactionSuccessful(); result = 1; }catch(Exception e){ e.printStackTrace(); result = 232; }finally{ sqlDB.endTransaction(); } return result; }这是insert方法。为null的就是那个主键值了.不用管他,update和delete方法同上public Cursor queryDay_out(String zzz,String xxx,String ccc) { String sql = "SELECT * FROM " +table_out + " where account_day=? and account_month=? and account_year=? order by _id desc"; Cursor c = sqlDB.rawQuery(sql, new String[]{zzz,xxx,ccc}); return c; }这个是查询方法。普通的查询
select coalesce(sum(account_count),0) from " + table_out + " where account_day=? and account_month=? and account_year=?这个是算数查询. 如果account_count 没有数据就返回0
最后再加上
public void closeDB() { sqlDB.close(); }查询出了数据. Cursor类型 .Cursor 请点击查看
private void onBudgetComplete(Cursor c){ if (c != null){ if (c.moveToFirst()){ do{ app.setBudget_month(c.getInt(c.getColumnIndex("account_count"))); }while(c.moveToNext()); } } } 查询单个cursor数据.即可用于 算数查询等while (c.moveToNext()) { c.getString(c.getColumnIndex("_id")); c.getString(c.getColumnIndex("account_type")); c.getInt(c.getColumnIndex("account_count")); c.getString(c.getColumnIndex("account_day")); c.getString(c.getColumnIndex("account_month")); c.getString(c.getColumnIndex("account_year")); } 查询整体数据ps- 需要注意的是,请在写sql语句的时候,注意留空格。!!! 我吃亏很大。
如有疑问请留言