首页 > 数据库 > 45. SQLite

45. SQLite

时间:2022-09-19 09:12:12浏览次数:73  
标签:SQLite layout 45 db content wrap import android

45. SQLite
45.1 SQLite介绍
SQLite关系型数据库。

嵌入式的数据库,体积小,功能强大,几十kb。

在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)
等数据类型,只不过在运算或保存时会转成对应的五种数据类型。SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,但是主键只能是Integer类型的。
Sqlite数据库一般要求主键是_id,当然也可以是id.
原来:数据库
安装一个数据库的软件。
android里面的数据库是由底层的sqilte.c的代码来动态生成的。

45.2 SQLite可视化工具
笔者没用老师用的,我直接用Navicat 15

在这里插入图片描述

45.3 SQLite创库创表

Android系统封装了一个类 SqliteOpenHelper

新建工程

在这里插入图片描述

自定义类

package com.dingjiaxiong.mysqlite;

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

import androidx.annotation.Nullable;

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    
    private static SQLiteOpenHelper mInstance;
    public static synchronized SQLiteOpenHelper getmInstance(Context context){
        if(mInstance == null){
            mInstance = new MySQLiteOpenHelper(context , "dingjiaxiong.db",null,1);
        }
        return mInstance;
    }
    
    private MySQLiteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    //数据库初始化用的
    @Override
    public void onCreate(SQLiteDatabase db) {
        
    }

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

    }
    
}


布局

<?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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="生成DB文件"
        android:onClick="createDB"
        />

</LinearLayout>

运行

在这里插入图片描述

在这里插入图片描述

这个表是默认生成的,无用。(意思是英文环境)

创建表

在这里插入图片描述

运行程序

在这里插入图片描述

45.4 SQLite增删改查
修改布局

<?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:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="生成DB文件"
        android:onClick="createDB"
        />

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


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

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

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

</LinearLayout>

 

 


package com.dingjiaxiong.mysqlite;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
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);

    }

    public void createDB(View view) {
        SQLiteOpenHelper helper = MySQLiteOpenHelper.getmInstance(this);

        //database文件夹 → 创建
        SQLiteDatabase readableDatabase = helper.getReadableDatabase();
    }

    public void query(View view) {
        SQLiteOpenHelper helper = MySQLiteOpenHelper.getmInstance(this);
        SQLiteDatabase db = helper.getReadableDatabase();

        if (db.isOpen()) {
            Cursor cursor = db.rawQuery("select * from persons", null);
            //迭代游标
            while (cursor.moveToNext()) {
//                int _id = cursor.getInt(0);
//                @SuppressLint("Range") int _id = cursor.getInt(cursor.getColumnIndex("_id"));
//                @SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex("name"));

                int _id = cursor.getInt(0);
                String name = cursor.getString(1);

                Log.e("dingjiaxiong", "query: _id: " + _id + " name: " + name);

            }

            cursor.close();
            db.close();
        }
    }

    public void insert(View view) {
        SQLiteOpenHelper helper = MySQLiteOpenHelper.getmInstance(this);
        SQLiteDatabase db = helper.getWritableDatabase();

        if (db.isOpen()) {
            String sql = "insert into persons(name) values('dingjiaxiong')";
            db.execSQL(sql);
            db.close();
        }
        

    }

    public void update(View view) {
        SQLiteOpenHelper helper = MySQLiteOpenHelper.getmInstance(this);
        SQLiteDatabase db = helper.getWritableDatabase();

        if (db.isOpen()) {
            String sql = "update persons set name = ? where _id = ?";
            db.execSQL(sql,new Object[]{"凤凤",4});
            db.close();
        }
        
    }

    public void delete(View view) {
        SQLiteOpenHelper helper = MySQLiteOpenHelper.getmInstance(this);
        SQLiteDatabase db = helper.getWritableDatabase();

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

运行

在这里插入图片描述

标签:SQLite,layout,45,db,content,wrap,import,android
From: https://www.cnblogs.com/55zjc/p/16706585.html

相关文章

  • Sqlite增删改查
    sqlite增删改查importsqlite3#如果文件不存在会自动创建conn=sqlite3.connect('test.db')#创建一个cursorcursor=conn.cursor()cursor.execute('DROPTABLEuser'......
  • linux mysql数据 解决ERROR 1045 (28000): Access denied for user 'root'@'localhost
    在linux系统是输入命令: mysql-uroot-p输入密码后 提示 ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:YES):说明输入的密码是......
  • sqlite3使用2
    一.在cmd中打开SQLite1.进入数据库通过输入d:cdD:\……\SQLitesqlite3进入数据库查看数据库的基本信息:.help显示各种重要的SQLite点命令的列表.show显示SQLite命......
  • sqlite4操作
    目录SQLite数据库(一):基本操作...1目录...1一、SQLite介绍...21.   什么是SQLite.22.   什么是数据库...23.   数据库是如何存储数据的...24.  ......
  • 123456
    django-debug-toolbar使用详解简介django-debug-toolbar是django开发中必备神器,可以帮助快速了解项目的整体信息以及每个页面包括sql信息,http相关信息,方便去优化。官方......
  • 15445第一阶段笔记+Buffer Pool(2019)
    15445第一阶段笔记+BufferPool(2019)概念page与frame​ 块,页,是对同一概念的不同叫法,取决于场景不同。其表述的都是磁盘上某一柱面上的连续扇区(固定数目)。数据在磁盘和缓......
  • AcWing 845.八数码
    题目链接:https://www.acwing.com/problem/content/847/一道bfs,主要是状态和状态转换很难搞,看y总的代码中,很多关于c++库中的各种还不太熟悉,现学现卖了属于。一篇关于unord......
  • 45 | JAVA_IO_ PrintStream 和 PrintWriter
    PrintStream和PrintWriterPrintStream(写到字节流)PrintStream是一种FilterOutputStream,它在OutputStream的接口上,额外提供了一些写入各种数据类型的方法:写入int:prin......
  • CF1453D Checkpoints(期望)
    Gildongisdevelopingagameconsistingof......
  • 45. SQL--事务(非常详细)
    1.前言在数据库中,我们将一条sql语句称为一次基本的操作。将若干条sql语句“打包”在一起,共同执行一个完整的任务,这就是事务。事务(transaction)由一次或者多次基本操......