首先 系统有个类叫SQLiteOpenHelper 现在知道知道 这个是帮你打开数据库就可以了
自己实现个
public class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
//构造方法 这里就会检查super()里面第二个参数,看看有没有这个数据据,如果有就连接,如果没有就调用下面的
//onCreate方法创建一个数据库,然后取得连接。
public DatabaseHelper(Context context) {
super(context, LauncherContent.DB_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL("Create table "
+ LauncherContent.APPS_TABLE_NAME
+ "( _id INTEGER PRIMARY KEY AUTOINCREMENT," +
"PACKAGE_NAME TEXT, " +
"OPEN_TIMES INTEGER," +
"IS_SHOW INTEGER);");
}
//看到super()里面最后一个参数了没,当verision改变的时候条用onUpgrade,开始的时候先不过管这个。
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "
+ LauncherContent.APPS_TABLE_NAME +
", " + LauncherContent.MUSIC_TABLE_NAME +
", " + LauncherContent.VIDEO_TABLE_NAME +
", " + LauncherContent.OTHERS_TABLE_NAME);
onCreate(db);
}
}
好了 这个类就可以帮助你打开数据库了。
然后在你想要打开的时候用下面的代码打开
class AppsLibraryAdapter extends BaseAdapter {
private Context mContext ;
private HashMap<String, Object> mPackNameMap = new HashMap<String, Object>();
private ArrayList<HashMap<String, Object>> mAppList = new ArrayList<HashMap<String,Object>>();
private SQLiteDatabase mDb;
private DatabaseHelper mHelper;
public AppsLibraryAdapter(Context context){
this.mContext = context;
mAppList = getList();
//我的名字起的不好。。。现在这个mHelper就是和数据库取得连接了。
mHelper = new DatabaseHelper(context);
//mDb这个时候得到一个可以读可以写的数据库对象,反正以后有什么时候找mDb就可以了查询啊,增加啊,修改啊,删除啊,嗯。
mDb = mHelper.getWritableDatabase();
}
上面的类不完整哦。。。直接复制就木有用的。。。。
view.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
int id = ((CVButton)v).getID();
HashMap<String, Object> item = mAppList.get(id);
Log.e("onClick", (String)item.get("ItemText"));
startActivity((String) item.get("ItemText"));
String[] columns ={"PACKAGE_NAME","OPEN_TIMES"};
String[] selectionArgs ={(String)item.get("ItemText")};
//这里就是查询啦
//第一个参数就是表的名字,第二个参数就是返回那些列的信息,第三个参数就是查询条件了 第四个参数就是一会替换
//第三个参数中的?号的。大概懂了吧?不懂多试试。。。。
Cursor reslutCursor = mDb.query(LauncherContent.APPS_TABLE_NAME, columns, "PACKAGE_NAME=?",
selectionArgs, null, null, null);
//这里的if看看查询结果是不是空。。。。
if(reslutCursor.getCount()==0){
//如果是空,就插入一条数据
ContentValues contentValues = new ContentValues();
contentValues.put("PACKAGE_NAME", (String)item.get("ItemText"));
contentValues.put("OPEN_TIMES", 1);
mDb.insert(LauncherContent.APPS_TABLE_NAME, null, contentValues);
}else{
//不是空 就更新数据 这里一定要注意啊moveToFirst cursor返回值最开始是指向第一个结果前面的位置哦
reslutCursor.moveToFirst();
int openTimes = reslutCursor.getInt(reslutCursor.getColumnIndex("OPEN_TIMES"));
ContentValues contentValues = new ContentValues();
contentValues.put("PACKAGE_NAME", (String)item.get("ItemText"));
contentValues.put("OPEN_TIMES", ++openTimes);
//这里和上面的查询几乎一样啦。。。返回值是有几行数据更新了~我这里主要想看下我更新成功了没有。。
//忽略下面的log信息吧~~
int a = mDb.update(LauncherContent.APPS_TABLE_NAME, contentValues, "PACKAGE_NAME=?", selectionArgs);
Log.e("affective", " "+a+"COLUMNS INDEX"+reslutCursor.getColumnIndex("OPEN_TIMES")+"open times "+openTimes);
reslutCursor.close();
}
}
});
大概这样了。。。。我不会排版原谅我 囧。。。。