as sqlite

article/2025/8/19 16:07:17
                    <div class="markdown_views"><h1 id="android-studio-sqlite数据库应用一">Android Studio SQLite数据库应用(一)</h1>

版本:Android Studio 1.5.1

  • 创建数据库
  • 升级数据库
  • CRUD数据操作

SQLite (英语发音:/ˌɛskjuːɛlˈlaɪt/[2] or 英语发音:/ˈsiːkwəl.laɪt/[3])是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。https://zh.wikipedia.org/zh-cn/SQLite [ 维基百科 ]

一大早起来,坐在办公室,动都不想动,望一眼窗外,哦耶下雨,心情大好,哈哈。之前很早的时候就想写一写博文的,今天就尝试一下吧,听着外面的雨声,指尖在键盘上跳动,瞬间有种从屌丝程序员转变成了小姑娘们都羡慕的文艺青年的感觉。哈哈,幸好不是什么2B青年。。。不对青年是形容80后的。90后门好像都是。。。。逗逼。。。。是这样的吗,,,

今天主要介绍一下SQLite 在android中的应用。

SQLite是一款轻量级的关系型数据库,它的运行速度很快,占用资源少,通常只需要几百K的内存就足够了,因而现在的主流移动设备都使用SQLite作为复杂数据的存储引擎。对于Android来说,系统内置了丰富的API来提供开发人员操作SQLite,从而轻松的实现数据的操作。

创建数据库

SQLite 数据类型

integer — 整型 real—浮点型 text—文本类型 blob—二进制类型

新建一个类MyDatabaseHelper 继承自SQLiteOpenHelper (Android为我们专门提供的一个帮助类)

public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_BOOK = "create table Book(" +//primary key 将id列设为主键    autoincrement表示id列是自增长的"id integer primary key autoincrement," +"author text," +"price real," +"name text)";private Context mContext;//构造方法:第一个参数Context,第二个参数数据库名,第三个参数cursor允许我们在查询数据的时候返回一个自定义的光标位置,一般传入的都是null,第四个参数表示目前库的版本号(用于对库进行升级)public  MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory , int version){super(context,name ,factory,version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase db) {//调用SQLiteDatabase中的execSQL()执行建表语句。db.execSQL(CREATE_BOOK);//创建成功Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

