SQLite 使用(针对Android)

这篇具有很好参考价值的文章主要介绍了SQLite 使用(针对Android)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. SQLite 介绍


SQLite 使用(针对Android)

SQLite的注意事项:

  • 标准的主键写法:_id。(不标准写法:id),此外,主键只能是Integer类型的。
  • 像varchar,char等最终内部都会转变成text格式。

android里面的SQLite数据库是由底层的sqlite.c的代码来动态生成的。

2. SQLite可视化工具 安装


官方下载地址:https://www.sqliteexpert.com/download.html

模拟器下面的db数据库查找:
SQLite 使用(针对Android)
SQLite 使用(针对Android)

3. SQLite的增删改查

3.1 SqliteOpenHelper 创建 库或表


android系统封装了一个SqliteOpenHelper抽象工具类,来对SQLite进行增删改查。

SQLite 使用(针对Android)

示例:

实现通过点击按钮,来创建一个数据库,并且数据库中带有表格的效果。

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <Button
        android:text="生成DB文件"
        android:onClick="createDB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

MySqliteOpenHelper

package com.example.sqlitetest;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;

/**
 *  MySqliteOpenHelper 工具类 单例模式(1.构造函数私有化,2.对外提供函数。)
 */
// 该类就可以理解为一个数据库了。
public class MySqliteOpenHelper extends SQLiteOpenHelper {

    // 单例模式
    private static SQLiteOpenHelper mInstance;

    // 提供对外提供的函数。
    public static synchronized SQLiteOpenHelper getInstance(Context context){
        if (mInstance == null){
            mInstance = new MySqliteOpenHelper(context,"itholmes.db",null,1);
        }
        return mInstance;
    }

    /**
     * 通过构造函数,将数据库名称 , 数据库版本号等定义出来。因此,必须要声明一个构造函数。
     * @param context context就是环境,在此环境下进行创建数据库。
     * @param name 数据库名称
     * @param factory 工厂
     * @param version 版本 数据库升级后需要不断加1操作!
     */
    public MySqliteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    /**
     * 数据库初始化用的:
     *      创建表 表数据初始化 数据库第一次创建的时候调用。第二次发现有该表了就不会重复创建了!
     *      此函数只会执行一次。 因此,添加了新的数据库或者修改了数据库,必须要对应项目目录将databases目录下的db等文件删除。
     * @param sqLiteDatabase
     */
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        // 创建表:person表。

        // 主键: _id(标准) 或者 id(不标准) 必须唯一,也可以添加自动增长 。
        String sql = "create table persons(" +
                "_id integer primary key autoincrement," +
                "name text" +
                ")";

        // 执行sql
        sqLiteDatabase.execSQL(sql);
    }

    // 数据库升级用的
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

}

MainActivity

package com.example.sqlitetest;

import androidx.appcompat.app.AppCompatActivity;

import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    // 生成DB文件
    public void createDB(View view){
        // 通过MySqliteOpenHelper来操作
        SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);

        // databases数据库文件的创建,靠下面这句话。
        // 读
        SQLiteDatabase readableDatabase = helper.getReadableDatabase();
        // 写
        // SQLiteDatabase writableDatabase = helper.getWritableDatabase();

    }

}

数据线连接到手机,开启开发者调试也可以找到:
SQLite 使用(针对Android)

注意:因为,SQLiteOpenHelper的onCreate只会加载一次,并且如果发现该数据库已经创建就不会在执行了。因此,修改了sqlite的数据库内容,再次加载前一定要删除对应databases目录下的内容。

3.2 SqliteOpenHelper 实现 增删改查


SqliteOpenHelper 实现 增删改查效果:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <Button
        android:text="生成DB文件"
        android:onClick="createDB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:text="查询"
        android:onClick="query"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:text="插入"
        android:onClick="insert"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:text="修改"
        android:onClick="update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:text="删除"
        android:onClick="delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

MySqliteOpenHelper

package com.example.sqlitetest;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;

/**
 *  MySqliteOpenHelper 工具类 单例模式(1.构造函数私有化,2.对外提供函数。)
 */
// 该类就可以理解为一个数据库了。
public class MySqliteOpenHelper extends SQLiteOpenHelper {

    // 单例模式
    private static SQLiteOpenHelper mInstance;

    // 提供对外提供的函数。
    public static synchronized SQLiteOpenHelper getInstance(Context context){
        if (mInstance == null){
            mInstance = new MySqliteOpenHelper(context,"itholmes.db",null,1);
        }
        return mInstance;
    }

