Android学习总结(十八) ———— SQLite数据库使用

一、基本概念

  数据库最经典的四个操作 添加、删除、修改、查找,在处理大量数据的时候使用数据库可以帮我们迅速定位当前须要处理的数据,举个例子 好比现在要实现一个搜索功能 用数据库的话只须要其中一个搜索条件 一个数据库语句就可以迅速的在N条数据中找到我们需要的数据,如果不使用数据库那么查找起来会非常麻烦,效率大打折扣,所以在处理大量数据的时候使用数据库是明确的选择,在Android的开发中使用的数据库是SQLite ,它是一个轻量级的数据库、非常小、移植性好、效率高、可靠,嵌入式设备因为受到硬件条件的限制所以非常适合使用SQLite 数据库。

二、创建与删除数据库

  封装一个类去继承SQLiteOpenHelper  在构造函数中传入数据库名称与数据库版本号,数据库被创建的时候会调用onCreate(SQLiteDatabase db) 方法,数据库版本号发生改变的时候会调用onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法,可以方便的对软件游戏升级后做出相应处理避免覆盖安装数据库发生改变产生的错误。调用SQLiteOpenHelper  的getReadableDatabase()方法去创建数据库,如果数据库不存在则创建 并且返回SQLiteDatabase对象,如果数据库存在则不创建只返回SQLiteDatabase对象。调用deleteDatabase(DATABASE_NAME)方法 传入数据库名称则可删除数据库。

三、示例代码

  封装了一个DatabaseHelper类继承SQLiteOpenHelper 我使用了设计模式中的单例模式来处理这个类,这里说一下单例模式 单例模式是常见的代码设计模式之一 它的好处是在于避免在内存中频繁的实例化所以将它的对象写成static 静态 这样它的对象就只有一份存在静态内存区使用的时候只须要通过getInstance()就可以直接拿到这个静态对象。代码如下所示:

package com.nyl.sql;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * 建表
 */

public class DatabaseHelper extends SQLiteOpenHelper{

    private static DatabaseHelper databaseHelper = null;

    //数据库名称
    public static final String DATABASE_NAME = "nyl.db";

    //数据库版本号
    private static final int DATABASE_VERSION = 1;

    //数据库SQL语句,添加一个表
    private static final String NAME_TABLE_CREATE = "create table test("
    +"id integer primary key autoincrement,"
    +"name text,"
    +"hp integer default 100,"
    +"mp integer default 100,"
    +"number integer)";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

    }

    //单例模式
    static synchronized DatabaseHelper getInstance(Context context){
        if (databaseHelper == null){
            databaseHelper = new DatabaseHelper(context);
        }
        return databaseHelper;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //向数据中添加表
        sqLiteDatabase.execSQL(NAME_TABLE_CREATE);
    }

    //可以拿到当前数据库的版本信息,与之前数据库的版本信息,用于更新数据库
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    }

    /**
     * 删除数据库
     * @param context
     * @return
     */
    public boolean deleteDatabase(Context context) {
        return context.deleteDatabase(DATABASE_NAME);
    }
}

3.1 创建与删除数据库

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/new_sqlite"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btnCreateDateBase"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="创建数据库"/>

    <Button
        android:id="@+id/btnDeleteDateBase"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="删除数据库"/>

</LinearLayout>

  在这个类中使用DatabaseHelper对象 实现创建与删除数据库,代码如下所示:

package com.nyl.sql;

import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

/**
 * 创建与删除数据库
 */
public class NewSQLite extends Activity implements View.OnClickListener {

    private Button btnCreateDateBase;
    private Button btnDeleteDateBase;

