当前位置: 代码迷 >> SQL >> sqlite施用 心得
  详细解决方案

sqlite施用 心得

热度:378   发布时间:2016-05-05 12:20:16.0
sqlite使用 心得

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语句的时候,注意留空格。!!! 我吃亏很大。

如有疑问请留言

  相关解决方案