    /**
     * 通过构造函数,将数据库名称 , 数据库版本号等定义出来。因此,必须要声明一个构造函数。
     * @param context context就是环境,在此环境下进行创建数据库。
     * @param name 数据库名称
     * @param factory 工厂
     * @param version 版本 数据库升级后需要不断加1操作!
     */
    public MySqliteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    /**
     * 数据库初始化用的:
     *      创建表 表数据初始化 数据库第一次创建的时候调用。第二次发现有该表了就不会重复创建了!
     *      此函数只会执行一次。 因此,添加了新的数据库或者修改了数据库,必须要对应项目目录将databases目录下的db等文件删除。
     * @param sqLiteDatabase
     */
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        // 创建表:person表。

        // 主键: _id(标准) 或者 id(不标准) 必须唯一,也可以添加自动增长 。
        String sql = "create table persons(" +
                "_id integer primary key autoincrement," +
                "name text" +
                ")";

        // 执行sql
        sqLiteDatabase.execSQL(sql);
    }

    // 数据库升级用的
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

}

MainActivity文章来源地址https://www.toymoban.com/news/detail-474966.html

package com.example.sqlitetest;

import androidx.appcompat.app.AppCompatActivity;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    // 生成DB文件
    public void createDB(View view){
        // 通过MySqliteOpenHelper来操作
        SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);

        // databases数据库文件的创建,靠下面这句话。
        // 读
        SQLiteDatabase readableDatabase = helper.getReadableDatabase();
        // 写
        // SQLiteDatabase writableDatabase = helper.getWritableDatabase();
    }

    // sql 查询语句
    public void query(View view){
        // helper单例模式,因此随便调用。
        SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);
        // 查询调用getReadableDatabase就行。
        SQLiteDatabase db = helper.getReadableDatabase();
        // db.isOpen():如果db数据库是打开的,就返回true,反之返回false。
        if (db.isOpen()){
            // rawQuery方法进行查询,并且返回了一个Cursor游标。
            Cursor cursor = db.rawQuery("select * from persons", null);

            // 迭代游标
            // cursor.moveToNext()就是让游标下移,遍历数据。
            while (cursor.moveToNext()){
                // 可以直接通过索引获取。
                // int anInt = cursor.getInt(0);

                // 也可以通过cursor.getColumnIndex("_id")这种形式来获取,容错率大一点。
                int id = cursor.getInt(cursor.getColumnIndex("_id"));
                String name = cursor.getString(cursor.getColumnIndex("name"));

                Log.d("itholmes","_id:"+ id + ",name" + name);
            }

            // 一定记得关闭游标,否则耗费性能!
            cursor.close();
            // 数据库也要关闭!
            db.close();
        }
    }

    public void insert(View view) {
        // helper单例模式,因此随便调用。
        SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);

        // 增删改都需要调用getWritableDatabase
        SQLiteDatabase db = helper.getWritableDatabase();

        if (db.isOpen()){
            // 插入语句
            String sql = "insert into persons(name) values ('张三')";
            db.execSQL(sql);
        }

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

    // 修改
    public void update(View view) {
        // helper单例模式,因此随便调用。
        SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);

        // 增删改都需要调用getWritableDatabase
        SQLiteDatabase db = helper.getWritableDatabase();

        if (db.isOpen()){
            String sql = "update persons set name = ? where _id = ?";
            // 添加参数
            db.execSQL(sql,new Object[]{"李四",1});
        }

        db.close();
    }

    // 删除
    public void delete(View view) {
        // helper单例模式,因此随便调用。
        SQLiteOpenHelper helper = MySqliteOpenHelper.getInstance(this);

        // 增删改都需要调用getWritableDatabase
        SQLiteDatabase db = helper.getWritableDatabase();

        if (db.isOpen()){
            String sql = "delete from persons where _id = ?";
            db.execSQL(sql,new Object[]{1});
        }
        db.close();
    }
}