    DatabaseHelper databaseHelper = null;
    SQLiteDatabase db = null;
    Context context = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_sqlite);
        context = this;
        initView(); //初始化布局控件
    }

    private void initView() {
        btnCreateDateBase = (Button) findViewById(R.id.btnCreateDateBase);
        btnDeleteDateBase = (Button) findViewById(R.id.btnDeleteDateBase);

        btnCreateDateBase.setOnClickListener(this);
        btnDeleteDateBase.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.btnCreateDateBase){
            //创建DatabaseHelper对象
            databaseHelper = DatabaseHelper.getInstance(context);
            //调用getReadableDatabase方法,如果数据库不存在则创建,如果存在则打开
            db = databaseHelper.getReadableDatabase();
            Toast.makeText(NewSQLite.this,"成功创建数据库",Toast.LENGTH_SHORT).show();
        }

        if (view.getId() == R.id.btnDeleteDateBase){
            //创建DatabaseHelper对象
            databaseHelper = DatabaseHelper.getInstance(context);
            //调用getReadableDatabase方法,如果数据库不存在则创建,如果存在则打开
            db = databaseHelper.getReadableDatabase();
            //关闭数据库
            databaseHelper.close();
            //删除数据库
            databaseHelper.deleteDatabase(context);
            Toast.makeText(NewSQLite.this,"成功删除数据库",Toast.LENGTH_SHORT).show();
        }
    }
}

  点击创建数据库按钮时,运行效果如下图:

  

  点击删除数据库按钮时,运行效果如下所示:

  

3.2 创建与删除数据库中的表

   布局代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/new_table"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btnCreateTable"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="在数据库中添加一个表"/>

    <Button
        android:id="@+id/btnDeleteTable"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="在数据库中删除一个表"/>

</LinearLayout>

  数据库是可以由多张数据表组成的 如果添加一张数据库的表的话 可以使用 数据库语句 create table 名称(内容) 来进行添加 。这里给出一条创建数据库的语句 。意思是创建一张表 名称为gameInfo 表中包含的字段 为id 为integer类型 并且递增  name 为Text类型 hp,mp为integer默认数值为100 number 为INTEGER 类型。代码如下所示:

package com.nyl.sql;

import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

/**
 * 创建与删除数据库中的表
 */
public class NewTable extends Activity implements View.OnClickListener {

    private Button btnCreateTable;
    private Button btnDeleteTable;

    DatabaseHelper dbHelper = null;
    SQLiteDatabase db = null;
    Context context = null;

    //创建一张表的SQL语句
    private static final String NAME_TABLE_CREATE = "create table gameInfo("
            +"id integer primary key autoincrement,"
            +"name text,"
            +"hp integer default 100,"
            +"mp integer default 100,"
            +"number integer)";

    //删除一张表的SQL语句
    private static final String NAME_TABLE_DELETE = "drop table gameInfo";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_table);
        context = this;

        //创建DatabaseHelper对象
        dbHelper = DatabaseHelper.getInstance(context);
        //调用getReadableDatabase方法,如果数据不存在则创建,如果存在则打开
        db = dbHelper.getReadableDatabase();

        initView(); //初始化布局控件

    }

    private void initView() {
        btnCreateTable = (Button) findViewById(R.id.btnCreateTable);
        btnDeleteTable = (Button) findViewById(R.id.btnDeleteTable);

        btnCreateTable.setOnClickListener(this);
        btnDeleteTable.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.btnCreateTable){
            db.execSQL(NAME_TABLE_CREATE);
            Toast.makeText(NewTable.this,"成功添加数据表",Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(NewTable.this,"数据库中已存此表",Toast.LENGTH_SHORT).show();
        }

        if (view.getId() == R.id.btnDeleteTable){
            db.execSQL(NAME_TABLE_DELETE);
            Toast.makeText(NewTable.this,"成功删除数据表",Toast.LENGTH_SHORT).show();
        }else {
            Toast.makeText(NewTable.this,"数据库中已无此表",Toast.LENGTH_SHORT).show();
        }
    }
}

  点击在数据库中添加一个表按钮时,运行效果如下所示:

  

  当点击在数据库中删除一个表按钮时,运行效果如下:

  

3.3 增删改查数据库表中的数据

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/new_date"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btnAdd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="在表中添加一条数据"/>

    <Button
        android:id="@+id/btnDelete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="在表中删除一条数据"/>

    <Button
        android:id="@+id/btnModify"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="在表中修改一条数据"/>

    <Button
        android:id="@+id/btnFind"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="在表中查找一条数据"/>

</LinearLayout>

  使用SQLiteDatabase对象调用 insert()方法 传入标的名称与ContentValues 添加的内容 则可以向数据库表中写入一条数据 delete ()为删除一条数据 update()为更新一条数据。代码如下所示:

