Android如何使用SQLlite数据库
先写一个类,继承自SQLiteOpenHelper
public class MyDatabaseHelper extends SQLiteOpenHelper {
//声明一个Context
private Context context;
//原本的重写方法很多用不到的参数 这里直接删除了,第二个参数为数据库的名字(需要用db结尾)
// 调用父类的时候传入1个空值就可以了
//这里的两个参数分别是传入的Content(调用的Activity) version(版本)
public MyDatabaseHelper(@Nullable Context context, int version) {
super(context, "data.db", null, version);
//赋值
this.context=context;
}
//创建数据库的方法
@Override
public void onCreate(SQLiteDatabase db) {
String s = "create table Book(" +
"id integer," +
"name text)";
//执行SQL语句
db.execSQL(s);
Toast.makeText(context, "数据库创建成功", Toast.LENGTH_SHORT).show();
}
//升级数据库的 这里多了两个参数
//这两个参数是版本号,只有新版本号大于旧版本号的时候才能运行这个方法
//升级的时候记得换一个表明,表明不能相同
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String s = "create table User(" +
"id integer," +
"name text)";
//执行SQL语句
db.execSQL(s);
Toast.makeText(context, "数据库升级成功", Toast.LENGTH_SHORT).show();
}
}
主方法的代码
package com.example.myapplication;
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 DataBase extends AppCompatActivity {
//声明按钮
Button btn1, btn2, btn3, btn4, btn5, btn6;
private MyDatabaseHelper dbHelper;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data_base);
//找到控件
btn1 = findViewById(R.id.btn1);
btn2 = findViewById(R.id.btn2);
btn3 = findViewById(R.id.btn3);
btn4 = findViewById(R.id.btn4);
btn5 = findViewById(R.id.btn5);
btn6 = findViewById(R.id.btn6);
//创建数据库
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dbHelper = new MyDatabaseHelper(DataBase.this, 5);
dbHelper.getWritableDatabase();
}
});
//升级数据库
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//修改一下版本
dbHelper = new MyDatabaseHelper(DataBase.this, 6);
dbHelper.getWritableDatabase();
}
});
//添加数据
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
db = dbHelper.getWritableDatabase();
//添加数据需要用到类似于Map的ContentValues
ContentValues values = new ContentValues();
//添加 前面的数据是列名,要与数据库表中的数据保持一致
values.put("id", 1);
values.put("name", "张三");
//插入数据,第一个参数为表名,中间的参数输入一个空值就行,最后一个参数就是刚才存的values
//输入数据会返回一个影响行数
long rows = db.insert("User", null, values);
if (rows > 0) {
Toast.makeText(DataBase.this, "插入成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(DataBase.this, "插入失败", Toast.LENGTH_SHORT).show();
}
}
});
//更新数据
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
db = dbHelper.getWritableDatabase();
//更新数据需要用到类似于Map的ContentValues
ContentValues values = new ContentValues();
//添加 前面的数据是列名,要与数据库表中的数据保持一致
values.put("name", "张三1");
int rows = db.update("User", values, "id=?", new String[]{"1"});
if (rows > 0) {
Toast.makeText(DataBase.this, "数据更新成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(DataBase.this, "数据更新失败", Toast.LENGTH_SHORT).show();
}
}
});
//删除数据
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
db = dbHelper.getWritableDatabase();
int rows = db.delete("User", "id=?", new String[]{"1"});
if (rows > 0) {
Toast.makeText(DataBase.this, "数据删除成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(DataBase.this, "数据删除失败", Toast.LENGTH_SHORT).show();
}
}
});
//查询数据
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//这次是read,以前都是write
db = dbHelper.getReadableDatabase();
//查询表中所有数据,query()方法返回一个Cursor对象
// 第一个参数为表名,第二个参数为列名,如果不写的话则返回全部列,第三个参数为筛选条件,如果第三个筛选条件有?则第四个就是和更新删除的意义一样,凭借这个进行筛选
// 第五个参数是靠什么分组,第六个是分完组靠什么筛选,最后一个是依靠什么排序
Cursor cursor = db.query("User", null, null, null, null, null, null);
//如果索引在第一条就开始执行
if (cursor.moveToFirst()) {
do {
//通过列名找到数据
String id = cursor.getString(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
Log.i("data", "id为" + id + "名字为" + name);
} while (cursor.moveToNext());
}
//使用完需要关闭
cursor.close();
}
});
}
}
最后是XML布局的代码
<?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:orientation="vertical"
android:layout_height="match_parent"
tools:context=".DataBase">
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="创建数据库" />
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="升级数据库" />
<Button
android:id="@+id/btn3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="添加数据" />
<Button
android:id="@+id/btn4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="更新数据" />
<Button
android:id="@+id/btn5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="删除数据" />
<Button
android:id="@+id/btn6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="查询数据" />
</LinearLayout>
最后附上效果图
创建数据库

