Chinaunix首页 | 论坛 | 博客
  • 博客访问: 418732
  • 博文数量: 121
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1393
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-11 12:17
个人简介

www.vibexie.com vibexie@qq.com

文章分类

全部博文(121)

文章存档

2015年(55)

2014年(66)

我的朋友

分类: Android平台

2015-03-13 13:19:32

对于SQLite来说,难以理解的不过就算关于sql语句的执行,即对SQLite的增删改查;
对于SQLiteOpenHelper就不多将了,看api很容易理解,下面直接贴出代码

点击(此处)折叠或打开

  1. package cn.com.xiebiao.iotest;

  2. import android.content.Context;
  3. import android.database.sqlite.SQLiteDatabase;
  4. import android.database.sqlite.SQLiteOpenHelper;

  5. /**
  6.  * Created by vibexie on 3/13/15.
  7.  */
  8. public class DBHelper extends SQLiteOpenHelper{

  9.     public static final String name="mydb.db";
  10.     public static final int version=1;

  11.     public DBHelper(Context context) {
  12.         super(context, name, null, version);
  13.     }

  14.     @Override
  15.     public void onCreate(SQLiteDatabase sqLiteDatabase) {
  16.         String sql="create table person(pid interger,name varchar(60),addr varchar(60));";
  17.         sqLiteDatabase.execSQL(sql);
  18.     }

  19.     @Override
  20.     public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) {

  21.     }
  22. }

然后用一个单元测试去进行对SQLite的操作

点击(此处)折叠或打开

  1. package cn.com.xiebiao.iotest;

  2. import android.app.Application;
  3. import android.content.ContentValues;
  4. import android.database.sqlite.SQLiteDatabase;
  5. import android.test.ApplicationTestCase;

  6. /**
  7.  * Testing Fundamentals
  8.  */
  9. public class ApplicationTest extends ApplicationTestCase<Application> {
  10.     public ApplicationTest() {
  11.         super(Application.class);
  12.     }

  13.     @Override
  14.     protected void setUp() throws Exception {
  15.         super.setUp();
  16.         DBHelper dbHelper=new DBHelper(getContext());

  17.         SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();

  18.         //传入sql语句的参数,用ContentValues来包装
  19.         ContentValues contentValues=new ContentValues();
  20.         contentValues.put("pid",100);
  21.         contentValues.put("name","vibexie");

  22.         //执行insert,官方文档鼓励我们用官方给的对应增删盖查的方法,不推荐使用excute一条sql语句,对于我们实现者来说,
  23.         //用excute无法返回结果,但是我们可以用官方提供的对应方法可以返回结果,这就是不使用excute的原因
  24.         long values=sqLiteDatabase.insertWithOnConflict("person", "pid",contentValues,SQLiteDatabase.CONFLICT_IGNORE);

  25.         //对于上面这条语句,难以理解的还是
  26.         // public long insertWithOnConflict (String table, String nullColumnHack, ContentValues initialValues, int conflictAlgorithm)
  27.         //这个方法的最后一个参数conflictAlgorithm,
  28.     }
  29. }
在api中找到confilictAlforithm对应的int常量

好了,结合方法 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")
阅读(707) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~