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 测试增删改查
  • 相关阅读:
    JAVA总结--正则表达式
    JAVA总结--java数据类型
    数据结构与算法
    JAVA总结--JDK版本区别
    JAVA总结--代码规范
    .net core 学习笔记(4)-ViewComponent
    .net core学习笔记(3)-依赖注入
    .net core 学习笔记(2)-中间件
    .net core 学习笔记(1)-分页控件的使用
    taginput ,complete使用笔记
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7441962.html
Copyright © 2011-2022 走看看