升级数据库

插入数据

更新数据

删除数据

查询数据
这里画圈的地方是为了做个筛选,更直观的看出查询出的log数据

最后附上一个查看数据库的位置
在右下角的按钮 打开后 在data/data/包名/database/…
包名不知道的话,可以打开你这个项目内任意一个类,最上面就是包名

Android如何使用SQLlite数据库的更多相关文章
- Android之SqlLite数据库使用
每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库—SQLite.SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据 ...
- Android学习---如何创建数据库,SQLite(onCreate,onUpgrade方法)和SQLiteStudio的使用
一.android中使用什么数据库? SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程式庫中.它是D.RichardHipp建立的公有领域项目.SQLite 是一个软件库,实现 ...
- Android 系统API实现数据库的增删改查和SQLite3工具的使用
在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...
- Android版本升级同时Sqlite数据库的升级及之前数据的保留
http://www.cnblogs.com/wang340/archive/2013/05/06/3063135.html http://www.eoeandroid.com/forum.php?m ...
- 【转】Android 使用ORMLite 操作数据库
Android 使用ORMLite 操作数据库 用过ssh,s2sh的肯定不会陌生 ,应该一学就会 第一步: 下载ormlite-android-4.41.jar和ormlite-core-4.4 ...
- QT 读写sqllite数据库
QT 读写sqllite数据库 分类: 技术资料2014-04-10 10:39 84人阅读 评论(0) 收藏 举报 #include <QtGui/QApplication> #incl ...
- Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作
一.前言 在手机中进行网络连接不仅是耗时也是耗电的,而耗电却是致命的.所以我们就需要数据库帮助我们存储离线数据,以便在用户未使用网络的情况下也可以能够使用应用的部分功能,而在需要网络连接的功能上采用提 ...
- 在Cocos2d-x正在使用SQLlite数据库
SQLite,它是一个轻量级的数据库,合规ACID的关系型数据库管理系统,它的设计目标是嵌入式的,并且眼下已经在非常多嵌入式产品中使用了它,它占用资源非常的低.在嵌入式设备中,可能仅仅须要几百K的内存 ...
- Android存储之SQLite数据库
Android存储之SQLite数据库数据库 创建数据库 package --; import android.content.Context; import android.database.sql ...
随机推荐
- ES6,ES7,ES8 常用特性总结
一. ES6(ES2015) 1. 变量 let 和常量 const var 的问题 可以重复声明,没有报错和警告 无法限制修改 没有块级作用域, { } let 和 const 不能重复声明 都是块 ...
- Android平台使用termux,随时随地写代码
生活如此无聊,写点代码打发时间. 趁着假期,我的vivo手机和华为平板(均为4G+64G配置)用的也比较少.于是,思考着如何将这2个设备用来写latex.python.用kingroot却取不了两设备 ...
- 从X86指令深扒JVM的位移操作
概述 之所以会写这个,主要是因为最近做的一个项目碰到了一个移位的问题,因为位移操作溢出导致结果不准确,本来可以点到为止,问题也能很快解决,但是不痛不痒的感觉着实让人不爽,于是深扒了下个中细节,直到看到 ...
- 基于Hdl Coder实现卡尔曼滤波算法
总所周知,FPGA极其不擅长复杂算法的运算,但是如果项目中又涉及一些高级算法的实现,在没有可封装IP核调用的形式下,我们应该如何进行程序开发呢?今夕已经是2020年,我们一味依赖于用verilog写代 ...
- linux DRM/KMS 测试工具 modetest、kmscude、igt-gpu-tools (二)
kmscube kmscube is a little demonstration program for how to drive bare metal graphics without a c ...
- 【python 】文件下载进度条(装逼利器)
基础版 import requests url = "http://mp.111ttt.cn/mp3free/81135985.mp3" rsp = requests.get(ur ...
- 程序员使用IDEA这些插件后,办公效率提升100%(持续更新中)
IDEA一些不错的插件分享 目录 IDEA一些不错的插件分享 插件集合 CamelCase Translation LiveEdit MarkDown Navigator Jrebel CheckSt ...
- 自定义reaml创建使用实现认证
注意清空shiro.ini 创建User对象 package cn.zys.Bean; public class User { private Integer id; private String u ...
- 基本sql语法
SQL 语句主要可以划分为以下 3 个类别. DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象的定义.常用 ...
- DQN(Deep Q-learning)入门教程(二)之最优选择
在上一篇博客:DQN(Deep Q-learning)入门教程(一)之强化学习介绍中有三个很重要的函数: 策略:\(\pi(a|s) = P(A_t=a | S_t=s)\) 状态价值函数:\(v_\ ...