对于SQLiteOpenHelper就不多将了,看api很容易理解,下面直接贴出代码
点击(此处)折叠或打开
-
package cn.com.xiebiao.iotest;
-
-
import android.content.Context;
-
import android.database.sqlite.SQLiteDatabase;
-
import android.database.sqlite.SQLiteOpenHelper;
-
-
/**
-
* Created by vibexie on 3/13/15.
-
*/
-
public class DBHelper extends SQLiteOpenHelper{
-
-
public static final String name="mydb.db";
-
public static final int version=1;
-
-
public DBHelper(Context context) {
-
super(context, name, null, version);
-
}
-
-
@Override
-
public void onCreate(SQLiteDatabase sqLiteDatabase) {
-
String sql="create table person(pid interger,name varchar(60),addr varchar(60));";
-
sqLiteDatabase.execSQL(sql);
-
}
-
-
@Override
-
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {
-
-
}
- }
然后用一个单元测试去进行对SQLite的操作
点击(此处)折叠或打开
-
package cn.com.xiebiao.iotest;
-
-
import android.app.Application;
-
import android.content.ContentValues;
-
import android.database.sqlite.SQLiteDatabase;
-
import android.test.ApplicationTestCase;
-
-
/**
-
* Testing Fundamentals
-
*/
-
public class ApplicationTest extends ApplicationTestCase<Application> {
-
public ApplicationTest() {
-
super(Application.class);
-
}
-
-
@Override
-
protected void setUp() throws Exception {
-
super.setUp();
-
DBHelper dbHelper=new DBHelper(getContext());
-
-
SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
-
-
//传入sql语句的参数,用ContentValues来包装
-
ContentValues contentValues=new ContentValues();
-
contentValues.put("pid",100);
-
contentValues.put("name","vibexie");
-
-
//执行insert,官方文档鼓励我们用官方给的对应增删盖查的方法,不推荐使用excute一条sql语句,对于我们实现者来说,
-
//用excute无法返回结果,但是我们可以用官方提供的对应方法可以返回结果,这就是不使用excute的原因
-
long values=sqLiteDatabase.insertWithOnConflict("person", "pid",contentValues,SQLiteDatabase.CONFLICT_IGNORE);
-
-
//对于上面这条语句,难以理解的还是
-
// public long insertWithOnConflict (String table, String nullColumnHack, ContentValues initialValues, int conflictAlgorithm)
-
//这个方法的最后一个参数conflictAlgorithm,
-
}
- }

好了,结合方法 insertWithOnConflict的源码一起就明白了,当你指定了该参数,
最终得到的SQL是 "INSERT OR REPLACE INTO table(column1, column2...) VALUES(val1, val2...)" 这样的格式……
如果非要使用public void execSQL ( sql, bindArgs)这个方法也是可以的
下面介绍下这两个params,sql就是sql语句,其中的参数用?号表示,?号对应与binArgs这个数组中的值;
比如,String sql="insert into person values(?,?,?)"
Object[] object={1,"xiebiao","123456"};
再调用execSQL(sql,object);
就相当于执行insert into person values(1,"xiebiao","123456");