更改studio 生成的自动布局文件(activity_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:orientation="vertical"tools:context="com.example.scott.sqlitetest.MainActivity"><Button
        android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/create_database"android:text="Create database"/></LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

修改MainActivity中的代码:

public class MainActivity extends AppCompatActivity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);Button createDatabase = (Button) findViewById(R.id.create_database);createDatabase.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {
//创建或打开现有的数据库dbHelper.getWritableDatabase();}});}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

SQLiteOpenHelper中的两个非常重要的实例方法。getReadableDatabase()和getWriteableDatabase(),这两个方法都可以创建和打开一个现有的数据库,区别在于当数据库不可写入的时候getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWriteDatabase()将出现异常

到这里我们的数据库已经创建完成了运行效果如图:
这里写图片描述
如图当我们第一次点击create database的时候会弹出Toast消息,,再次点击的时候就不会出现了说明没有运行oncreate 数据库已经创建完成了。
那怎么才能找到这个文件呢???
我电脑是windows 10 需要先配置环境变量
如图我们只要在系统变量中选择path单击编辑 然后选择新建,目录为你android SDK 中platform-tools 平台工具的文件夹 配置好后我们就可以使用文件夹中的adb工具和sqlite3 工具了
这里写图片描述
使用adb 工具
这里写图片描述
首先输入adb shell 进入到设备控制台。
然后使用cd 命令进行到/data/data/com.example.scott.sqlitetest/databases/目录下用 ls 命令查看该目录里的文件; 然后借助sqlite命令打开数据库,使用.table 查看数据库中有哪些表,(android_metadata 是每个数据库都会自动生成的),使用.schema 查看建表语句。最后输入 .exit.quit 退出。

升级数据库

数据库升级其实很简单,我们只要更改SQLiteOpenHelper中构造方法的第四个参数,即当前数据的版本号,只要比之前传入的数值大就可以了。
现在我想在之前的数据库中加上一列为Category 来记录书籍的分类。
继续在MyDatabaseHelper 类中添加一条建表语句:

......public static final String CREATE_CATEGORY = "create table Category (" +"id integer primary key autoincrement," +"category_name text," +"category_code integer)";......public void onCreate(SQLiteDatabase db) {//调用SQLiteDatabase中的execSQL()执行建表语句。db.execSQL(CREATE_BOOK);db.execSQL(CREATE_CATEGORY);Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();}......public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//如果Book、Category表已存在则删除表db.execSQL("drop table if exists Book");db.execSQL("drop table if exists Category");onCreate(db);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

设置好MyDatabaseHelper类之后,我们就可以在MainActivity中将版本号改为2 即( dbHelper = new MyDatabaseHelper(this , “BookStore.db” , null , 2 );),就可以对数据库进行升级了。

与上一节一样查看数据库是否创建正确。如图
这里写图片描述
我们可以看到数据库是实现了升级;
注意图中红色标记区域是因为我电脑上开了虚拟机,然后手机又是调试状态。一般情况下我都是使用真机调试


到这里我们的数据库建完了,还没有向表中添加数据。但是我们仔细看上面的数据库的的升级的时候可能发现一个问题,在升级的时候会将之前的表删除掉,那么之前表中保存的数据也会一并删除掉,造成以前程序存储在本地的数据全部丢失。那么怎样才能在升级数据库的时候不删除之前的表呢,我会在下一篇博文(Android Studio SQLite数据库应用(二))中写 SQLite事务处理的时候一并写一下。数据库升级的最佳写法

CRUD数据操作

CRUD—C (create) R(retrieve ) U(update) D(delete)

添加数据

先看代码:
在布局文件中加一个按键:

  <Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/add_data"android:text="Add Data"/>
  • 1
  • 2
  • 3
  • 4
  • 5

修改MainActivity 如下:

public class MainActivity extends AppCompatActivity {private MyDatabaseHelper dbHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);Button createDatabase = (Button) findViewById(R.id.create_database);createDatabase.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dbHelper.getWritableDatabase();}});Button addData = (Button) findViewById(R.id.add_data);addData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {
//getWritableDatabase()会返回一个SQLiteDatabase对象SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("name","The Da Vinci Code");values.put("price",20);values.put("pages",600);values.put("author","Scott");//insert()方法中第一个参数是表名,第二个参数是表示给表中未指定数据的自动赋值为NULL。第三个参数是一个ContentValues对象db.insert("Book",null,values);values.clear();values.put("name","The Lost Symbol");values.put("author","Scott");values.put("pages",500);values.put("price",30);db.insert("Book",null,values);}});}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

在上面的代码中只对Book表中的四列数据进行了组装,id那一列并没有给它赋值,因为在之前将id列设置为自增长了。
接下来我们来看看表中是不是真的有数据。
这里写图片描述

输入 select * from Book;查询表中的内容,在我没有按 Add Create 的时候 显示为空,按了之后,表中有了数据。

更新数据

SQLitedatabase 提供了update()用于数据的更新。

在activity_main.xml 增加一个按键,这里就不写了。在MainActivity中怎么按键监听 ,用于数据更新。

