第十二章:Android数据存储(下)
一、SQLite介绍
提到数据存储问题,数据库是不得不提的。数据库是用来存储关系型数据的不二利器。Android为开发者提供了强大的数据库支持,可以用来轻松地构造基于数据库的应用。Android的数据库应用,依托于当下最流行的开源嵌入式数据库SQLite。在Android中,应用的数据库文件是该应用私有的,存储在应用数据目录下的databases子目录内。从代码结构来看,Android的数据库实现可以分成两个层次,在底层通过C++调用SQLite的接口来执行SQL语句,并通过JNI向上暴露Java可访问的接口。
SQLite可视化工具:SQLite Expert Professional 3;
二、Android访问SQLite
主要步骤:
1.打开数据库
2.insert语句
ContentValues values = new ContentValues();
values.put("name","xiazdong");
values.put("age",20);
db.insert("tablename",null,values);
3.delete语句
4.update语句
db.exeSQL("update person set age=? where name=?",new Object[]{30,"xiazdong"});
ContentValues values = new ContentValues();
values.put("age",30);/*set子句*/
db.update("tablename",values,"name=?"/*where子句*/,new String[]{"xiazdong"}/*where子句参数*/);
5.query语句
Cursor cursor = db.rawQuery("select * from person where name=?",new Object[]{"xiazdong"});
while(cursor.moveToNext()){
//int index = cursor.getColumnIndex(String name);//根据name获得索引
//String name = cursor.getString(int index); //根据索引获得值
String name = cursor.getString(cursor.getColumnIndex("name"));
}
6.分页语句
7.获得记录个数语句
Cursor cursor = db.rawQuery("select count(*) from person", null);
cursor.moveToFirst();
int count = cursor.getInt(0);
package com.example.helloandroid; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory; public class MySQLiteOpenHelper extends SQLiteOpenHelper { public MySQLiteOpenHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
} @Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub } }
DataBaseActivity.java
package com.example.helloandroid; import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast; public class DataBaseActivity extends Activity {
private Button createDatabase, createTable, selectData, insertData,
updateData, deleteDaata;
private MySQLiteOpenHelper helper; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data_base); // 初始化按钮
createDatabase = (Button) findViewById(R.id.createDatabase);
createTable = (Button) findViewById(R.id.createTable);
selectData = (Button) findViewById(R.id.selectData);
insertData = (Button) findViewById(R.id.insertData);
updateData = (Button) findViewById(R.id.updateData);
deleteDaata = (Button) findViewById(R.id.deleteDaata); helper = new MySQLiteOpenHelper(DataBaseActivity.this, "mydb.db",
null, 1); /*
* 创建数据库
*/
createDatabase.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SQLiteDatabase sqlitedatabase = helper.getWritableDatabase();
Toast.makeText(DataBaseActivity.this, "数据库创建成功", 1000).show(); } }); /*
* 创建表
*/
createTable.setOnClickListener(new OnClickListener() { public void onClick(View arg0) {
// TODO Auto-generated method stub
SQLiteDatabase sqlitedatabase = helper.getWritableDatabase();
// 创建表
sqlitedatabase
.execSQL("create table student(id INTEGER PRIMARY KEY autoincrement,name text)");
Toast.makeText(DataBaseActivity.this, "表创建成功", 1000).show();
}
}); /*
* 插入数据
*/ insertData.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
SQLiteDatabase sqlitedatabase = helper.getWritableDatabase();
sqlitedatabase
.execSQL("insert into student(name) values ('tinyphp')");
Toast.makeText(DataBaseActivity.this, "插入数据成功", 1000).show();
}
}); /*
* 更新数据
*/
updateData.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
SQLiteDatabase sqlitedatabase = helper.getWritableDatabase();
sqlitedatabase
.execSQL("update student set name='monkey' where id='1'");
Toast.makeText(DataBaseActivity.this, "数据更新成功", 1000).show();
}
}); /*
* 查询数据
*/ selectData.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
SQLiteDatabase sqlitedatabase = helper.getReadableDatabase(); //参数:表名、查询的列、查询条件、查询参数、查询结果分组、分组结果限制、排序
Cursor cursor = sqlitedatabase.query("student", new String[] {
"id", "name" }, "id=?", new String[] { "1" }, null,
null, null);
String name=null;
while(cursor.moveToNext()){
name =cursor.getString(cursor.getColumnIndex("name"));
}
Toast.makeText(DataBaseActivity.this, "查询结果name为:"+name, 1000).show();
}
}); /*
* 删除数据
* */ deleteDaata.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
SQLiteDatabase sqlitedatabase =helper.getWritableDatabase();
sqlitedatabase.delete("student", "id=?", new String[]{"1"});
Toast.makeText(DataBaseActivity.this, "数据删除成功", 1000).show();
}
}); }
}
activity_data_base.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <Button
android:id="@+id/createDatabase"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建数据库" /> <Button
android:id="@+id/createTable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="创建表" /> <Button
android:id="@+id/insertData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="插入" /> <Button
android:id="@+id/updateData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="更新" /> <Button
android:id="@+id/selectData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询" /> <Button
android:id="@+id/deleteDaata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除" />
</LinearLayout>
效果图:

