一、SQLite介绍

提到数据存储问题,数据库是不得不提的。数据库是用来存储关系型数据的不二利器。Android为开发者提供了强大的数据库支持,可以用来轻松地构造基于数据库的应用。Android的数据库应用,依托于当下最流行的开源嵌入式数据库SQLite。在Android中,应用的数据库文件是该应用私有的,存储在应用数据目录下的databases子目录内。从代码结构来看,Android的数据库实现可以分成两个层次,在底层通过C++调用SQLite的接口来执行SQL语句,并通过JNI向上暴露Java可访问的接口。

SQLite可视化工具:SQLite Expert Professional 3;

二、Android访问SQLite

主要步骤:

(1)创建某个类继承SQLiteOpenHelper,并重写
-- 带Context参数的构造函数; //用来创建数据库
-- onCreate(SQLiteDatabase db); //在创建数据库时调用
-- onUpgrade(SQLiteDatabase db,int old,int newversion);  //数据库版本更改时调用
(2)创建数据库:SQLiteDatabase db = helper.getWritableDatabase();
(3)SQL语句:db.execSQL(String sql);
 
语句使用:

1.打开数据库

 
SQLiteDatabase db = helper.getWritableDatabase();
SQLiteDatabase db = helper.getReadableDatabase(); //此函数内部其实也调用了getWritableDatabase()函数,即调用了此函数,也可以写数据
 

2.insert语句

 
(1)db.execSQL("insert into person(name,age) values(?,?)",new Object[]{"xiazdong",20});
(2)
ContentValues values = new ContentValues();
values.put("name","xiazdong");
values.put("age",20);
db.insert("tablename",null,values);

3.delete语句

 
(1)db.execSQL("delete from person where id=?",new Object[]{id});
(2)db.delete("tablename","id=?",new String[]{id+""});
 

4.update语句

 
(1)
db.exeSQL("update person set age=? where name=?",new Object[]{30,"xiazdong"});
(2)
ContentValues values = new ContentValues();
values.put("age",30);/*set子句*/
db.update("tablename",values,"name=?"/*where子句*/,new String[]{"xiazdong"}/*where子句参数*/);

5.query语句

 
(1)
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"));
}
(2)
Cursor cursor = db.query("tablename",null/*表示select * */,"name=?"/*where语句*/,new String[]{"xiazdong"},null/*group by 语句*/,null/*having 语句*/,null/*order by语句*/,null/*limit 语句*/);
 

6.分页语句

 
Cursor cursor = db.rawQuery("select * from person limit ?,?",new Object[]{5,5});    //第一个5表示跳过5条记录,下一个5为查询结果的记录个数
while(cursor.moveToNext()){
    String name = cursor.getString(cursor.getColumnIndex("name")); 
}

7.获得记录个数语句

 
(1)
Cursor cursor = db.rawQuery("select count(*) from person", null);
cursor.moveToFirst();
int count = cursor.getInt(0);
 
(2)
db.query("person",new String[]{"count(*)"},null,null,null,null,null,null);
 
 
 
 示例代码:
MySQLiteOpenHelper.java:
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数据存储(下)的更多相关文章

  1. 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高

    第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...

  2. 第8章 Android数据存储与IO——File存储

    openFileOutput/openFileInput 这是android自带的两种解决方案.

  3. Android - 数据存储 -存储键值对

    如果你有少量的键值数据需要存储,可以使用SharedPreferencesAPI.SharedPreferences对象指向一个包含键值对的文件并且提供了一些简单的方法来读取它们.每个SharedPr ...

  4. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  5. 【Android开发日记】之入门篇(八)——Android数据存储(下)

    废话不多说了,紧接着来讲数据库的操作吧.Come On! 提到数据存储问题,数据库是不得不提的.数据库是用来存储关系型数据的不二利器.Android为开发者提供了强大的数据库支持,可以用来轻松地构造基 ...

  6. 《Django By Example》第十二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...

  7. 【Android开发日记】之入门篇(十二)——Android组件间的数据传输

    组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...

  8. 《Django By Example》第十二章(终章) 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...

  9. 进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用

    进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数 ...

  10. 第十二章 Python文件操作【转】

    12.1 open() open()函数作用是打开文件,返回一个文件对象. 用法格式:open(name[, mode[, buffering[,encoding]]]) -> file obj ...

随机推荐

  1. Windows Server 2003/2008 单网卡搭建VPN

    Windows Server 2003/2008 单网卡搭建VPN 1.打开[控制面板] --> [管理工具] --> [路由和远程访问] 2.鼠标右击你要管理的电脑 在弹出式菜单中选中[ ...

  2. scala.collection.immutable.HashSet$.empty()Lscala/collection/immutable/HashSet

    最近重新搭了spark环境.在Master上使用了IDEA来写代码.确实很方便.我用的是hadoop2.6.spark1.5.1forhadoop2.6. scala之前用的是2.11.0老是报这个错 ...

  3. 程序的删除kill、killall

    发送信号给程序,或者列出信号集 SYNOPSIS        kill [-s SIGNAL | -SIGNAL] PID...        kill -l [SIGNAL]...   1.信号操 ...

  4. Linux 夸平台 移植 Win32

    1.代码格式 大量的 警告 不识别的字符(936),请保存为unicode 以免丢失数据,好多参考说忽略此警告. 但是很多错误都是由于这个警告引起的.将大量的.h .cpp 的utf 8 数据用txt ...

  5. Java NIO教程 Buffer

    缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存,这块内存中有很多可以存储byte(或int.char等)的小单元.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问 ...

  6. ORA-12505 错误解决

     在Fedora下安装了Oracle 10gR2,安装完成之后,使用netca创建了监听,创建的时候没有使用默认的LISTENER和1521端口,而是使用了LISTENER_DELL和1522端口,终 ...

  7. jquery 滚动到底部加载

    var body_ = $(window); var indexPage = 2; var pageCount = <?php echo $pageCount;?>; var _ajaxR ...

  8. 技术英文单词贴--P

    P pagination 分页,页码 parse 解析,从语法上描述或分析 partial 局部的 pattern 模式 populate 填充,居住于,构成人口 precedence 优先 pref ...

  9. jsp学习--JavaBean定义和在Jsp中使用JavaBean

    一.JavaBean 1.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:>>这个Java类必须具有一个无参的构造函数>>属性必须私 ...

  10. 在windows环境下基于sublime text3的node.js开发环境搭建

    首先安装sublime text3,百度一堆,自己找吧.理论上sublime text2应该也可以.我只能说一句:这个软件实在是太强悍了. 跨平台,丰富的插件体系,加上插件基本上就是一个强悍的ide了 ...