到了这里,关于SQLite 使用(针对Android)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • aoa_android工程编译注意事项

    1. android studio 版本 : 3.0.0 Android Studio 下载文件归档  |  Android 开发者  |  Android Developers (google.cn) 下载地址: https://redirector.gvt1.com/edgedl/android/studio/install/3.0.0.18/android-studio-ide-171.4408382-windows.exe 2. build.gradle(app) 修改: build.gradle完整修改如下: 3.build.gradle(aoa_android)修改如下:

    2024年02月15日
    浏览(40)
  • FPGA-常用电平标准介绍、LVDS供电注意事项

    电平标准等事项,做个笔记 三极管单端输出 如串口模块:USB转TTL;FPGA板子上的 I/O口电平标准。 只有几十MHz,工程中基本不用了。 单端:信号由一根导线输出,+5/3.3V为高电平,0为低电平。 MOS管单端输出,功耗低,翻转快。 工程实际一般适用于小于200MHz或者小于150MHz LVDS是

    2024年02月21日
    浏览(52)
  • 抖音商品上架有攻略:详细介绍步骤与注意事项

    抖音是一款非常流行的短视频分享平台,也是一个非常适合进行商品销售的平台。上架商品是在抖音上进行电商销售的重要一环,下面不若与众将介绍抖音商品的上架流程和注意事项。   1. 注册账号和认证:首先,你需要在抖音平台上注册一个账号。如果你是一个商家,建议

    2024年02月13日
    浏览(58)
  • 230502-LLM-Vicuna介绍、安装与注意事项整理

    排名 模型 Elo 得分 描述 许可证 1 🥇 GPT-4 1274 OPENAI 公司:ChatGPT-4 OpenAI公司专有 2 🥈Claude-v1 1224 Anthtopic 公司:Claude Anthtopic公司专有 3 🥉 GPT-3.5-turbo 1155 OPENAI 公司:ChatGPT-3.5 OpenAI公司专有 4 ⭐️ Vicuna-13B 1083 一个聊天助手,由LLaMA对LMSYS的用户共享对话进行了微调 开源模型 5

    2024年02月06日
    浏览(52)
  • ncnn-android-yolov7跑自己模型的注意事项

    这是一个示例 ncnn android 项目,它依赖于 ncnn 库和 opencv https://github.com/Tencent/ncnn https://github.com/nihui/opencv-mobile https://github.com/xiang-wuu/ncnn-android-yolov7 步骤1 https://github.com/Tencent/ncnn/releases 下载 ncnn-YYYYMMDD-android-vulkan.zip或自己构建 ncnn for android 将 ncnn-YYYYMMDD-android-vulkan.zip 提取到

    2024年02月15日
    浏览(46)
  • 学习Linux的注意事项(使用经验;目录作用;服务器注意事项)

    本篇分享学习Linux过程中的一些经验 Linux严格区分大小写 Linux中所有内容以文件形式保存 ,包括硬件,Linux是以管理文件的方式操作硬件 硬盘文件是 /dev/sd[a-p] 光盘文件是 /dev/sr0 等 对于设置需要写入文件,命令行的设置在重启之后就会失效,只有下入文件才可以保存下来 文

    2024年02月11日
    浏览(74)
  • 【Python】一文详细介绍plt.rcParams 在 Matplotlib 中的原理、作用、注意事项

    【Python】一文详细介绍plt.rcParams 在 Matplotlib 中的原理、作用、注意事项 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享

    2024年04月11日
    浏览(79)
  • Web开发的富文本编辑器CKEditor介绍,Django有库ckeditor_uploader对它进行支持,django-ckeditor安装方法及使用注意事项

    当需要在网页应用程序中提供富文本编辑功能时,CKEditor是一个流行的选择。CKEditor是一个开源的JavaScript富文本编辑器,它提供了强大的功能和用户友好的界面,使用户可以轻松创建和编辑格式化的文本内容。 以下是CKEditor的一些主要特性: 所见即所得编辑 :CKEditor提供了所

    2024年02月16日
    浏览(57)
  • Golang 包使用注意事项

    1)在给一个文件打包时,该包对应一个文件夹,比如这里的utils文件夹对应的包名就是utils, 文件的包名通常和文件所在的文件夹名一致,一般为小写字母。 2)当一个文件要使用其它包函数或变量时,需要先引入对应的包 引入方式1:import \\\"包名\\\" 引入方式2: 3)package指令在

    2024年02月03日
    浏览(61)
  • grpc流式使用和注意事项

    流式grpc Server-side streaming RPC:服务器端流式 RPC Client-side streaming RPC:客户端流式 RPC Bidirectional streaming RPC:双向流式 RPC 客户端代码 服务端代码 验证 分析 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eRmLdnpt-1622633151060)(readme.assets/image-202105271114

    2023年04月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包