第十二章:Android数据存储(下)的更多相关文章
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
- 第8章 Android数据存储与IO——File存储
openFileOutput/openFileInput 这是android自带的两种解决方案.
- Android - 数据存储 -存储键值对
如果你有少量的键值数据需要存储,可以使用SharedPreferencesAPI.SharedPreferences对象指向一个包含键值对的文件并且提供了一些简单的方法来读取它们.每个SharedPr ...
- Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验
Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...
- 【Android开发日记】之入门篇(八)——Android数据存储(下)
废话不多说了,紧接着来讲数据库的操作吧.Come On! 提到数据存储问题,数据库是不得不提的.数据库是用来存储关系型数据的不二利器.Android为开发者提供了强大的数据库支持,可以用来轻松地构造基 ...
- 《Django By Example》第十二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- 【Android开发日记】之入门篇(十二)——Android组件间的数据传输
组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...
- 《Django By Example》第十二章(终章) 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- 进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用
进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数 ...
- 第十二章 Python文件操作【转】
12.1 open() open()函数作用是打开文件,返回一个文件对象. 用法格式:open(name[, mode[, buffering[,encoding]]]) -> file obj ...
随机推荐
- 设置PATH变量
一不小心把PATH变量清空了,所有的命令都执行不了了,提示“xxx: command not found”,解决办法:在命令行输入export PATH=/usr/local/sbin:/usr/lo ...
- 博客的开端,找对象不再new
今天是第一次用blog,小白开始完善了!! 希望大家多多照顾一下.
- JavaScript ES6 的 let 和 var 的比较
在JavaScript 1.7中, let 关键词被添加进来, 我听说它声明之后类似于"本地变量", 但是我仍然不确定它和 关键词 var 的具体区别. 回答: 不同点在于作用域, ...
- [转载] Android中Xposed框架篇---利用Xposed框架实现拦截系统方法
本文转载自: http://www.wjdiankong.cn/android%E4%B8%ADxposed%E6%A1%86%E6%9E%B6%E7%AF%87-%E5%88%A9%E7%94%A8 ...
- HTML、CSS小知识--兼容IE的下拉选择框select
HTML <div class="s_h_ie"> <select id="Select1" disabled="disabled& ...
- java内存知识
java对内存的分类. (网上资料)程序中用来存放数据的内存分为四块,另有一块用于存放代码 1.堆:存放所有new出来的对象(我们知道java并没有全局变量这个概念,有人是把它单独放在properti ...
- bootstrap的日期插件datetimepicker有问题
bootstrap的日期插件datetimepicker在chrome中会出现掉下来的现象,而且一直没找到原因,下载最新版的插件直接在各个浏览器中都会掉下来, 问题一直解决不了,转而换其他插件 htt ...
- PLSQL数据导入导出问题解决(空表、大字段表、表空间错误等)
PLSQL使用方法简单,平常使用较多,但在平常使用过程中,遇到一些问题,下面简单罗列并进行解决.这些解决方法大多通过网络查找获得,这里只是进行简单整理. 使用的数据库版本为:Oracle11g. 通用 ...
- MySQL表分区
MySQL的表分区 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以 ...
- IT公司笔试题(一)
1. 已知一个递归算法的算法复杂度计算公式为T(n) = T(n/2) + n,则T(n)的算法复杂度为多少? 解:O(n) T(n) = T(n/2) + n = T(n/4) + n/2 + n ...