zoukankan      html  css  js  c++  java
  • 利用SQLite在android上实现增删改查

    利用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

     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 }
    数据库类

    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 测试增删改查
  • 相关阅读:
    jquery toggle(listenerOdd, listenerEven)
    struts quick start
    hdu 1518 Square (dfs)
    hdu 2544 最短路 (最短路径)
    hdu 1754 I Hate It (线段树)
    hdu 1856 More is better (并查集)
    hdu 1358 Period (KMP)
    hdu 2616 Kill the monster (DFS)
    hdu 2579 Dating with girls(2) (bfs)
    zoj 2110 Tempter of the Bone (dfs)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7441962.html
Copyright © 2011-2022 走看看