利用SQLite在android上实现增删改查_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 利用SQLite在android上实现增删改查

利用SQLite在android上实现增删改查

 2017/8/28 3:08:42  钻石VIP  程序员俱乐部  我要评论(0)
  • 摘要:利用SQLite在android上实现增删改查方法:一、直接利用database.execSQL()方法输入完整sql语句进行操作这种方法适用于复杂的sql语句,比如多表查询等等这里适合于增删改,这个方法没有返回值,而查需要返回数据,故不适用增实例:database.execSQL("insertintostudent(name,age)values('小李',45)");查的话用database.rawQuery()方法,也是我们直接输入完整的sql语句查实例
  • 标签:android 实现 利用 SQL

利用SQLite在android上实现增删改查

方法:

一、直接利用database.execSQL()方法输入完整sql语句进行操作

  这种方法适用于复杂的sql语句,比如多表查询等等

  这里适合于增删改,这个方法没有返回值,而查需要返回数据,故不适用

  增实例:

    database.execSQL("insert into student (name,age) values ('小李',45)");

  查的话用database.rawQuery()方法,也是我们直接输入完整的sql语句

  查实例:

    Cursor cursor = database.rawQuery("select id,name,age from student where name=?",new String[] { "小李" });

 

二、利用系统直接封装好的API,原理是系统内部把参数拼成sql语句

  适用于简单sql语句

  增: 返回操作的行

    long row=database.insert("student", null, values);

  删: 返回受影响的行数

    int n = database.delete("student", "name=? and age=?", new String[] {"饭饭", "20" });

  改: 返回受影响的行数

    int n = database.update("student", values, "name=?",new String[] { "饭饭" });

  查: 返回数据表游标 (注意查不是select)

    Cursor cursor = database.rawQuery("select id,name,age from student where name=?",new String[] { "小李" });

 

三、其它

1、数据库的连接有限,所以创建连接用完要关闭

2、将我们需要操作的数据写入ContentValues

3、查数据时,游标通过cursor.moveToNext()方法来确定下一行是否有值,有值就读取下一行的值

4、得到列的索引有两种方法:

  通过查找列字段对应的位置得到

    int id = cursor.getInt(cursor.getColumnIndex("id"));

  直接通过列号得到

    String name = cursor.getString(1);

 

代码:

com.fry.database.MySQLiteOpenHelper

class="code_img_closed" src="/Upload/Images/2017082803/0015B68B3C38AA5B.gif" alt="">
 1 package com.fry.database;
 2 
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 6 import android.database.sqlite.SQLiteOpenHelper;
 7 import android.util.Log;
 8 
 9 public class MySQLiteOpenHelper extends SQLiteOpenHelper{
10 
11     /*
12      * 1、context 上下文
13      * 2、那么数据库名称
14      * 3、factory
15      * 4、version 数据库文件的版本
16      */
17 
18     public MySQLiteOpenHelper(Context context,int version) {
19         super(context, "fanfan3.db", null, version);
20         // TODO Auto-generated constructor stub
21     }
22 
23     /* 数据库文件创建成功后调用
24      * (non-Javadoc)
25      * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
26      */
27     @Override
28     public void onCreate(SQLiteDatabase db) {
29         Log.d("fanfan", "onCreate");
30         db.execSQL("CREATE TABLE student(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,age INTEGER)");
31     }
32 
33     /* 数据库文件更新后调用 
34      * (non-Javadoc)
35      * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
36      */
37     @Override
38     public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
39         Log.d("fanfan", "onUpgrade");
40     }
41 
42 }
logs_code_collapse">数据库类

com.fanfan.test.Test

  1 package com.fanfan.test;
  2 
  3 import com.fry.database.MySQLiteOpenHelper;
  4 
  5 import android.annotation.SuppressLint;
  6 import android.content.ContentValues;
  7 import android.database.Cursor;
  8 import android.database.sqlite.SQLiteDatabase;
  9 import android.test.AndroidTestCase;
 10 import android.util.Log;
 11 
 12 public class Test extends AndroidTestCase {
 13     public void test1() {
 14         MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1);
 15         SQLiteDatabase database = helper.getReadableDatabase();
 16         helper.getWritableDatabase();
 17     }
 18 
 19     // 系统提供的API可以解决简单问题,但是比如多表查询的问题,系统搞不定,我们可以自己用execSQL写sql语句
 20     public void insert() {
 21         MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1);
 22         SQLiteDatabase database = helper.getReadableDatabase();
 23         // ContentValues values=new ContentValues();
 24         // values.put("name", "饭饭");
 25         // values.put("age", 20);
 26         // long row=database.insert("student", null, values);
 27         // Log.d("insert", "刚刚插入的是行的编号为:  "+row);
 28         // if(row==-1){
 29         // String s="插入失败";
 30         // Log.d("insert", s);
 31         // }
 32         // 不用系统API,自己写sql
 33         database.execSQL("insert into student (name,age) values ('小李',45)");
 34         // 关闭数据库连接
 35         database.close();
 36     }
 37 
 38     public void delete() {
 39         MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1);
 40         SQLiteDatabase database = helper.getReadableDatabase();
 41         // 返回受影响的行数
 42         int n = database.delete("student", "name=? and age=?", new String[] {
 43                 "饭饭", "20" });
 44         Log.d("delete", "返回受影响的行数为:  " + n);
 45         // 关闭数据库连接
 46         database.close();
 47     }
 48 
 49     public void update() {
 50         MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1);
 51         SQLiteDatabase database = helper.getReadableDatabase();
 52         ContentValues values = new ContentValues();
 53         values.put("name", "小红");
 54         // 返回受影响的行数
 55 
 56         // 更改符合筛选条件的记录
 57         int n = database.update("student", values, "name=?",
 58                 new String[] { "饭饭" });
 59         // 更改表中所有记录
 60         // int n=database.update("student", values, null, null);
 61         Log.d("update", "返回受影响的行数为:  " + n);
 62         // 关闭数据库连接
 63         database.close();
 64     }
 65 
 66     public void select() {
 67         MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1);
 68         // 创建数据库连接
 69         SQLiteDatabase database = helper.getReadableDatabase();
 70         /*
 71          * distinct==true 剔除重复数据 table 表名 column 查询的列 selection 筛选条件
 72          * selsetionArgs 指定筛选条件参数值 groupBy 分组 having 分组筛选 orderBy 排序 比如"age asc"
 73          * limit 分页
 74          */
 75         // select * from student where
 76         // 返回的是一个结果集合
 77         // Cursor cursor=database.query(true, "student", new
 78         // String[]{"id","name","age"}, null, null, null, null, null, null);
 79 
 80         // 如果多表查询,上面的方法不行,因为database.execSQL没有返回值,我们无法返回结果
 81         Cursor cursor = database.rawQuery(
 82                 "select id,name,age from student where name=?",
 83                 new String[] { "小李" });
 84 
 85         // 下一行是否有数据
 86         while (cursor.moveToNext()) {
 87             // 具体得那一列的索引
 88             // 通过索引得到
 89             int id = cursor.getInt(cursor.getColumnIndex("id"));// id是第0列
 90             // 直接通过列号得到
 91             String name = cursor.getString(1);
 92             int age = cursor.getInt(2);
 93             String ans = "id:  " + id + "      name:  " + name + "     age:  "
 94                     + age;
 95             Log.d("select", ans);
 96         }
 97         // 关闭数据库连接
 98         database.close();
 99     }
100 }
JUnit 测试增删改查

 

上一篇: 特斯拉 Model 3 车身结构曝光,改用钢铝混合以降成本 下一篇: 没有下一篇了!
发表评论
用户名: 匿名