文章目录

  • 1. Android开发之外访Sqlite数据库
    • 1.1 Sqlite数据库的优点
    • 1.2 Sqlite接口简介
      • 接口中的抽象方法
      • 接口中的实例方法
      • 接口的构造方法
      • 示例
        • 步骤
        • 例子 —— 实现增删改查

1. Android开发之外访Sqlite数据库

SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。SQLite 源代码不受版权限制。

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。

就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

1.1 Sqlite数据库的优点

  • 不需要一个单独的服务器进程或操作的系统(无服务器的)。
  • SQLite 不需要配置,这意味着不需要安装或管理。
  • 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
  • SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
  • SQLite 是自给自足的,这意味着不需要任何外部的依赖。
  • SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
  • SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
  • SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
  • SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

1.2 Sqlite接口简介

接口中的抽象方法

  • 首先你要知道SQLiteOpenHelper 是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个 自己的帮助类去继承它。SQLiteOpenHelper 中有两个抽象方法,分别是onCreate()onUpgrade();两个方法需要实现创建、升级数据库的逻辑。

接口中的实例方法

  • sQLiteOpenHelper中还有两个非常重要的实例方法: **getReadableDatabase()**和 getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。

    不同的是当数据库不可写人的时候(如磁盘空间已满), **getReadableDatabase()方法返回的对象将以只读的方式打开数据库,而getWritableDatabase()**方法则将出现异常。

接口的构造方法

  • SQLiteOpenHelper中有两个构造方法可供重写,一般使用参数少一点的那个构造方法即可。这个构造方法中接收4个参数,第一个参数是Context,就是上下文环境,必须要有它才能对数据库进行操作。第二个参数是数据库名,创建数据库时使用的就是这里指定的名称。第三个参数允许我们在查询数据的时候返回一个自定义的Cursor,一般都是传人null。第四个参数表示当前数据库的版本号,可用于对数据库进行升级操作。构建出SQLiteOpenHelper 的实例之后,再调用它的**getReadableDatabase()getWritableDatabase()方 法就能够创建数据库了此时,重写的onCreate()**方法也会得到执行,所以通常会在这里去处理一些创建表的逻辑。

示例

步骤
  1. 实现SQLiteOpenHelper接口,重写其中的onCreate()onUpgrade()方法
    • 定义建表语句
    • onCreate()方法中使用参数调用execSQL()方法传入建表语句;【可以使用一个Toast显示创建成功】
  2. 在java文件中定义触发方式触发逻辑
    • 使主类继承点击接口;定义控件,获取控件,定义事件监听器
      • 别忘了在onCreate()方法中找到控件
      • 使用SQLiteDatabase定义数据库操作对象
      • 使用ContentValues定义数据组装以便后续传入数据库
      • 对象调用ContentValuesput()方法组装数据
      • 对象调用SQLiteDatabase定义的insert()update()delete()方法操作数据库
例子 —— 实现增删改查

activity_main.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <android.widget.Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/create_database"
        android:text="Create database"/>

    <android.widget.Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/add_data"
        android:text="Add data"/>

    <android.widget.Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/update_data"
        android:text="Update data"/>

    <android.widget.Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/delete_data"
        android:text="Delete data"/>

</LinearLayout>

MySqliteOpenHelper.java

package com.example.sql;

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

import androidx.annotation.Nullable;

public class MySqliteOpenHelper extends SQLiteOpenHelper {

    public static final String CREATE_BOOK = "create table Book ("
            + "_id integer primary key autoincrement,"
            + "author text,"
            + "price real,"
            + "pages integer,"
            + "name text)";

    private Context mContext;
    public MySqliteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

    // 数据库创建时调用
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
        Toast.makeText(mContext, "create succeed", Toast.LENGTH_SHORT).show();
    }

    // 数据库升级时使用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

MainActivity.java

package com.example.sql;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private MySqliteOpenHelper dbHelper;
private Button createDatabase;
private Button addData;
private Button updateData;
private Button deleteData;
private Button queryData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MySqliteOpenHelper(this,"BookStore.db",null,2);
createDatabase = findViewById(R.id.create_database);
addData = findViewById(R.id.add_data);
updateData = findViewById(R.id.update_data);
deleteData = findViewById(R.id.delete_data);
queryData = findViewById(R.id.query_data);
createDatabase.setOnClickListener(this);
addData.setOnClickListener(this);
updateData.setOnClickListener(this);
deleteData.setOnClickListener(this);
queryData.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.create_database){
dbHelper.getWritableDatabase();
}else if(v.getId() == R.id.add_data){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
// 开始组装第一条数据
values.put("name","The Da Vinci Code");
values.put("author","Dan Brown");
values.put("pages","454");
values.put("price","16.96");
db.insert("Book",null,values); // 插入第一条数据
values.clear();
// 开始组装第二条数据
values.put("name","The Lost Symbol");
values.put("author","Dan Brown");
values.put("pages","510");
values.put("price","19.95");
db.insert("Book",null,values); // 插入第一条数据
Toast.makeText(this, "add succeed", Toast.LENGTH_SHORT).show();
}else if(v.getId() == R.id.update_data){
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price",10.99);
db.update("Book",values,"name = ?",new String[]{"The Da Vinci Code"});
Toast.makeText(this, "update succeed", Toast.LENGTH_SHORT).show();
}else if(v.getId() == R.id.delete_data){
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("Book","pages > ?",new String[]{ "500" });
Toast.makeText(this, "delete succeed", Toast.LENGTH_SHORT).show();
}else if(v.getId() == R.id.query_data){
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 查询Book表中所有的数据
Cursor cursor = db.query("Book",null,null,null,null,null,null);
if(cursor.moveToFirst()){
do{
// 遍历Cursor对象,取出数据并打印
String name = cursor.getString(0);
String author = cursor.getString(0);
int pages = cursor.getInt(0);
double price = cursor.getDouble(0);
Log.d("MainActivity","book name is " + name);
Log.d("MainActivity","book author is " + author);
Log.d("MainActivity","book pages is " + pages);
Log.d("MainActivity","book price is " + price);
}while(cursor.moveToNext());
}
Toast.makeText(this, "yes", Toast.LENGTH_SHORT).show();
cursor.close();
}
}
}
本站无任何商业行为
个人在线分享 » Android开发之内访Sqlite数据库(六)
E-->