Android下 SQLite的使用

今天学习了android下的sqlite 。

知识记录:

1.SQLiteOpenHelper

  SQliteOpenHelper是一个抽象类,来管理数据库的创建和版本的管理。要使用它必须实现它的nCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase, int, int)方法

  onCreate:当数据库第一次被建立的时候被执行,例如创建表,初始化数据等。

  onUpgrade:当数据库需要被更新的时候执行,例如删除久表,创建新表。

第一步:创建一个类继承

SQLiteOpenHelper

代码如下

package com.zaizai.sqlite;

import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * Created by AnJie on 2015/10/8.
 */
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {

    private static final String databases_name = "mydatabase.db";
    private static final String databases_table = "person";
    private static final int databases_version = 1;
    private static final String KEY_ID = "_id";
    /*创建数据库语句*/
    private static final String databases_create = "create table person ( _id integer primary key autoincrement,name varchar(20),age integer);";

    /**
     * 数据库的构造函数
     * @param context
     *
     * name 数据库名称
     * factory 游标工程
     * version 数据库的版本号 不可以小于1
     */
    public PersonSQLiteOpenHelper(Context context) {
        super(context, databases_name, null, 5);
    }
    /**
     * @param context 环境上下文
     * @param name    数据库名称
     * @param factory
     * @param version
     */
    public PersonSQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public PersonSQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
        super(context, name, factory, version, errorHandler);
    }

    /**
     * 数据库第一次创建时回调此方法.
     * 初始化一些表
     * 创建表:
     * create table person(
     * _id integer primary key,
     * name varchar(20),
     * age integer
     * );
     */

    @Override
    public void onCreate(SQLiteDatabase db) {
        /*当磁盘上不存在数据库,辅助类需要创建一个新数据库时调用*/

        db.execSQL(databases_create);

    }

    /**
     * 数据库的版本号更新时回调此方法,
     * 更新数据库的内容(删除表, 添加表, 修改表)
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        Log.w("TaskDBAdapter", "upgrading from version" + oldVersion + "To" + newVersion + ",which will destroy all old data");
       /*删除旧表*/
        db.execSQL("DROP TABLE IF EXISTS "+databases_table);
        /*创建新表*/
        onCreate(db);
    }
}

第二步:创建一个dao类

        package com.zaizai.sqlite.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.zaizai.sqlite.PersonSQLiteOpenHelper;
import com.zaizai.sqlite.damin.Person;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by AnJie on 2015/10/8.
 */
public class PersonDao {
    private static final String TAG = "PersonDao";
    private PersonSQLiteOpenHelper myOpenHelper = null;

    public PersonDao(Context context) {
        this.myOpenHelper = new PersonSQLiteOpenHelper(context);
    }

    public void inset(Person person) {
        /**/
        SQLiteDatabase db = null;
        try {
            db = myOpenHelper.getWritableDatabase();
        } catch (Exception e) {
            e.printStackTrace();
            db = myOpenHelper.getReadableDatabase();
        }
        /**/

        if (db.isOpen()) {    // 如果数据库打开, 执行添加的操作

            ContentValues values = new ContentValues();
            values.put("name", person.getName());        // key作为要存储的列名, value对象列的值
            values.put("age", person.getAge());
            /*当value为null时,会在该列插入一个大写的Null SQLite不允许数据为null*/
            long id = db.insert("person", "name", values);
            Log.i(TAG, "id: " + id);
            
            db.close();    // 数据库关闭
        }

    }

    /**
     * 更据id删除记录
     *
     * @param id
     */
    public void delete(int id) {
        SQLiteDatabase db = null;
        try {
            db = myOpenHelper.getWritableDatabase();
        } catch (Exception e) {
            e.printStackTrace();
            db = myOpenHelper.getReadableDatabase();
        }
        if (db.isOpen()) {    // 如果数据库打开, 执行添加的操作

            String whereClause = "_id = ?";
            String[] whereArgs = {id + ""};
            int count = db.delete("person", whereClause, whereArgs);
            Log.i(TAG, "删除了: " + count + "行");
            db.close();    // 数据库关闭
        }
    }

    /**
     * 根据id找到记录, 并且修改姓名
     *
     * @param id
     * @param name
     */
    public void update(int id, String name) {
        SQLiteDatabase db = null;
        try {
            db = myOpenHelper.getWritableDatabase();
        } catch (Exception e) {
            e.printStackTrace();
            db = myOpenHelper.getReadableDatabase();
        }
        if (db.isOpen()) {    // 如果数据库打开, 执行添加的操作
            ContentValues values = new ContentValues();
            values.put("name", name);

            int count = db.update("person", values, "_id = ?", new String[]{id + ""});

            Log.i(TAG, "修改了: " + count + "行");

            db.close();    // 数据库关闭
        }
    }

