热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android数据库SQlite详解

Android中为了我们方便地管理数据库,提供了一个SQLiteOpenHelper帮助类,借助这个类就可以创建数据库。下面我们就介绍一下该类如何使用。首先创建一个工程sqli

Android 中为了我们方便地管理数据库,提供了一个 SQLiteOpenHelper 帮
助类,借助这个类就可以创建数据库。

下面我们就介绍一下该类如何使用。
首先创建一个工程sqlitetest,创建一个类MySQLiteOpenHelper去继承SQLiteOpenHelper,然后重写该类的构造函数和方法。如下:
public class MySQLiteOpenHelper extends SQLiteOpenHelper {

public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory,version);
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table blacknumber(_id integer primary key autoincrement, number varchar(20))";
db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}
构造函数中有四个参数:
context:这个不用多说,上下文对象。
name: 数据库的名字。
factory:一般传null,基本用不到。
version: 版本号。
onCreate()方法中是创建表的代码。
onUpgrade()方法升级的时候才会调用。
MainActivity中代码如下:

<RelativeLayout 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"
>

<Button
android:id="@+id/btn_create"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建数据库"/>

RelativeLayout>
package com.example.sqlitetest;

import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

private Button btn_create;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_create = (Button) this.findViewById(R.id.btn_create);
btn_create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MySQLiteOpenHelper mySQLiteOpenHelper = new MySQLiteOpenHelper(getApplicationContext(),"blacknumber.db",null,1);
SQLiteDatabase db = mySQLiteOpenHelper.getReadableDatabase();
Toast.makeText(MainActivity.this,"数据库创建成功......",Toast.LENGTH_LONG).show();
}
});
}
}
在MainActivity中创建了SQLiteOpenHelper的实例,然后调用它的getWritableDatabase()方法就创建数据库了,
数据库文件会存放在/data/data//databases/目录下。
运行程序,先不点击创建数据库的按钮,打开DDMS,点击File Explorer,
找到/data/data/目录,如图,是没有数据库文件存在的。

数据库

然后点击 创建数据库按钮,然后发现效果如图,名叫balcknumber.db的数据库已经被创建出来了:

数据库

我们把这个文件导出到电脑桌面上,使用一款图形化界面工具来打开它,当然,该工具我已经共享了,有需要的可以去下载。

工具链接
这里写图片描述

打开后界面如下图,当然data中是没有任何数据的,因为我们只是创建了表,并没有添加数据到数据库。

这里写图片描述

现在数据库已经创建好了,我们使用数据库的作用主要就是对其进行增删改查操作,那么我们下面就简单的示范一下。修改MainActivity布局如下。

<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"
>

<Button
android:id="@+id/btn_create"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建数据库"/>

<Button
android:id="@+id/btn_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加"/>

<Button
android:id="@+id/btn_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除"/>

<Button
android:id="@+id/btn_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改"/>

<Button
android:id="@+id/btn_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询"/>

LinearLayout>
MainActivity中代码如下,四个按钮分别对应的增删改查的操作。
package com.example.sqlitetest;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private Button btn_create;
private MySQLiteOpenHelper mySQLiteOpenHelper;
private SQLiteDatabase db;
private Button btn_add;
private Button btn_delete;
private Button btn_update;
private Button btn_query;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_create = (Button) this.findViewById(R.id.btn_create);
btn_create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mySQLiteOpenHelper = new MySQLiteOpenHelper(getApplicationContext(),"blacknumber.db",null,1);
db = mySQLiteOpenHelper.getReadableDatabase();
Toast.makeText(MainActivity.this,"数据库创建成功......",Toast.LENGTH_LONG).show();
}
});
btn_add = (Button) this.findViewById(R.id.btn_add);
btn_delete = (Button) this.findViewById(R.id.btn_delete);
btn_update = (Button) this.findViewById(R.id.btn_update);
btn_query = (Button) this.findViewById(R.id.btn_query);

btn_add.setOnClickListener(this);
btn_delete.setOnClickListener(this);
btn_update.setOnClickListener(this);
btn_query.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_add:
db = mySQLiteOpenHelper.getReadableDatabase();
ContentValues values = new ContentValues();
values.put("number", "188119");
long insert = db.insert("blacknumber", null, values);
db.close();
if(insert != -1){
Toast.makeText(MainActivity.this,"添加数据成功",Toast.LENGTH_LONG).show();
}
break;
case R.id.btn_delete:
db = mySQLiteOpenHelper.getReadableDatabase();
int delete = db.delete("blacknumber", "number=?",
new String[] { "188119" });
db.close();
if(delete !=0){
Toast.makeText(MainActivity.this,"删除数据成功",Toast.LENGTH_LONG).show();
}
break;
case R.id.btn_update:
db = mySQLiteOpenHelper.getReadableDatabase();
ContentValues values2 = new ContentValues();
values2.put("number", "110");
int update = db.update("blacknumber", values2, "number=?",
new String[] { "188119" });
if(update !=0){
Toast.makeText(MainActivity.this,"修改数据成功",Toast.LENGTH_LONG).show();
}
break;
case R.id.btn_query:
db = mySQLiteOpenHelper.getReadableDatabase();
//查询110是否在数据库中
Cursor cursor = db.query("blacknumber", new String[] { "number"},
"number=?", new String[] { "110" }, null, null, null);
boolean exsit = false;
if (cursor != null) {
if (cursor.moveToNext()) {
//查到记录
exsit = true;
}
cursor.close();
}
db.close();
if (exsit){
Toast.makeText(MainActivity.this,"存在该数据",Toast.LENGTH_LONG).show();
}
break;
}
}
}
运行程序到模拟器上,如图。

效果

数据库刚才我们已经创建好了,那么我们就可以直接对数据库进行操作了。点击添加,就把  188119 这个号码添加到了数据库中,
同样的操作把blacknumber.db导出到桌面上使用工具打开,如图:

数据

然后点击删除按钮,重新导出blacknumber.db到桌面,发现数据库中已经没有数据了。

这里写图片描述

由于下面要对数据进行修改,所以需要添加数据,点击添加,然后点击修改按钮,导出数据发现数据库中number变成了110,如图。

这里写图片描述

然后我们查询110是否在数据库内,点击查询,发现存在。效果如下:

这里写图片描述

以上就是数据库的使用。如有错误请指出,谢谢!

推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
author-avatar
手机用户2602913827
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有