package com.nyl.sql;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

/**
 * 增删改查
 */
public class NewDate extends Activity implements View.OnClickListener {

    private Button btnAdd;
    private Button btnDelete;
    private Button btnModify;
    private Button btnFind;

    DatabaseHelper databaseHelper = null;
    SQLiteDatabase db = null;
    Context context = null;

    //数据库字段
    public final static String TABLE_NAME = "test";
    public final static String ID = "id";
    public final static String NAME = "name";
    public final static String HP = "hp";
    public final static String MP = "mp";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_date);
        context = this;
        //创建DatabaseHelper对象
        databaseHelper = DatabaseHelper.getInstance(context);
        //调用getReadableDatabase方法,如数据库不存在则创建,如果存在则打开
        db = databaseHelper.getReadableDatabase();
        initView();//初始化布局控件

        //给数据库表写入一些信息
        for (int i = 0; i<10; i++){
            insert(NAME,"农美眉" + i);
        }
    }

    private void initView() {
        btnAdd = (Button) findViewById(R.id.btnAdd);
        btnDelete = (Button) findViewById(R.id.btnDelete);
        btnModify = (Button) findViewById(R.id.btnModify);
        btnFind = (Button) findViewById(R.id.btnFind);

        btnAdd.setOnClickListener(this);
        btnDelete.setOnClickListener(this);
        btnModify.setOnClickListener(this);
        btnFind.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        //添加
        if (view.getId() == R.id.btnAdd){
            insert(NAME,"衣服");
            Toast.makeText(NewDate.this,"添加一条数据名称为衣服",Toast.LENGTH_SHORT).show();
        }
        //删除
        if (view.getId() == R.id.btnDelete){
            delete(ID,"1");
            Toast.makeText(NewDate.this,"删除一条id=1的数据",Toast.LENGTH_SHORT).show();
        }
        //修改
        if (view.getId() == R.id.btnModify){
            update(NAME,"连衣裙","漂亮");
            Toast.makeText(NewDate.this,"更新名称连衣裙为漂亮",Toast.LENGTH_SHORT).show();
        }
        //查找
        if (view.getId() == R.id.btnFind){
            Cursor cursor = find(ID,"3");
            String name = cursor.getString(cursor.getColumnIndex(NAME));
            Toast.makeText(NewDate.this,"查找ID为3数据的名称是" + name,Toast.LENGTH_SHORT).show();
        }
    }

    //插入一条数据
    public void insert(String name, String s) {
        ContentValues values = new ContentValues();
        values.put(name,s);
        db.insert(TABLE_NAME,null,values);
    }

    //删除一条数据
    public void delete(String id, String s) {
        db.delete(TABLE_NAME,id + "=?",new String[]{s});
    }

    //更新一条数据
    public void update(String key, String oldDate,String newDate) {
        ContentValues values = new ContentValues();
        values.put(key,newDate);
        db.update(TABLE_NAME,values,key+"=?",new String[]{oldDate});
    }

    //查找一条数据
    public Cursor find(String id, String s) {
        Cursor cursor = db.query(TABLE_NAME,null,id+"=?",new String[]{s},null,null,null);
        if (cursor != null){
            cursor.moveToFirst();
        }
        return cursor;
    }
}

  点击在表中添加一条数据按钮时,运行效果如下所示:

  

  点击在表中删除一条数据按钮时,运行效果如下所示:

  

  点击在表中修改一条数据按钮时,运行效果如下:

  

  点击在表中查找一条数据按钮时,运行效果如下:

  

  SQLite数据库使用我们就学到这里了,有什么不足的地方欢迎园友们提出宝贵意见,晚安!

时间: 2024-09-26 23:22:26

Android学习总结(十八) ———— SQLite数据库使用的相关文章

Android学习(十) SQLite 基于内置函数的操作方式

main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:or

Android学习(十八)Toast的使用

一.什么是Toast 1.Toast是一种提供给用户简洁提示信息的视图. 2.该视图以浮于应用程序之上的形式呈现给用户, Toast提示界面不获取焦点,在不影响用户使用的情况下,给用户某些提示. 3.Android提供的Toast类可以创建和显示Toast信息. 下面演示4种Toast的用法,普通的 Toast,更改位置的Toast,显示图片的Toast,自定义的Toast分别使用4个按钮来实现. main.xml <LinearLayout xmlns:android="http://s

