Android学习总结(十八) ———— SQLite数据库使用
一、基本概念
数据库最经典的四个操作 添加、删除、修改、查找,在处理大量数据的时候使用数据库可以帮我们迅速定位当前须要处理的数据,举个例子 好比现在要实现一个搜索功能 用数据库的话只须要其中一个搜索条件 一个数据库语句就可以迅速的在N条数据中找到我们需要的数据,如果不使用数据库那么查找起来会非常麻烦,效率大打折扣,所以在处理大量数据的时候使用数据库是明确的选择,在Android的开发中使用的数据库是SQLite ,它是一个轻量级的数据库、非常小、移植性好、效率高、可靠,嵌入式设备因为受到硬件条件的限制所以非常适合使用SQLite 数据库。
二、创建与删除数据库
封装一个类去继承SQLiteOpenHelper 在构造函数中传入数据库名称与数据库版本号,数据库被创建的时候会调用onCreate(SQLiteDatabase db) 方法,数据库版本号发生改变的时候会调用onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法,可以方便的对软件游戏升级后做出相应处理避免覆盖安装数据库发生改变产生的错误。调用SQLiteOpenHelper 的getReadableDatabase()方法去创建数据库,如果数据库不存在则创建 并且返回SQLiteDatabase对象,如果数据库存在则不创建只返回SQLiteDatabase对象。调用deleteDatabase(DATABASE_NAME)方法 传入数据库名称则可删除数据库。
三、示例代码
封装了一个DatabaseHelper类继承SQLiteOpenHelper 我使用了设计模式中的单例模式来处理这个类,这里说一下单例模式 单例模式是常见的代码设计模式之一 它的好处是在于避免在内存中频繁的实例化所以将它的对象写成static 静态 这样它的对象就只有一份存在静态内存区使用的时候只须要通过getInstance()就可以直接拿到这个静态对象。代码如下所示:
package com.nyl.sql; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; /**
* 建表
*/ public class DatabaseHelper extends SQLiteOpenHelper{ private static DatabaseHelper databaseHelper = null; //数据库名称
public static final String DATABASE_NAME = "nyl.db"; //数据库版本号
private static final int DATABASE_VERSION = 1; //数据库SQL语句,添加一个表
private static final String NAME_TABLE_CREATE = "create table test("
+"id integer primary key autoincrement,"
+"name text,"
+"hp integer default 100,"
+"mp integer default 100,"
+"number integer)"; public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION); } //单例模式
static synchronized DatabaseHelper getInstance(Context context){
if (databaseHelper == null){
databaseHelper = new DatabaseHelper(context);
}
return databaseHelper;
} @Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//向数据中添加表
sqLiteDatabase.execSQL(NAME_TABLE_CREATE);
} //可以拿到当前数据库的版本信息,与之前数据库的版本信息,用于更新数据库
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
} /**
* 删除数据库
* @param context
* @return
*/
public boolean deleteDatabase(Context context) {
return context.deleteDatabase(DATABASE_NAME);
}
}
3.1 创建与删除数据库
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/new_sqlite"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <Button
android:id="@+id/btnCreateDateBase"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建数据库"/> <Button
android:id="@+id/btnDeleteDateBase"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除数据库"/> </LinearLayout>
在这个类中使用DatabaseHelper对象 实现创建与删除数据库,代码如下所示:
package com.nyl.sql; import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; /**
* 创建与删除数据库
*/
public class NewSQLite extends Activity implements View.OnClickListener { private Button btnCreateDateBase;
private Button btnDeleteDateBase; DatabaseHelper databaseHelper = null;
SQLiteDatabase db = null;
Context context = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_sqlite);
context = this;
initView(); //初始化布局控件
} private void initView() {
btnCreateDateBase = (Button) findViewById(R.id.btnCreateDateBase);
btnDeleteDateBase = (Button) findViewById(R.id.btnDeleteDateBase); btnCreateDateBase.setOnClickListener(this);
btnDeleteDateBase.setOnClickListener(this);
} @Override
public void onClick(View view) {
if (view.getId() == R.id.btnCreateDateBase){
//创建DatabaseHelper对象
databaseHelper = DatabaseHelper.getInstance(context);
//调用getReadableDatabase方法,如果数据库不存在则创建,如果存在则打开
db = databaseHelper.getReadableDatabase();
Toast.makeText(NewSQLite.this,"成功创建数据库",Toast.LENGTH_SHORT).show();
} if (view.getId() == R.id.btnDeleteDateBase){
//创建DatabaseHelper对象
databaseHelper = DatabaseHelper.getInstance(context);
//调用getReadableDatabase方法,如果数据库不存在则创建,如果存在则打开
db = databaseHelper.getReadableDatabase();
//关闭数据库
databaseHelper.close();
//删除数据库
databaseHelper.deleteDatabase(context);
Toast.makeText(NewSQLite.this,"成功删除数据库",Toast.LENGTH_SHORT).show();
}
}
}
点击创建数据库按钮时,运行效果如下图:

点击删除数据库按钮时,运行效果如下所示:

3.2 创建与删除数据库中的表
布局代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/new_table"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <Button
android:id="@+id/btnCreateTable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="在数据库中添加一个表"/> <Button
android:id="@+id/btnDeleteTable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="在数据库中删除一个表"/> </LinearLayout>
数据库是可以由多张数据表组成的 如果添加一张数据库的表的话 可以使用 数据库语句 create table 名称(内容) 来进行添加 。这里给出一条创建数据库的语句 。意思是创建一张表 名称为gameInfo 表中包含的字段 为id 为integer类型 并且递增 name 为Text类型 hp,mp为integer默认数值为100 number 为INTEGER 类型。代码如下所示:
package com.nyl.sql; import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; /**
* 创建与删除数据库中的表
*/
public class NewTable extends Activity implements View.OnClickListener { private Button btnCreateTable;
private Button btnDeleteTable; DatabaseHelper dbHelper = null;
SQLiteDatabase db = null;
Context context = null; //创建一张表的SQL语句
private static final String NAME_TABLE_CREATE = "create table gameInfo("
+"id integer primary key autoincrement,"
+"name text,"
+"hp integer default 100,"
+"mp integer default 100,"
+"number integer)"; //删除一张表的SQL语句
private static final String NAME_TABLE_DELETE = "drop table gameInfo"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_table);
context = this; //创建DatabaseHelper对象
dbHelper = DatabaseHelper.getInstance(context);
//调用getReadableDatabase方法,如果数据不存在则创建,如果存在则打开
db = dbHelper.getReadableDatabase(); initView(); //初始化布局控件 } private void initView() {
btnCreateTable = (Button) findViewById(R.id.btnCreateTable);
btnDeleteTable = (Button) findViewById(R.id.btnDeleteTable); btnCreateTable.setOnClickListener(this);
btnDeleteTable.setOnClickListener(this);
} @Override
public void onClick(View view) {
if (view.getId() == R.id.btnCreateTable){
db.execSQL(NAME_TABLE_CREATE);
Toast.makeText(NewTable.this,"成功添加数据表",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(NewTable.this,"数据库中已存此表",Toast.LENGTH_SHORT).show();
} if (view.getId() == R.id.btnDeleteTable){
db.execSQL(NAME_TABLE_DELETE);
Toast.makeText(NewTable.this,"成功删除数据表",Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(NewTable.this,"数据库中已无此表",Toast.LENGTH_SHORT).show();
}
}
}
点击在数据库中添加一个表按钮时,运行效果如下所示:

当点击在数据库中删除一个表按钮时,运行效果如下:

3.3 增删改查数据库表中的数据
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/new_date"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <Button
android:id="@+id/btnAdd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="在表中添加一条数据"/> <Button
android:id="@+id/btnDelete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="在表中删除一条数据"/> <Button
android:id="@+id/btnModify"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="在表中修改一条数据"/> <Button
android:id="@+id/btnFind"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="在表中查找一条数据"/> </LinearLayout>
使用SQLiteDatabase对象调用 insert()方法 传入标的名称与ContentValues 添加的内容 则可以向数据库表中写入一条数据 delete ()为删除一条数据 update()为更新一条数据。代码如下所示:
package com.nyl.sql; import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; /**
* 增删改查
*/
public class NewDate extends Activity implements View.OnClickListener { private Button btnAdd;
private Button btnDelete;
private Button btnModify;
private Button btnFind; DatabaseHelper databaseHelper = null;
SQLiteDatabase db = null;
Context context = null; //数据库字段
public final static String TABLE_NAME = "test";
public final static String ID = "id";
public final static String NAME = "name";
public final static String HP = "hp";
public final static String MP = "mp"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_date);
context = this;
//创建DatabaseHelper对象
databaseHelper = DatabaseHelper.getInstance(context);
//调用getReadableDatabase方法,如数据库不存在则创建,如果存在则打开
db = databaseHelper.getReadableDatabase();
initView();//初始化布局控件 //给数据库表写入一些信息
for (int i = 0; i<10; i++){
insert(NAME,"农美眉" + i);
}
} private void initView() {
btnAdd = (Button) findViewById(R.id.btnAdd);
btnDelete = (Button) findViewById(R.id.btnDelete);
btnModify = (Button) findViewById(R.id.btnModify);
btnFind = (Button) findViewById(R.id.btnFind); btnAdd.setOnClickListener(this);
btnDelete.setOnClickListener(this);
btnModify.setOnClickListener(this);
btnFind.setOnClickListener(this); } @Override
public void onClick(View view) {
//添加
if (view.getId() == R.id.btnAdd){
insert(NAME,"衣服");
Toast.makeText(NewDate.this,"添加一条数据名称为衣服",Toast.LENGTH_SHORT).show();
}
//删除
if (view.getId() == R.id.btnDelete){
delete(ID,"1");
Toast.makeText(NewDate.this,"删除一条id=1的数据",Toast.LENGTH_SHORT).show();
}
//修改
if (view.getId() == R.id.btnModify){
update(NAME,"连衣裙","漂亮");
Toast.makeText(NewDate.this,"更新名称连衣裙为漂亮",Toast.LENGTH_SHORT).show();
}
//查找
if (view.getId() == R.id.btnFind){
Cursor cursor = find(ID,"3");
String name = cursor.getString(cursor.getColumnIndex(NAME));
Toast.makeText(NewDate.this,"查找ID为3数据的名称是" + name,Toast.LENGTH_SHORT).show();
}
} //插入一条数据
public void insert(String name, String s) {
ContentValues values = new ContentValues();
values.put(name,s);
db.insert(TABLE_NAME,null,values);
} //删除一条数据
public void delete(String id, String s) {
db.delete(TABLE_NAME,id + "=?",new String[]{s});
} //更新一条数据
public void update(String key, String oldDate,String newDate) {
ContentValues values = new ContentValues();
values.put(key,newDate);
db.update(TABLE_NAME,values,key+"=?",new String[]{oldDate});
} //查找一条数据
public Cursor find(String id, String s) {
Cursor cursor = db.query(TABLE_NAME,null,id+"=?",new String[]{s},null,null,null);
if (cursor != null){
cursor.moveToFirst();
}
return cursor;
}
}
点击在表中添加一条数据按钮时,运行效果如下所示:

点击在表中删除一条数据按钮时,运行效果如下所示:

点击在表中修改一条数据按钮时,运行效果如下:

点击在表中查找一条数据按钮时,运行效果如下:

SQLite数据库使用我们就学到这里了,有什么不足的地方欢迎园友们提出宝贵意见,晚安!
Android学习总结(十八) ———— SQLite数据库使用的更多相关文章
- Android学习(十) SQLite 基于SQLiteOpenHelper的操作方式
main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- Android学习(十) SQLite 基于SQL语句的操作方式
main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- Android学习(十) SQLite 基于内置函数的操作方式
main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- android 学习随笔十八(广播与服务 )
1.广播接收者注册 清单文件注册(Android四大组件都要在清单文件中注册) 一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除 广播接收者可以使用代码注册 需要广播接收者运行时, ...
- Android学习(十八)Toast的使用
一.什么是Toast 1.Toast是一种提供给用户简洁提示信息的视图. 2.该视图以浮于应用程序之上的形式呈现给用户, Toast提示界面不获取焦点,在不影响用户使用的情况下,给用户某些提示. 3. ...
- Python学习(十八)—— 数据库(三)
转载自http://www.cnblogs.com/linhaifeng/articles/7356064.html 一.数据操作 1.插入数据INSERT 1. 插入完整数据(顺序插入) 语法一: ...
- 十一、Android学习第十天——项目开始(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一 ...
- Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)
前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...
- Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)
LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ...
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
随机推荐
- bzoj4833
$数论$ $这个题已经忘了怎么做了,也不想知道了,只记得看了3个小时$ $对于有gcd(f_i, f_j) = f_{gcd(i, j)}性质的数列,以下结论适用$ #include<bits/ ...
- bzoj4004
线性基 构成线性基的个数是定的,所以我们对价值进行贪心就行了,根据拟阵那套理论,我们排个序,然后能塞进去就塞,这样就求出最小值了. 思维江化,只要是多维向量都能用线性基搞. #include<b ...
- 开源跨平台声波传输库:Sonic
简介 [Sonic](https://github.com/linyehui/sonic) 是一个跨平台的声波传输库(iOS & Android),技术上类似于[chirp](http://c ...
- jQuery.validator.addMethod方法的使用
该方法有三个api接口参数,name,method,messages addMethod(name,method,message)方法 参数 name 是添加的方法的名字. 参数 method 是一个 ...
- Eigen中的noalias(): 解决矩阵运算的混淆问题
作者:@houkai本文为作者原创,转载请注明出处:http://www.cnblogs.com/houkai/p/6349990.html 目录 混淆例子解决混淆问题混淆和component级的操作 ...
- ElasticSearch入门及核心概念介绍
Elasticsearch研究有一段时间了,现特将Elasticsearch相关核心知识和原理以初学者的角度记录下来,如有不当,烦请指正! 0. 带着问题上路——ES是如何产生的? (1)思考:大 ...
- ubuntu16.04安装php5
系统源自带是7.0的, 如果要安装安装5.5+或者有5.5+的源可以执行这些命令 sudo apt-get install python-software-propertiessudo apt-get ...
- CodeForces 349B Color the Fence (DP)
题意:给出1~9数字对应的费用以及一定的费用,让你输出所选的数字所能组合出的最大的数值. 析:DP,和01背包差不多的,dp[i] 表示费用最大为 i 时,最多多少位,然后再用两个数组,一个记录路径, ...
- POJ - 3126 Prime Path 素数筛选+BFS
Prime Path The ministers of the cabinet were quite upset by the message from the Chief of Security s ...
- mysql order by是怎么工作的?
假设我们要查询一个市民表中城市=杭州的所有人的名字,并且按照名字排序 CREATE TABLE `t` ( `id` ) NOT NULL, `city` ) NOT NULL, `name` ) N ...