    public List<Person> queryAll() {
        SQLiteDatabase db = null;
        try {
            db = myOpenHelper.getWritableDatabase();
        } catch (Exception e) {
            e.printStackTrace();
            db = myOpenHelper.getReadableDatabase();
        }
        if (db.isOpen()) {
            String[] columns = {"_id", "name", "age"};    // 需要的列
            String selection = null;    // 选择条件, 给null查询所有
            String[] selectionArgs = null;    // 选择条件的参数, 会把选择条件中的? 替换成数据中的值
            String groupBy = null;    // 分组语句  group by name
            String having = null;    // 过滤语句
            String orderBy = null;    // 排序

            Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);

            int id;
            String name;
            int age;
            if (cursor != null && cursor.getCount() > 0) {
                List<Person> personList = new ArrayList<Person>();

                while (cursor.moveToNext()) {    // 向下移一位, 知道最后一位, 不可以往下移动了, 停止.
                    id = cursor.getInt(0);
                    name = cursor.getString(1);
                    age = cursor.getInt(2);

                    personList.add(new Person(id, name, age));
                }

                db.close();
                return personList;
            }
            db.close();
        }
        return null;
    }

    /**
     * 根据id查询人
     *
     * @param id
     * @return
     */
    public Person queryItem(int id) {
        SQLiteDatabase db = null;
        try {
            db = myOpenHelper.getWritableDatabase();
        } catch (Exception e) {
            e.printStackTrace();
            db = myOpenHelper.getReadableDatabase();
        }
        if (db.isOpen()) {
            String[] columns = {"_id", "name", "age"};    // 需要的列
            String selection = "_id = ?";    // 选择条件, 给null查询所有
            String[] selectionArgs = {id + ""};    // 选择条件的参数, 会把选择条件中的? 替换成数据中的值
            String groupBy = null;    // 分组语句  group by name
            String having = null;    // 过滤语句
            String orderBy = null;    // 排序

            Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);

            if (cursor != null && cursor.moveToFirst()) {        // cursor对象不为null, 并且可以移动到第一行
                int _id = cursor.getInt(0);
                String name = cursor.getString(1);
                int age = cursor.getInt(2);

                db.close();
                return new Person(_id, name, age);
            }
            db.close();
        }
        return null;
    }

}

里面可通过原生的sql语句进行操作,也可通过api,我这里使用的是api

db = {
            db = .getWritableDatabase()} (e) {
            e.printStackTrace()db = .getReadableDatabase()}

目的是为了防止权限不够的备用措施

时间: 2024-10-11 06:47:21

Android下 SQLite的使用的相关文章

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

Android下利用SQLite数据库实现增删改查

1: 首先介绍如何利用adb查看数据库 1: adb shell 2: cd /data/data/包名/databases 3:  sqlite3 数据库 4   接下来就可以进行数据库的sql语法的使用了 bean对象: public class Person { private int id; private String name; private String number; } 数据库的创建以及表的创建: package com.example.db; import android.

Android下使用SQLite数据库

1.SQLite数据库的特点 安卓手机自带, 小巧, 适合在手机中使用 不区分数据类型(主键除外) SQL语句和MySQL几乎相同 SQLite不使用JDBC连接, 使用的是Android自有的API 每个数据库对应一个文件 * 2.创建数据库 定义类继承SQLiteOpenHelper, 实现onCreate(), onUpgrade() 创建该类对象, 调用getWritableDatabse()或者getReadableDatabse() 情况1: 数据库文件不存在, 创建文件, 打开数据

Android下创建一个SQLite数据库

数据库:SQLite(轻量级,嵌入式的数据库) 大量的相似结构的数据的储存,快速的查询.特殊的文件(按照一定的格式生成) 数据库的创建 创建文件 1.声明文件对象,文件是不会被创建出来的. File file = new File("文件名称"); 2.写文件(文件才会被创建出来) FileOutputStream fos = new FileOutputStream(file); fos.write("hdahfdsaklfh".getbytes()); 创建数据

Android中SQLite数据库小计

2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for the Enterprise>.学习目标: 学习Android对SQL的支持. 理解在Java中使用SQL——通过SQLiteDatabase类. 创建数据库——SQLiteOpenHelper类. 理解loaders.cursors和adapters. 为了在程序中使用本地的,结构化的数据,需要完成

Android 操作SQLite基本用法

在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的. 一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入  式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等

android学习十一(android的SQLite数据库的使用)

SQLite是一款轻量级的关系型数据库,它运算速度快,占用资源少,通常只需要几百k的内存就够了,支持标准的sql语法和数据库的ACID事务.在android中为了能够更加方便的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,借助这个类就可以非常简单的对数据库进行创建和升级. SQLiteOpenHelper是一个抽象类,如果我们要使用的话,就需要创建一个自己的类去继承它.SQLiteOpenHelper中有2个抽象方法,分别是onCreate和onUpgrade方法,我们必须在

android 43 SQLite数据库

SQLite数据库很小,占用内存只有几百K,安卓和IOS都是用的SQLite数据库. 页面: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="ver

Android中SQLite数据库的简单使用

File file = new File("hah.txt"); //只是创建了一个对象file, file指向了hah.txt这个文件,hah.txt这个文件可能存在,也可能不存在.如果文件不存在,则不会被创建. 必须要有文件输出流对文件进行了写的操作,文件才会被创建. 游标:在访问数据库中表结构时,想访问表中的某一行的时候,数据库内部有一个快速的定位方式,这个定位方式是通过索引来实现的.游标相当于数组的指针,通过游标的上下移动来查找数据. 在Android中使用SQLite数据库,