 Button updateData = (Button) findViewById(R.id.update_data);updateData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("price",19.99);//仔细update中提示的参数(String table,ContentValues,String whereClause,String[] whereArgs)//第三滴四行指定具体更新那几行。注意第三个参数中的?是一个占位符,通过第四个参数为第三个参数中占位符指定相应的内容。db.update("Book",values,"name=?",new String[]{"The Da Vinci Code"});}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这里写图片描述

OK 更新成功。

删除数据

删除数据很简单,SQLiteDatabase 提供了delete() 方法用于删除数据。这里就不写代码了具体讲一下什么意思
delete(String table, String whereClause, String [] whereArgs)

举个例子 delete(“Book”,”name=?”,new String[] {“The Da Vinci Code”});
就是把名字为The Da Vinci Code 这本书的数据都删除。
再比如:delete(“Book”,”price > ?”,new String[] {“20”});
意思就是把价格大于20 的所有的书都删掉。
哈哈还是很好玩的,想删什么删什么,但是要注意了 如果你第二,第三个参数不指定的话,就会删除所有行。

查询数据

对于SQLite的查询功能这边我只简单介绍一下,因为前面的“增删减”只是SQLite 功能的一小部分。我想后面单独详细介绍一下SQLite的查询功能。

同样,SQLiteDatabase 中提供了 query()方法用于对数据进行查询。
方法中的参数:
query(String table , String [] columns , String selection , String [] selectionArgs , String groupBy , String having , String orderBy );
table —指定查询的表名
columns —指定查询的列名
selection —指定where的约束条件
selectionArgs — 为where中的占位符提供具体的值
groupBy — 指定需要 groupBy 的列
having — 对groupBy后的结果进一步约束
orderBy — 指定查询结果的排序方式

Button queryButton = (Button) findViewById(R.id.query_data);queryButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = dbHelper.getWritableDatabase();//指明去查询Book表。Cursor cursor = db.query("Book",null,null,null,null,null,null);//调用moveToFirst()将数据指针移动到第一行的位置。if (cursor.moveToFirst()){do {//然后通过Cursor的getColumnIndex()获取某一列中所对应的位置的索引String name = cursor.getString(cursor.getColumnIndex("name"));String author = cursor.getString(cursor.getColumnIndex("author"));int pages = cursor.getInt(cursor.getColumnIndex("pages"));double price = cursor.getDouble(cursor.getColumnIndex("price"));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());}cursor.close();}});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

结果如图:
这里写图片描述

好了到这里就结束了,下一篇 写数据库的事务处理,还有那什么 数据库升级的最佳方式。。。

关注微信公众号,每天都有优质技术文章,搞笑GIF图片推送哦。
这里写图片描述
2016-7-15

Scott

中午,一帮小孩子跑过来抱着你,走都走不了,想发火来着,可是看着他们我只能笑笑,都严肃不起来,最后嘛,,,找个小胖纸下手,说了一通,然后他们都回教室,让那小胖纸在那站一会儿。等我一走,,他又开开心心的回教室了,哈哈///


http://chatgpt.dhexx.cn/article/AVmkQCjY.shtml

相关文章

Oracle里的数据导入到sqlite,OracleToSqlite

OracleToSqlite是一款十分不错的数据导入导出软件&#xff0c;它可以帮助用户们将表格里的数据导入到数据库里&#xff0c;也可以将数据库里的数据导入到sqlite里&#xff0c;十分自由&#xff0c;所以快来下载体验吧&#xff01; 软件介绍 OracleToSqlite是一款可以将oracle数…

SQL MASTERY what is SQL

SQL MASTERY what is SQL 1.what is SQL 数据库是一个可以轻易获取形式来存储的数据的集合 原理&#xff1a;数据库可以通过数据库管理系统或者DBMS来管理数据库&#xff0c;我们连接到一个DBMS来下达查询修改的指令&#xff0c;DBMS就会执行我们的指令&#xff0c;并返回结果 …

使用SQL语句管理数据库

使用SQL管理数据库 SQL是结构化查询语言&#xff0c;专门用来访问和处理数据库的编程语言。能够让我们以编程的形式&#xff0c;操作数据库里面的数据 三个关键点&#xff1a; ①SQL是一门数据库编程语言 ②使用SQL语言编写出来的代码&#xff0c;叫做SQL语句 ③SQL语言只能在…

数据库工具操作SQLiteStudio(1)——数据库表插入列插入行

数据库表插入行: 数据库表打开"Data"栏目&#xff0c;点击上方""按钮即可 数据库表插入列: 数据库表打开“Structure”栏目&#xff0c;点击上方&#xff08;Add column&#xff09;按钮

SQLiteStudio

免费和开源 它对每个人&#xff0c;出于任何目的&#xff08;包括商业目的&#xff09;都是免费的。这是安全的&#xff0c;因为任何人都可以查看源代码。 高级SQL代码编辑器 “ SQL编辑器”窗口可帮助用户使用SQL语法提示和突出显示&#xff0c;提供漂亮的代码格式化程序&…

SQL语句 数据库

1.show databases; 查询所有数据库 2.CREATE DATABASE 数据库名称&#xff0c; 创建数据库 这种方式可能重名&#xff0c; CREATE DATABASE IF NOT EXISTS 数据库名称 3.DROP DATABASE 数据库名称&#xff1b; 直接删除&#xff0c;安全的。 更安全的的写法 DROP DATABASE I…

数据库可视化工具——SQL Studio

SQL Studio简介 SQL Studio是一款可创建多个连接的Web版数据库管理开发工具&#xff0c;让你从单一应用程序可同时连接Oracle、PostgreSQL、MySQL、SQLite、SQL Server、Oracle、DM&#xff08;达梦&#xff09;、KingBase&#xff08;人大金仓&#xff09;、MongoDB、Hadoop等…

【数据库】SQL语句

第三章 SQL SQL(structured Query Language) SQL概述 SQL特点 综合统一。高度非过程化。面向集合的操作方式。以同一种语法结构提供多种使用方式。语言简洁易学易用。 主要版本 SQL-89SQL-92 ,SQL2SQL-99 ,SQL3 数据库结构 SQL语言是集DDL、DML和DCL于一体的数据库语言…

java awt 显示图片_Java开发笔记(一百二十三)AWT图像视图

前面介绍了AWT的几种基础控件,从按钮到文本标签,从输入框到选择框,无一例外都能显示文字,唯独无法显示某张图片文件。本以为AWT会提供专门的控件来显示图片,然而偏偏没有意料之中的图像控件,这可真是弱爆了,居然不能显示姹紫嫣红的图片,让程序员情何以堪呀。不过咱程序…

[AWT] 常用组件

目录 基本组件 牛刀小试 大家好我是Nick,这篇笔记给大家带来的是AWT中常用的一些组件&#xff0c;来跟着我一起看看把~ AWT基本组件 API Button&#xff1a;按钮&#xff0c;可接受单击操作。Canvas&#xff1a;用于绘图的画布。Checkbox&#xff1a;复选框组件&#xff08;…

Java事件处理 java.awt.event

事件&#xff1a;程序对某些操作的响应 例子&#xff1a;点击按钮&#xff0c;打印“Hello” Step1&#xff1a;事件响应类必须能够听到相应的命令 点击按钮如果要响应&#xff0c;必须让响应类实现java.awt.event.ActionListener 接口 Step2&#xff1a;将事件响应的代码&am…

import java.awt 无法_java awt教程import java.awt.*

java awt教程import java.awt.* java.awt.* 这里的java是包名,包对应的就是你磁盘当中的目录,你可以看成文件夹,awt是这个包当中的子包, 连起来也就是这个java包当中的awt子包.中间用"."来连接. "import"是导入包中的类的意思 ,java程序当中,除了java.lo…

Java基础_15 | Java中的图形用户界面包AWT使用详解

1. Java中的AWT包 在Java中&#xff0c; AWT&#xff08;Abstract Window Toolkit&#xff09;是用来处理图形最基本的方式&#xff0c;它可以用来创建Java的图形用户界面程序&#xff0c; AWT包提供&#xff1a; 图形界面组件&#xff1a;如&#xff1a;窗口、按钮、菜单等…

Java AWT布局

java.awt库提供5种基本布局。 每种布局都有其自身的意义,并且它们是完全不同的。 在本文的此处,我们将讨论如何将任何布局应用于框架或面板,并简要讨论每种布局。 java.awt库中可用的5种布局是: 边框布局 网格布局 GridBag布局 卡布局 流程布局 1.边框布局 BorderLayout…

swing java awt_java中AWT和SWing的区别与联系

AWT和Swing都是java中的包。 AWT(Abstract Window Toolkit)&#xff1a;抽象窗口工具包&#xff0c;早期编写图形界面应用程序的包。 Swing &#xff1a;为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。 AWT和Swing的实现原理不同&#xff1a; AWT的图…

java awt 教程,Java AWT教程

Java AWT教程 Java AWT(抽象窗口工具包)是一种API&#xff0c;用于使用Java开发GUI或基于窗口的应用程序。 Java AWT组件是平台相关的&#xff0c;即&#xff0c;组件是根据操作系统视图显示的。 AWT是重量级的&#xff0c;即其组件正在使用OS的资源。 java.awt包为AWT api提供…

swing java awt_Java awt和Swing的区别

Java awt是Java中早期用于编写图形图形应用程序的开发包&#xff0c;Swing是在awt的基础上构建的一套新的图形图像界面系统。简单来说&#xff0c;Swing是awt的扩展以及改良。那么我们来说一下关于Java中awt和swing的关系以及区别。 AWT awt是Abstract Window ToolKit (抽象窗口…

java awt 教程,Java AWT教程介绍

本文概述 Java AWT(抽象窗口工具包)是一种API, 用于使用Java开发GUI或基于窗口的应用程序。 Java AWT组件是依赖于平台的, 即, 根据操作系统的视图显示组件。 AWT是重量级的, 即其组件正在使用OS的资源。 java.awt包为AWT api提供了一些类, 例如TextField, Label, TextArea, Ra…

java awt类_JAVA中AWT编程

JAVA使用AWT和Swing 类完成图形用户界面编程&#xff0c;AWT全称是抽象窗口工具集(Abstract Window Toolkit),它是最早的sun提供的GUI库(Graphics User Interface)图形用户界面。 AWT是窗口框架&#xff0c;它从不同平台的窗口系统中抽取共同组件&#xff0c;当使用AWT编写图形…

AWT介绍

推荐阅读&#xff1a;Java图形界面详解(AWT、Swing) 专栏 文章目录 概述AWT继承体系 概述 Java使用AWT和Swing相关的类可以完成图形化界面编程&#xff0c;其中AWT的全称是抽象窗口工具集(Abstract Window Toolkit),它是sun公司最早提供的GUI库&#xff0c;这个GUI库提供了一些…