一、基本概念

  数据库最经典的四个操作 添加、删除、修改、查找,在处理大量数据的时候使用数据库可以帮我们迅速定位当前须要处理的数据,举个例子 好比现在要实现一个搜索功能 用数据库的话只须要其中一个搜索条件 一个数据库语句就可以迅速的在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数据库使用的更多相关文章

  1. Android学习(十) SQLite 基于SQLiteOpenHelper的操作方式

    main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  2. Android学习(十) SQLite 基于SQL语句的操作方式

    main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  3. Android学习(十) SQLite 基于内置函数的操作方式

    main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  4. android 学习随笔十八(广播与服务 )

    1.广播接收者注册 清单文件注册(Android四大组件都要在清单文件中注册) 一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除 广播接收者可以使用代码注册 需要广播接收者运行时, ...

  5. Android学习(十八)Toast的使用

    一.什么是Toast 1.Toast是一种提供给用户简洁提示信息的视图. 2.该视图以浮于应用程序之上的形式呈现给用户, Toast提示界面不获取焦点,在不影响用户使用的情况下,给用户某些提示. 3. ...

  6. Python学习(十八)—— 数据库(三)

    转载自http://www.cnblogs.com/linhaifeng/articles/7356064.html 一.数据操作 1.插入数据INSERT 1. 插入完整数据(顺序插入) 语法一: ...

  7. 十一、Android学习第十天——项目开始(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 十一.Android学习第十天——项目开始 Android知识点的学习告一 ...

  8. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...

  9. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)

    LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ...

  10. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

随机推荐

  1. JQuery扩展插件Validate—5添加自定义验证方法

    从前面的示例中不难看出validate中自带的验证方法足以满足一般的要求,对于特别的要求可以使用addMethod(name,method,message)添加自定义的验证规则,下面的示例中添加了一个 ...

  2. Java编程环境eclipse配置

    一. 下载并安装JDK https://www.cnblogs.com/zhangchao0515/p/6806408.html 二.下载并解压Eclipse https://www.cnblogs. ...

  3. Eigen::Map

    http://cherishlc.iteye.com/blog/2116800 Map类 是 矩阵库Eigen中用来将内存数据 映射为 任意形状的矩阵的类.

  4. python--flask学习1

    1 windows/unix得安装 http://www.pythondoc.com/flask-mega-tutorial/helloworld.html http://www.pythondoc. ...

  5. E20181029-hm

    cardinality 基数 entity n. 实体; 实际存在物; 本质; distribute vt. 分配,散布; 散发,分发; 把…分类; [电] 配电; replica  n. 复制品; ...

  6. MFC中Radio Button使用方法

    先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,“默认”只要放在OnInitDi ...

  7. HDU2896【AC自动机-模板】

    思路: 因为不同病毒特征码不会相同. AC自动机,然后对于每一个输出即可. 注意:以上字符串中字符都是ASCII码可见字符(不包括回车);G++ MLE. //#include <bits/st ...

  8. NDK环境搭建(Native Code的编译,不需要Cygwin)

    分类: android2013-06-21 15:49 475人阅读 评论(0) 收藏 举报 Android NDK 目录(?)[-] System and Software Requirements ...

  9. 如何在内网打洞使得能暴露mstsc端口

    说明: 1.目标机器Target,有全部控制权,其所处网络无法向外网暴露端口,但是已知Target的外网地址:Target_internet_addr 2.交换机器Exchange,有全部控制权,其所 ...

  10. w3c网址和标准化过程