android 学习随笔十八(广播与服务 )

1.广播接收者注册 清单文件注册(Android四大组件都要在清单文件中注册) 一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除 广播接收者可以使用代码注册 需要广播接收者运行时,使用代码注册,不需要时,可以使用代码解除注册 特殊广播接收者,必须代码注册.电量改变.屏幕开关,必须使用代码注册 2.注册广播接收者 //创建广播接收者对象 receiver = new ScreenOnOffReceiver(); //通过IntentFilter对象指定广播接收者接收什么类型的广

android学习记录(十八)---AppWidget显示内容随数据改变而更新

我们知道,appWidget可通过设置widgetinfo中的updateTimeMillies设置更新的间隔,那么,当我们需要实时进行更新的时候呢?该如何进行appWidget显示内容的更新?如行程应用中添加了新的行程,想立刻在appWidget显示内容更新. 如何? 我们知道,widgetProvider本质上就是一个广播接收器,所以我们可以在数据修改处发送一个与之符合的广播. 当我们的intent并没附带任何额外数据,只定义了action的时候,会调用WidgetProvider中的onR

QT开发(四十八)——数据库SQL接口层

QT开发(四十八)--数据库SQL接口层 SQL接口层提供了对数据库的访问,主要类包括Qt SQL模块中的QSqlDatabase.QSqlQuery.QSqlError.QSqlField.QSqlIndex和QSqlRecord.QSqlDatabase类用于创建数据库连接,QSqlQuery用于使用SQL语句实现与数据库交互. 一.QSqlDatabase 1.QSqlDatabase简介 QSqlDatabase类提供了通过连接访问数据库的接口,QSqlDatabase对象本身代表一个连

Android学习--------实现增删改查数据库操作以及实现类似微信好友对话管理操作

最近的一个实验用到东西挺多,特地总结一下. 要求功能: 1.第一个页面添加歌曲名和歌手,跳到第二个页面列表显示所有记录,使用sqlite数据库 2.对于第二个页面显示的信息可以进行删除和修改操作,并自动刷新 最后我做的效果: 长按列表项弹出单个管理的菜单,像微信好友对话管理一样. 删除时可以直接删除这一条并在列表中直接显示,更新时弹出对话框更新内容提交后在列表中重新显示. 做此例遇到的困难: 1.菜单获取上下文 2.获取对话框中的内容 3.对话框按钮添加监听事件-----注意包不要导错:impo

十一、Android学习第十天——项目开始(转)

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一段落 从今天开始就要在一个项目中(MP3播放器)来更加熟悉之前学习到的各个知识点~ 一个简单的MP3播放器,应该包括以下几个模块: (一)用户界面模块 (二)文件下载模块——下载MP3和LRC文件. (三)XML解析模块——负责解析从服务器端下载的歌曲列表XML. (四)IO模块——负责LRC文件的

Android学习路线(八)为Action bar添加action按钮

Action bar允许你为与当前应用上下文相关的最重要的action items添加action按钮.那些直接显示在action bar上的icon或者文字都被称作action buttons.那些不适合action bar或者不是那么重要的Actions将会被隐藏在action overflow(译者注:action bar最右侧的垂直的三个点)里. 图1. 一个包含Search功能的action button和用来展示附加action的action overflow. 在XML文件中指定A

在 Android 应用程序中使用 SQLite 数据库以及怎么用

part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开源的,不论什么人都能够使用它.很多开源项目((Mozilla, PHP, Python)都使用了 SQLite. SQLite 由下面几个组件组成:SQL 编译器.内核.后端以及附件.SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE).使调试.改动和扩展 SQLite 的内核变得更加方便. 图

在Android中查看和管理sqlite数据库

http://www.cnblogs.com/walkingp/archive/2011/03/28/1997437.html 在Android中查看和管理sqlite数据库 在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库位于/data/data/项目包/databases中. 使用DDMS导出sqlite数据库. 1.首先打开android项目的调试模式,然后找到显示DDMS: 选择DDM