首先,我们百度百科,发现很有意思的一个地方:
//该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法 @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub System.out.println("create a Database"); //execSQL函数用于执行SQL语句 db.execSQL("create table user(id int,name varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub System.out.println("update a Database"); }
代码是我直接拷的MARS老师的,oncreate是个回调函数,“实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法”,这句话的意思是即时个第一次实例化继承自SQLiOpenHelper类也不会创建表,只有在第一次getReadableDatabase()或者第一次getWriteableDatabase()的时候才会创建表。
然后SQLite提供了一些基本的增删改查封装好的方法,也可以自己直接写sql语句(我不确定O(∩_∩)O~),例如查找方法:
query(table, columns, selection, selectionArgs, groupBy, having, orderBy) 可以发现方法里的参数和sql语句非常相似,我们只要把相应的参数写入就可以了。
public long insert (String table, String nullColumnHack, ContentValues values) 这是插入方法,返回的是 long类型插入的行数,在insert中用到了ContentValues类,键值对存储数据,目前我还不知道除了在这儿用一下这个类,这个类还有什么其他用处,三个参数中第二个参数一般写NULL。
public int delete (String table, String whereClause, String[] whereArgs) 删除方法中第二个参数是条件,里面有占位符“?”,第三个参数是占位符的内容
public int update (String table, ContentValues values, String whereClause, String[] whereArgs) 这是改的方法。
然后涉及到读操作的话,实例化db的方法是:SQLiteDatabase db =this.getReadableDatabase() 涉及到写操作的话是 SQLiteDatabase db = this.getWritableDatabase()
还有如果要创建的表固定的话,可以在继承自SQLiteOpenHelper的构造方法中直接创建,如果在程序中动态创建表的话,可以自己写个构造函数,创建想要的表。
下面是csdn博主Android_Tutor的部分代码帮助大家理解下:
package com.xue.sqlitedemo.sqlite; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class BooksDB extends SQLiteOpenHelper { private final static String DATABASE_NAME = "BOOKS.db"; private final static int DATABASE_VERSION = 1; private final static String TABLE_NAME = "books_table"; public final static String BOOK_ID = "book_id"; public final static String BOOK_NAME = "book_name"; public final static String BOOK_AUTHOR = "book_author"; public BooksDB(Context context, String name, CursorFactory factory, int version) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub } public BooksDB(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub String sql = "CREATE TABLE " + TABLE_NAME + " (" + BOOK_ID + " INTEGER primary key autoincrement, " + BOOK_NAME + " text, " + BOOK_AUTHOR + " text);"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { // TODO Auto-generated method stub String sql = "DROP TABLE IF EXITS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } public Cursor select() { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db .query(TABLE_NAME, null, null, null, null, null, null); return cursor; } public long insert(String bookname, String author) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put(BOOK_NAME, bookname); cv.put(BOOK_AUTHOR, author); long row = db.insert(TABLE_NAME, null, cv); return row; } public void delete(int id) { SQLiteDatabase db = this.getWritableDatabase(); String where = BOOK_ID + " = ?"; String[] whereValue = { Integer.toString(id) }; db.delete(TABLE_NAME, where, whereValue); } public void update(int id, String bookname, String author) { SQLiteDatabase db = this.getWritableDatabase(); String where = BOOK_ID + " = ?"; String[] whereValue = { Integer.toString(id) }; ContentValues cv = new ContentValues(); cv.put(BOOK_NAME, bookname); cv.put(BOOK_AUTHOR, author); db.update(TABLE_NAME, cv, where, whereValue); } }
好了,今天就到此为止,由于本人能力有些,写的有些杂乱,望海涵。