在Android开拓中SQLite起着很关键的成效,互连网SQLite的课程有为数十分多广大,不过那3个教程大大多都讲得不是很周全。本人总括了有个别SQLite命令,借着论坛的大赛,跟大家大饱眼福分享的。

一.SQLite的介绍
1.SQLite简介
SQLite是1款轻型的数据库,是遵从ACID的关联式数据库管理体系,它的计划目的是放到
式的,而且如今一度在广大嵌入式产品中央银行使了它,它占用资源比非常低,在嵌入式设备中,或者只供给几百K的内部存款和储蓄器就够了。它亦可协助Windows/Linux/Unix等等主流的操作系统,同时能够跟繁多程序语言相结合,比方Tcl、PHP、Java、C++、.Net等,还可能有ODBC接口,同样比起
Mysql、PostgreSQL这三款开源世界名牌的数据库管理种类来说,它的管理速度比他们都快。
2.SQLite的特点:
轻量级
SQLite和C/S情势的数据库软件差别,它是经过内的数据库引擎,由此不设有数据库的客户端和服务器。使用SQLite一般只需求带上它的1个动态
库,就足以大饱眼福它的整套功用。而且丰裕动态库的尺码也挺小,以版本叁.6.11为例,Windows下4八7KB、Linux下347KB。
不需要”安装”
SQLite的为主引擎自个儿不借助于第三方的软件,使用它也无需”安装”。有一点类似这种米红软件。
纯净文件
数据库中具有的音讯(比如表、视图等)都带有在八个文本内。那一个文件能够放肆复制到此外目录或其余机器上。
跨平台/可移植性
除了主流操作系统
windows,linux之后,SQLite还扶助其余一些有的时候用的操作系统。
弱类型的字段
1律列中的数据能够是例外档案的次序
开源
其一相信大家都懂的!
3.SQLite数据类型
貌似数量运用的一定的静态数据类型,而SQLite接纳的是动态数据类型,会依赖存入值自动推断。SQLite具备以下两种常用的数据类型:
NULL: 那一个值为空值
VALX570CHA奥迪Q叁(n):长度不稳固且其最大尺寸为 n 的字串,n不能超过 五千。
CHATiggo(n):长度固定为n的字串,n无法超过 254。
INTEGEHummerH二: 值被标志为整数,依附值的尺寸能够依次被贮存为一,二,三,肆,5,六,柒,8.
REAL: 全部值都以浮动的数值,被积累为八字节的IEEE浮动标识序号.
TEXT: 值为文本字符串,使用数据库编码存储(TUTF-八, UTF-16BE or
UTF-1六-LE).
BLOB: 值是BLOB数据块,以输入的多寡格式举办仓库储存。如何输入就什么样存储,不改动格式。
DATA :包含了 年份、月份、日期。
TIME: 包含了 小时、分钟、秒。
相信学过数据库的童鞋对那些数据类型都不不熟悉的!!!!!!!!!!
二.SQLiteDatabase的介绍
Android提供了创制和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些主意。在Android的SDK目录下有sqlite三工具,我们得以应用它创设数据库、创设表和施行一些SQL语句。下边是SQLiteDatabase的常用方法。
**SQLiteDatabase的常用方法 **

1.SQLite简介

一.SQLite的介绍

图片 1

SQLite是一款轻型的数据库,是遵循ACID的关联式数据库管理种类,它的宏图目标是停放  式的,而且方今曾经在重重嵌入式产品中运用了它,它占用能源异常低,在嵌入式设备中,或许只须要几百K的内部存款和储蓄器就够了。

1.SQLite简介

Paste_Image.png

它亦可援救Windows/Linux/Unix等等主流的操作系统,相同的时间能够跟许多程序语言相结合,比方Tcl、PHP、Java、C++、.Net等,还应该有ODBC接口,同样比起
Mysql、PostgreSQL那五款开源世界知名的数据库处理种类来说,它的管理速度比她们都快。

SQLite是一款轻型的数据库,是听从ACID的关联式数据库管理连串,它的安顿性目标是放到 
式的,而且近些日子早就在多数嵌入式产品中利用了它,它占用能源丰富的低,在嵌入式设备中,恐怕只供给几百K的内部存储器就够了。它能够协助Windows/Linux/Unix等等主流的操作系统,同期能够跟好些个程序语言相结合,举个例子Tcl、PHP、Java、C++、.Net等,还只怕有ODBC接口,同样比起
Mysql、PostgreSQL那七款开源世界闻名的数据库管理连串来说,它的管理速度比她们都快。

一、展开可能创建数据库
在Android 中以使用SQLiteDatabase的静态方法openOrCreateDatabase(String
path,SQLiteDatabae.CursorFactory
factory)张开可能成立三个数据库。它会自行去检验是不是留存这些数据库,就算存在则张开,不存在则开创2个数据库;创产生功则赶回贰个SQLiteDatabase对象,不然抛出相当FileNotFoundException。
下边是创建名字为“stu.db”数据库的代码:
db=SQLiteDatabase.openOrCreateDatabase(“/data/data/com.lingdududu.db/databases/stu.db”,null);

2.SQLite的特点:

2.SQLite的特点:

2、创建表
创制一张表很简单。首先,编写创设表的SQL语句,然后,调用SQLiteDatabase的execSQL()方法来实践SQL语句便足以创立一张表了。
上边的代码创制了一张用户表,属性列为:_id(主键并且自动扩张)、sname(学生姓名)、snumber(学号)

  • 轻量级

轻量级

private void createTable(SQLiteDatabase db){  

  //创建表SQL语句  
  String stu_table="create table usertable(_id integer primary key autoincrement,sname text,snumber text)";  

  //执行SQL语句   
  db.execSQL(stu_table);  
}

SQLite和C/S方式的数据库软件差异,它是经过内的数据库引擎,由此不存在数据库的客户端和服务器。使用SQLite一般只须要带上它的三个动态  库,就能够大快朵颐它的全套作用。

SQLite和C/S形式的数据库软件不相同,它是进程内的数据库引擎,由此不设有数据库的客户端和服务器。使用SQLite一般只须求带上它的贰个动态 
库,就足以大饱眼福它的整套效果。而且丰裕动态库的尺码也挺小,以版本三.陆.1一为例,Windows下48柒KB、Linux下347KB。

三、插入数据
插入数据有二种形式:
一SQLiteDatabase的insert(String table,String nullColumn哈克,ContentValues
values)方法,参数一是表名称,参数二是空驶列车的暗许值,参数3是ContentValues类型的三个包裹了列名称和列值的Map;
二编纂插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来进行
先是种方式的代码:

再者特别动态库的尺码也挺小,以版本三.陆.1一为例,Windows下4八柒KB、Linux下34七KB。

不需要”安装”

private void insert(SQLiteDatabase db) {  

//实例化常量值  
ContentValues cValue = new ContentValues();  

//添加用户名  
cValue.put("sname","xiaoming");  

//添加密码  
cValue.put("snumber","01005");  

//调用insert()方法插入数据  
db.insert("stu_table",null,cValue);  
}  
  • 不需要”安装”

SQLite的中央引擎本身不借助于第二方的软件,使用它也无需”安装”。有一点类似这种青灰软件。

其次种形式的代码:

SQLite的着力引擎自己不借助第一方的软件,使用它也不供给”安装”。有一点类似这种铁黄软件。

纯净文件 

private void insert(SQLiteDatabase db){

  • 单纯性文件  

数据库中具备的音信(举例表、视图等)都包涵在3个文本内。这几个文件能够大四复制到其余目录或其余机器上。

 //插入数据SQL语句  
 String stu_sql="insert into stu_table(sname,snumber) values('xiaoming','01005')";  

//执行SQL语句  
 db.execSQL(sql);  

数据库中兼有的新闻(比方表、视图等)都包蕴在叁个文本内。这么些文件能够专擅复制到其余目录或别的机器上。

跨平台/可移植性

}

  • 跨平台/可移植性

除了主流操作系统
windows,linux之后,SQLite还帮助其余一些有时用的操作系统。

四、删除数据
删除数据也许有两种格局:
①调用SQLiteDatabase的delete(String table,String whereClause,String[]
whereArgs)方法,参数1是表名称,参数贰是删除条件,参数叁是剔除条件值数组;
贰编纂删除SQL语句,调用SQLiteDatabase的execSQL()方法来推行删除。
率先种办法的代码:

除了这些之外主流操作系统
windows,linux之后,SQLite还扶助别的一些不经常用的操作系统。

弱类型的字段

private void delete(SQLiteDatabase db) {  

   //删除条件  
   String whereClause = "_id=?";  

   //删除条件参数  
   String[] whereArgs = {String.valueOf(2)};  

   //执行删除  
   db.delete("stu_table",whereClause,whereArgs);   
}  
  • 弱类型的字段

无差别于列中的数据能够是见仁见智门类

第三种方法的代码:

1律列中的数据能够是不一样品类

开源

private void delete(SQLiteDatabase db) {  

   //删除SQL语句  
   String sql = "delete from stu_table where _id  = 6";  

   //执行SQL语句  
   db.execSQL(sql);  
}  
  • 开源

其一相信大家都懂的!!!!!!!!!!!!

5、修改数据
修改数占有二种艺术:
①调用SQLiteDatabase的update(String table,ContentValues values,String
whereClause, String[]
whereArgs)方法。参数是表名称,参数是更行列ContentValues类型的键值对(Map),参数是创新标准(where字句),参数是立异规范数组。
2编辑更新的SQL语句,调用SQLiteDatabase的execSQL实施更新。
率先种办法的代码:

3.SQLite数据类型

三.SQLite数据类型

private void update(SQLiteDatabase db) {  

//实例化内容值  
ContentValues values = new ContentValues();  

//在values中添加内容   
values.put("snumber","101003");  

//修改条件   
String whereClause = "id=?";  

//修改添加参数  
String[] whereArgs={String.valuesOf(1)};  

//修改  
db.update("usertable",values,whereClause,whereArgs);   
}  

诚如数量采纳的固定的静态数据类型,而SQLite接纳的是动态数据类型,会基于存入值自动判定。SQLite具有以下多样常用的数据类型:

貌似数量运用的固化的静态数据类型,而SQLite选择的是动态数据类型,会基于存入值自动剖断。SQLite具备以下多种常用的数据类型:

第三种艺术的代码:

NULL: 这么些值为空值
VA瑞鹰CHA奥迪Q3(n):长度不稳固且其最大尺寸为 n 的字串,n不能够超越 四千。
CHAXC60(n):长度固定为n的字串,n无法超过 254。
INTEGE卡宴: 值被标志为整数,依赖值的大大小小能够依次被贮存为一,2,3,四,5,陆,七,八.
REAL: 全部值都以变化的数值,被储存为8字节的IEEE浮动标志序号.
TEXT: 值为文本字符串,使用数据库编码存款和储蓄(TUTF-八, UTF-16BE or
UTF-1六-LE).
BLOB:
值是BLOB数据块,以输入的数量格式进行仓库储存。如何输入就怎么样存款和储蓄,不改  变格式。
DATA :包含了 年份、月份、日期。
TIME: 包含了 小时、分钟、秒。

NULL: 这些值为空值

private void update(SQLiteDatabase db){  

//修改SQL语句  
String sql = "update stu_table set snumber = 654321 where id = 1";  

//执行SQL  
db.execSQL(sql);   
}  

二.SQLiteDatabase的介绍

VA奥迪Q7CHAPAJERO(n):长度不稳定且其最大尺寸为 n 的字串,n不可能超越 四千。

6、查询数据
在Android中询问数据是透过Cursor类来实现的,当我们应用SQLiteDatabase.query()方法时,会博得八个Cursor对象,Cursor指向的正是每一条数据。它提供了无尽有关查询的章程,具体方法如下:public
Cursor query(String table,String[] columns,String selection,String[]
selectionArgs,String groupBy,String having,String orderBy,String
limit);
依次参数的意思表达:
①table:表名称
二columns:列名称数组
叁selection:条件字句,约等于where
四selectionArgs:条件字句,参数数组
⑤groupBy:分组列
六having:分组条件
⑦orderBy:排序列
8limit:分页查询范围
玖Cursor:再次回到值,也就是结果集ResultSet
Cursor是三个游标接口,提供了遍历查询结果的点子,如运动指针方法move(),获得列值方法getString()等.
Cursor游标常用方法

Android提供了创造和是用SQLite数据库的API。SQLiteDatabase代表三个数据库对象,提供了操作数据库的有的主意。在Android的SDK目录下有sqlite3工具,我们得以接纳它成立数据库、创设表和施行一些SQL语句。上边是SQLiteDatabase的常用方法。

CHA帕杰罗(n):长度固定为n的字串,n不能够超过 25四。

图片 2

SQLiteDatabase的常用方法

INTEGERAV4: 值被标记为整数,依靠值的轻重缓急能够依次被积存为一,2,三,四,伍,陆,七,八.

Paste_Image.png

方法名称
方法表示含义
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory  factory)
打开或创建数据库
insert(String table,String nullColumnHack,ContentValues  values)
插入一条记录
delete(String table,String whereClause,String[]  whereArgs)
删除一条记录
query(String table,String[] columns,String selection,String[]  selectionArgs,String groupBy,String having,String  orderBy)
查询一条记录
update(String table,ContentValues values,String whereClause,String[]  whereArgs)
修改记录
execSQL(String sql)
执行一条SQL语句
close()
关闭数据库

REAL: 全部值都以生成的数值,被贮存为捌字节的IEEE浮动标志序号.

下边正是用Cursor来查询数据库中的数据,具体代码如下:

 

TEXT: 值为文本字符串,使用数据库编码存款和储蓄(TUTF-8, UTF-1陆BE or UTF-1陆-LE).

private void query(SQLiteDatabase db)  
{  

   //查询获得游标  
   Cursor cursor = db.query   ("usertable",null,null,null,null,null,null);  

   //判断游标是否为空  
   if(cursor.moveToFirst() {  

   //遍历游标  
   for(int i=0;i<cursor.getCount();i++){  

cursor.move(i);  

//获得ID  
int id = cursor.getInt(0);  

//获得用户名  
String username=cursor.getString(1);  

//获得密码  
String password=cursor.getString(2);  

//输出用户信息  
System.out.println(id+":"+sname+":"+snumber);  
   }  
   }   
}  

谷歌(Google)集团命名这一个措施的名称都是特别形象的。举个例子openOrCreateDatabase,我们从字面英文含义就能够收看这是个展开或创办数据库的格局

BLOB: 值是BLOB数据块,以输入的数额格式实行仓库储存。怎样输入就什么存款和储蓄,不改 
变格式。

柒、删除钦定表
编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来施行

 

DATA :包含了 年份、月份、日期。

private void drop(SQLiteDatabase db){  
 //删除表的SQL语句
 String sql ="DROP TABLE stu_table";   
//执行SQL   
db.execSQL(sql); 
}   

一、展开大概创制数据库

TIME: 包含了 小时、分钟、秒。

三. SQLiteOpenHelper
此类是SQLiteDatabase一个援救类。这几个类主要生成一个数据库,并对数据库的版本进行保管。当在先后个中调用那个类的格局getWritableDatabase()只怕getReadableDatabase()方法的时候,借使登时尚未数据,那么Android系统就能自动生成三个数据库。
SQLiteOpenHelper
是贰个抽象类,我们日常须要持续它,并且落成里面的二个函数:
1.onCreate(SQLiteDatabase)
在数据库第一回变动的时候会调用那个方法,也正是说,只有在创制数据库的时候才会调用,当然也许有局地别样的景观,一般大家在这几个点子里边生成数据库表。

在Android
中动用SQLiteDatabase的静态方法openOrCreateDatabase(String  path,SQLiteDatabae.CursorFactory  factory)张开大概创建五个数据库。

要翻看数据库,首先必要求找到db文件,假设拷贝到计算机上,查看的方法比较多,在四哥伦比亚大学上,用命令查六柱预测比直接和有利。

  1. onUpgrade(SQLiteDatabase,int,int)
    当数据库要求进级的时候,Android系统会主动的调用那一个主意。一般大家在那个措施里边删除数据表,并树立新的数据表,当然是还是不是还亟需做任何的操作,完全取决于应用的急需。

  2. onOpen(SQLiteDatabase):
    那是当张开数据库时的回调函数,一般在先后中不是很常选拔。

它会自行去检验是还是不是存在那几个数据库,倘若存在则展开,不设有则创立一个数据库;创产生功则赶回二个SQLiteDatabase对象,不然抛出格外FileNotFoundException。

先是要找到数据库的职分,一般数据库时存放在程序的私有目录,所以要猎取root权限。

写了这么多,改改用实际例子来验证方面包车型客车原委了。上边那一个操作数据库的实例落成了创设数据库,创造表以及数据库的增加和删除改查的操作。
SQLiteActivity.java

上面是创造名称为“stu.db”数据库的代码:
openOrCreateDatabase(String  path,SQLiteDatabae.CursorFactory  factory)
参数一  数据库创制的渠道
参数2  一般安装为null就可以了

保险开辟工具已经一连上手提式无线电电话机,张开命令行,输入adb shell

package com.lingdududu.testSQLite;  

import com.lingdududu.testSQLiteDb.StuDBHelper;  

import android.app.Activity;  
import android.content.ContentValues;  
import android.database.Cursor;  
import android.database.sqlite.SQLiteDatabase;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
/*  
 * @author lingdududu  
 */ 
public class SQLiteActivity extends Activity {  
/** Called when the activity is first created. */ 
//声明各个按钮  
private Button createBtn;  
private Button insertBtn;  
private Button updateBtn;  
private Button queryBtn;  
private Button deleteBtn;  
private Button ModifyBtn;  
@Override 
public void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
setContentView(R.layout.main);  

//调用creatView方法  
creatView();  
//setListener方法  
setListener();  
}  

//通过findViewById获得Button对象的方法  
private void creatView(){  
createBtn = (Button)findViewById(R.id.createDatabase);  
updateBtn = (Button)findViewById(R.id.updateDatabase);  
insertBtn = (Button)findViewById(R.id.insert);  
ModifyBtn = (Button)findViewById(R.id.update);  
queryBtn = (Button)findViewById(R.id.query);  
deleteBtn = (Button)findViewById(R.id.delete);  
}  

//为按钮注册监听的方法  
private void setListener(){  
createBtn.setOnClickListener(new CreateListener());  
updateBtn.setOnClickListener(new UpdateListener());  
insertBtn.setOnClickListener(new InsertListener());  
ModifyBtn.setOnClickListener(new  ModifyListener());  
queryBtn.setOnClickListener(new QueryListener());  
deleteBtn.setOnClickListener(new DeleteListener());  
}  

//创建数据库的方法  
class CreateListener implements OnClickListener{  

@Override 
public void onClick(View v) {  
//创建StuDBHelper对象  
StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,1);  
//得到一个可读的SQLiteDatabase对象  
SQLiteDatabase db =dbHelper.getReadableDatabase();  
} 
}  

//更新数据库的方法  
class UpdateListener implements OnClickListener{  

@Override 
public void onClick(View v) {  
// 数据库版本的更新,由原来的1变为2  
StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,2);  
SQLiteDatabase db =dbHelper.getReadableDatabase();  
} 
}  

//插入数据的方法  
class InsertListener implements OnClickListener{  

@Override 
public void onClick(View v) {  

StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,1);  
//得到一个可写的数据库  
SQLiteDatabase db =dbHelper.getWritableDatabase();  

//生成ContentValues对象 //key:列名,value:想插入的值
ContentValues cv = new ContentValues();  
//往ContentValues对象存放数据,键-值对模式  
cv.put("id", 1);  
cv.put("sname", "xiaoming");  
cv.put("sage", 21);  
cv.put("ssex", "male");  
//调用insert方法,将数据插入数据库  
db.insert("stu_table", null, cv);  
//关闭数据库  
db.close();  
} 
}  

//查询数据的方法  
class QueryListener implements OnClickListener{  

@Override 
public void onClick(View v) {  

StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,1);  
//得到一个可写的数据库  
SQLiteDatabase db =dbHelper.getReadableDatabase();  
//参数1:表名
//参数2:要想显示的列
//参数3:where子句
//参数4:where子句对应的条件值
//参数5:分组方式
//参数6:having条件
//参数7:排序方式
Cursor cursor = db.query("stu_table", new String[]{"id","sname","sage","ssex"}, "id=?", new String[]{"1"}, null, null, null);  
while(cursor.moveToNext()){  
String name = cursor.getString(cursor.getColumnIndex("sname"));  
String age = cursor.getString(cursor.getColumnIndex("sage"));  
String sex = cursor.getString(cursor.getColumnIndex("ssex"));  
System.out.println("query------->" + "姓名:"+name+" "+"年龄:"+age+" "+"性别:"+sex);  
}  
//关闭数据库  
db.close();  
} 
}  

//修改数据的方法  
class ModifyListener implements OnClickListener{  

@Override 
public void onClick(View v) {  

StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,1);  
//得到一个可写的数据库  
SQLiteDatabase db =dbHelper.getWritableDatabase();  
ContentValues cv = new ContentValues();  
cv.put("sage", "23");  
//where 子句 "?"是占位符号,对应后面的"1",  
String whereClause="id=?";  
String [] whereArgs = {String.valueOf(1)};  
//参数1 是要更新的表名  
//参数2 是一个ContentValeus对象  
//参数3 是where子句  
db.update("stu_table", cv, whereClause, whereArgs);  
}  
}  

//删除数据的方法  
class DeleteListener implements OnClickListener{  

@Override 
public void onClick(View v) {  

StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,1);  
//得到一个可写的数据库  
SQLiteDatabase db =dbHelper.getReadableDatabase();  
String whereClauses = "id=?";  
String [] whereArgs = {String.valueOf(2)};  
//调用delete方法,删除数据   
db.delete("stu_table", whereClauses, whereArgs);  
} 
}  
} 

 

图片 3

StuDBHelper.java

eg:
 db=SQLiteDatabase.openOrCreateDatabase(“/data/data/com.lingdududu.db/databases/stu.db”,null); 

那时还尚无博得root权限,输入su,手提式有线电话机会弹出提示,允许获取root权限 

package com.lingdududu.testSQLiteDb;  

import android.content.Context;  
import android.database.sqlite.SQLiteDatabase;  
import android.database.sqlite.SQLiteDatabase.CursorFactory;  
import android.database.sqlite.SQLiteOpenHelper;  
import android.util.Log;  

public class StuDBHelper extends SQLiteOpenHelper {  

private static final String TAG = "TestSQLite";  
public static final int VERSION = 1;  

//必须要有构造函数  
public StuDBHelper(Context context, String name, CursorFactory factory,  
int version) {  
super(context, name, factory, version);  
}  

// 当第一次创建数据库的时候,调用该方法   
public void onCreate(SQLiteDatabase db) {  
String sql = "create table stu_table(id int,sname varchar(20),sage int,ssex varchar(10))";  
//输出创建数据库的日志信息  
Log.i(TAG, "create Database------------->");  
//execSQL函数用于执行SQL语句  
db.execSQL(sql);  
}  

//当更新数据库的时候执行该方法  
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
//输出更新数据库的日志信息  
Log.i(TAG, "update Database------------->");  
}  
}  

2、创建表

图片 4

main.xml

成立一张表的步子很简短:

后缀变为“#”,成功收获root权限,那时能够进入应用程序的个体目录,

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
   <TextView
android:layout_width="fill_parent"   
android:layout_height="wrap_content"   
android:text="@string/hello" 
/> 
<Button 
android:id="@+id/createDatabase" 
android:layout_width="fill_parent"   
android:layout_height="wrap_content"   
android:text="创建数据库" 
/>
<Button 
android:id="@+id/updateDatabase" 
android:layout_width="fill_parent"   
android:layout_height="wrap_content"   
android:text="更新数据库" 
/>
<Button 
android:id="@+id/insert" 
android:layout_width="fill_parent"   
android:layout_height="wrap_content"   
android:text="插入数据" 
/> 
<Button 
android:id="@+id/update" 
android:layout_width="fill_parent"   
android:layout_height="wrap_content"   
android:text="更新数据" 
/> 
<Button 
android:id="@+id/query" 
android:layout_width="fill_parent"   
android:layout_height="wrap_content"   
android:text="查询数据" 
/> 
 <Button 
android:id="@+id/delete" 
android:layout_width="fill_parent"   
android:layout_height="wrap_content"   
android:text="删除数据" 
/> 
</LinearLayout> 
  • 编写创立表的SQL语句
  • 调用SQLiteDatabase的execSQL()方法来实行SQL语句

输入cd data/data/程序包名/databases/,进入数据库的目录

程序运转的效果图:

上面包车型大巴代码创造了一张用户表,属性列为:id(主键并且自动扩大)、sname(学生姓名)、snumber(学号)

上面时部分主干的sqlite命令

图片 5

图片 6图片 7

第二展开数据库,输入sqlite叁 test_db,展开二个文书名为test_db的数据。

private void createTable(SQLiteDatabase db){ 
//创建表SQL语句 
String stu_table="create table usertable(_id integer primary key autoincrement,sname text,snumber text)"; 
//执行SQL语句 
db.execSQL(stu_table); 
}

图片 8

当点击创造数据库按键:
LogCat窗口输出的音信为:

View Code

要翻看数据库的布局,输入.schema

图片 9

三、插入数据

图片 10 

当点击更新数据库按键:
LogCat窗口输出的音信为:

ContentValues 是壹种存款和储蓄的体制,常用于数据库的操作。只好存款和储蓄主题项目。
布署数占领三种格局:
①SQLiteDatabase的insert(String table,String
nullColumnHack,ContentValues  values)方法,
  参数1  表名称,
  参数2  空驶列车的暗中认可值
  参数三  ContentValues类型的3个包装了列名称和列值的Map;

翻看一些兼有的多少

图片 11

图片 12图片 13

图片 14

当点击查询数据库按键:
LogCat窗口输出的音信为:

private void insert(SQLiteDatabase db){         
//实例化常量值      
ContentValues cValue = new ContentValues();        
//添加用户名      
cValue.put("sname","xiaoming");         
//添加密码      
cValue.put("snumber","01005");        
//调用insert()方法插入数据      
db.insert("stu_table",null,cValue);  
}  

翻开起来有一些勤奋,为了让数据看起来更奇妙,输入.head
on,呈现列名,输入.mode column,按类展现

图片 15

View Code

图片 16

利用adb命令查看数据库:
一.在命令行窗口输入adb
shell回车,就进去了Linux命令行,以后就能够动用Linux的授命了。
2.ls回车,突显全部的事物,当中有个data。(ls:呈现全体,cd:进入)
叁.cd data回车,再ls回车,cd
data回车,ls回车的前面就能够看出诸多的com.。。。,那正是系统上的应用程序包名,找到您数据库程序的包名,然后进入。
四.进去后在查看全部,会看到有databases,进入databases,显示全体就能够发觉你的数据库名字,这里运用的是”stu_db”。
5.sqlite3
stu_db回车就进入了你的数据库了,然后“.schema”就能看出该应用程序的全数表及建表语句。
陆.以往就能够使用专门的学业的SQL语句查看刚才生成的数据库及对数据奉行增删改查了。

 

看起来舒服多了

sqlite3 stu_db

sqlite3 stu_db
SQLite version 3.6.22
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite.schema
.schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE stu_table(id int,sname varchar(20),sage int,ssex
varchar(10)); —>创立的表
sqliteselect * from stu_table;
select * from stu_table;
1|xiaoming|21|male
sqlite>
安顿数据
sqliteinsert into stu_table values(2,’xiaohong’,20,’female’);
布置的数据记得要和表中的习性1一对应
insert into stu_table values(2,’xiaohong’,20,’female’);
sqliteselect * from stu_table;
select * from stu_table;
1|xiaoming|21|male
二|xiaohong|20|female ————–插入的数额
sqlite>
当点击修改数据的开关时候
sqliteselect * from stu_table;
select * from stu_table;
一|xiaoming|二三|male ————–>年龄被修改为二3
2|xiaohong|20|female
sqlite>

当点击删除数据的按键
sqliteselect * from stu_table;
select * from stu_table;
一|xiaoming|二三|male id=二的多少现已被删去
总的说来,大家得以在代码中实践数据库的增加和删除改查,也能够在adb命令行下完成。不过因为SQLite未有客户端,不能直接的查阅数据库变化后的音信,所以常用adb命令行查看数据库改动后的新闻。

贰编纂插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来进行

要翻开有个别许个表,输入.table

图片 17图片 18

查阅单个表的构造,.schema TableName

private void insert(SQLiteDatabase db){         
//插入数据SQL语句       
String stu_sql="insert into stu_table(sname,snumber) values('xiaoming','01005')";        
 //执行SQL语句       
db.execSQL(sql); 
 }  

以上命令进行简要的查阅数据库,应该丰硕了。

View Code

你只怕感兴趣的篇章:

  • Android应用中内嵌SQLite数据库的基本操作指南
  • 二1天学习android开拓教程之SQLite分页读取
  • Android开垦之sqlite3命令行轻易利用情势
  • Android数据存款和储蓄之SQLite使用
  • Android编制程序操作嵌入式关系型SQLite数据库实例详解
  • Android中行使SQLite三命令行查看内嵌数据库的形式
  • android编程实现拉长文本内容到sqlite表中的方法
  • Android
    SQLite数据库增加和删除改查操作的选用详解
  • Android开辟之SQLite的运用格局
  • Android
    App使用SQLite数据库的一些大旨总括

四、删除数据

删去数据也是有二种方法:
①调用SQLiteDatabase的delete(String table,String
whereClause,String[]  whereArgs)方法
参数1  表名称 
参数二  去除条件
参数三  删除条件值数组

图片 19图片 20

private void delete(SQLiteDatabase db) {        
//删除条件     
String whereClause = "id=?";        
//删除条件参数     
String[] whereArgs = {String.valueOf(2)};       
//执行删除     
db.delete("stu_table",whereClause,whereArgs);  
}   

View Code

 

二编辑删除SQL语句,调用SQLiteDatabase的execSQL()方法来实行删除。

图片 21图片 22

private void delete(SQLiteDatabase db) {       
 //删除SQL语句     
String sql = "delete from stu_table where _id  = 6";        
//执行SQL语句     
db.execSQL(sql);  
}  

View Code

 

5、修改数据
修改数据有二种情势:

①调用SQLiteDatabase的update(String table,ContentValues
values,String  whereClause, String[]  whereArgs)方法
参数1  表名称
参数二  跟行列ContentValues类型的键值对Key-Value
参数三  更新标准(where字句)
参数四  更新标准数组

图片 23图片 24

private void update(SQLiteDatabase db) {         
//实例化内容值      ContentValues values = new ContentValues();        
//在values中添加内容       
values.put("snumber","101003");        
//修改条件       
String whereClause = "id=?";        
//修改添加参数      
String[] whereArgs={String.valuesOf(1)};        
//修改      
db.update("usertable",values,whereClause,whereArgs);  
}  

View Code

2编写制定更新的SQL语句,调用SQLiteDatabase的execSQL推行更新。

图片 25图片 26

private void update(SQLiteDatabase db){        
 //修改SQL语句      
String sql = "update stu_table set snumber = 654321 where id = 1";         
//执行SQL      
db.execSQL(sql);   
} 

View Code

陆、查询数据

在Android中询问数据是因此Cursor类来贯彻的,当大家运用SQLiteDatabase.query()方法时,会猎取3个Cursor对象,Cursor指向的正是每一条数据。它提供了大多关于查询的方法,具体方法如下:

public  Cursor query(String table,String[] columns,String
selection,String[]  selectionArgs,String groupBy,String having,String
orderBy,String limit);
各样参数的意义表达:
参数table:表名称
参数columns:列名称数组
参数selection:条件字句,相当于where
参数selectionArgs:条件字句,参数数组
参数groupBy:分组列
参数having:分组条件
参数orderBy:排序列
参数limit:分页查询范围
参数Cursor:重回值,也便是结果集ResultSet
Cursor是1个游标接口,提供了遍历查询结果的不二秘籍,如运动指针方法move(),得到列值方法getString()等.
Cursor游标常用方法

方法名称
方法描述
getCount()
获得总的数据项数
isFirst()
判断是否第一条记录
isLast()
判断是否最后一条记录
moveToFirst()
移动到第一条记录
moveToLast()
移动到最后一条记录
move(int offset)
移动到指定记录
moveToNext()
移动到下一条记录
moveToPrevious()
移动到上一条记录
getColumnIndexOrThrow(String  columnName)
根据列名称获得列索引
getInt(int columnIndex)
获得指定列索引的int类型值
getString(int columnIndex)
获得指定列缩影的String类型值

上边就是用Cursor来查询数据库中的数据,具体代码如下:

图片 27图片 28

private void query(SQLiteDatabase db)  {        
//查询获得游标     
Cursor cursor = db.query   ("usertable",null,null,null,null,null,null);  

//判断游标是否为空     
if(cursor.moveToFirst() {            
//遍历游标         
for(int i=0;i<cursor.getCount();i++){                 
cursor.move(i);              
//获得ID             
int id = cursor.getInt(0);                 
//获得用户名              
String username=cursor.getString(1);                 
//获得密码             
String password=cursor.getString(2);                
//输出用户信息              System.out.println(id+":"+sname+":"+snumber);        
}     
}   
}

View Code

七、删除钦赐表
编纂插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来试行

图片 29图片 30

private void drop(SQLiteDatabase db){               
//删除表的SQL语句             
String sql ="DROP TABLE stu_table";               
//执行SQL          
 db.execSQL(sql);    
 }   

View Code

 

三. SQLiteOpenHelper
该类是SQLiteDatabase1个帮手类。这几个类主要生成一  个数据库,并对数据库的本子进行田间处理。

当在先后个中调用这么些类的不二等秘书诀getWritableDatabase()或然getReadableDatabase()方法的时候,若是马上从十分少少,那么Android系统就能自动生成1个数据库。

SQLiteOpenHelper
是1个抽象类,大家一般供给持续它,并且达成里面包车型地铁三个函数:

1.onCreate(SQLiteDatabase)
在数据库第2遍生成的时候会调用这些情势,也正是说,唯有在开立数据库的时候才会调用,当然也可能有部分别的的场地,一般大家在这么些办法里边生成数据库表。

2.  onUpgrade(SQLiteDatabase,int,int) 
当数据库需求进级的时候,Android系统会主动的调用这些方法。一般大家在那么些方法里边删除数据表,并成立新的数据表,当然是或不是还索要做别的的操作,完全在于应用的急需。

3.  onOpen(SQLiteDatabase):
那是当张开数据库时的回调函数,一般在先后中不是很常选取。

 

写了如此多,改用用实际例子来验证地点的剧情了。

上面那几个操作数据库的实例完毕了创办数据库,创设表以及数据库的增加和删除改查的操作。
该实例有多少个类:
com.lingdududu.testSQLite 调试类
com.lingdududu.testSQLiteDb  数据库协助类

 

SQLiteActivity.java

图片 31图片 32

package com.lingdududu.testSQLite;

import com.lingdududu.testSQLiteDb.StuDBHelper;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/*
 * @author lingdududu
 */
public class SQLiteActivity extends Activity {
    /** Called when the activity is first created. */
        //声明各个按钮
        private Button createBtn;
        private Button insertBtn;
        private Button updateBtn;
        private Button queryBtn;
        private Button deleteBtn;
        private Button ModifyBtn;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //调用creatView方法
        creatView();
        //setListener方法
        setListener();        
    }

    //通过findViewById获得Button对象的方法
    private void creatView(){
            createBtn = (Button)findViewById(R.id.createDatabase);
        updateBtn = (Button)findViewById(R.id.updateDatabase);
        insertBtn = (Button)findViewById(R.id.insert);
        ModifyBtn = (Button)findViewById(R.id.update);
        queryBtn = (Button)findViewById(R.id.query);
        deleteBtn = (Button)findViewById(R.id.delete);
    }

    //为按钮注册监听的方法
    private void setListener(){
            createBtn.setOnClickListener(new CreateListener());
        updateBtn.setOnClickListener(new UpdateListener());
        insertBtn.setOnClickListener(new InsertListener());
        ModifyBtn.setOnClickListener(new  ModifyListener());
        queryBtn.setOnClickListener(new QueryListener());
        deleteBtn.setOnClickListener(new DeleteListener());
    }

    //创建数据库的方法
    class CreateListener implements OnClickListener{

                @Override
                public void onClick(View v) {
                        //创建StuDBHelper对象
                        StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,1);
                        //得到一个可读的SQLiteDatabase对象
                        SQLiteDatabase db =dbHelper.getReadableDatabase();
                }            
    }

    //更新数据库的方法
    class UpdateListener implements OnClickListener{

                @Override
                public void onClick(View v) {
                        // 数据库版本的更新,由原来的1变为2
                        StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,2);
                        SQLiteDatabase db =dbHelper.getReadableDatabase();
                }            
    }

    //插入数据的方法
    class InsertListener implements OnClickListener{

                @Override
                public void onClick(View v) {

                        StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,1);
                        //得到一个可写的数据库
                        SQLiteDatabase db =dbHelper.getWritableDatabase();

                        //生成ContentValues对象 //key:列名,value:想插入的值  
                        ContentValues cv = new ContentValues();
                        //往ContentValues对象存放数据,键-值对模式
                        cv.put("id", 1);
                        cv.put("sname", "xiaoming");
                        cv.put("sage", 21);
                        cv.put("ssex", "male");
                        //调用insert方法,将数据插入数据库
                        db.insert("stu_table", null, cv);
                        //关闭数据库
                        db.close();
                }           
    }

    //查询数据的方法
    class QueryListener implements OnClickListener{

                @Override
                public void onClick(View v) {

                        StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,1);
                        //得到一个可写的数据库
                        SQLiteDatabase db =dbHelper.getReadableDatabase();
                        //参数1:表名  
                        //参数2:要想显示的列  
                        //参数3:where子句  
                    //参数4:where子句对应的条件值  
                        //参数5:分组方式  
                    //参数6:having条件  
                        //参数7:排序方式  
                        Cursor cursor = db.query("stu_table", new String[]{"id","sname","sage","ssex"}, "id=?", new String[]{"1"}, null, null, null);
                        while(cursor.moveToNext()){
                                String name = cursor.getString(cursor.getColumnIndex("sname"));
                                String age = cursor.getString(cursor.getColumnIndex("sage"));
                                String sex = cursor.getString(cursor.getColumnIndex("ssex"));
                                System.out.println("query------->" + "姓名:"+name+" "+"年龄:"+age+" "+"性别:"+sex);
                        }
                        //关闭数据库
                        db.close();
                }           
    }

    //修改数据的方法
    class ModifyListener implements OnClickListener{

                @Override
                public void onClick(View v) {

                        StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,1);
                        //得到一个可写的数据库
                        SQLiteDatabase db =dbHelper.getWritableDatabase();
                        ContentValues cv = new ContentValues();
                        cv.put("sage", "23");
                        //where 子句 "?"是占位符号,对应后面的"1",
                        String whereClause="id=?";
                        String [] whereArgs = {String.valueOf(1)};
                        //参数1 是要更新的表名
                        //参数2 是一个ContentValeus对象
                        //参数3 是where子句
                        db.update("stu_table", cv, whereClause, whereArgs);
                }
    }

    //删除数据的方法
    class DeleteListener implements OnClickListener{

                @Override
                public void onClick(View v) {

                        StuDBHelper dbHelper = new StuDBHelper(SQLiteActivity.this,"stu_db",null,1);
                        //得到一个可写的数据库
                        SQLiteDatabase db =dbHelper.getReadableDatabase();
                        String whereClauses = "id=?";
                        String [] whereArgs = {String.valueOf(2)};
                        //调用delete方法,删除数据 
                        db.delete("stu_table", whereClauses, whereArgs);
                }          
    }
}

View Code

 

 StuDBHelper.java

 

图片 33图片 34

package com.lingdududu.testSQLiteDb;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class StuDBHelper extends SQLiteOpenHelper {

        private static final String TAG = "TestSQLite";
        public static final int VERSION = 1;

        //必须要有构造函数
        public StuDBHelper(Context context, String name, CursorFactory factory,
                        int version) {
                super(context, name, factory, version);
        }

        // 当第一次创建数据库的时候,调用该方法 
        public void onCreate(SQLiteDatabase db) {
                String sql = "create table stu_table(id int,sname varchar(20),sage int,ssex varchar(10))";
                //输出创建数据库的日志信息
                Log.i(TAG, "create Database------------->");
                //execSQL函数用于执行SQL语句
                db.execSQL(sql);
        }

        //当更新数据库的时候执行该方法
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                //输出更新数据库的日志信息
                Log.i(TAG, "update Database------------->");
        }
}

View Code

main.xml

图片 35图片 36

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
   <TextView  
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="@string/hello"
            />
        <Button
                android:id="@+id/createDatabase"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="创建数据库"
            />            
        <Button
                android:id="@+id/updateDatabase"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="更新数据库"
            />        
        <Button
                android:id="@+id/insert"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="插入数据"
            />
        <Button
                android:id="@+id/update"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="更新数据"
            />
        <Button
                android:id="@+id/query"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="查询数据"
            />
         <Button
                android:id="@+id/delete"
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="删除数据"
            />
</LinearLayout>

View Code

 

程序运转的功用图:

 

图片 37

 

 

动用adb命令查看数据库:

1.在命令行窗口输入adb
shell回车,就进来了Linux命令行,未来就能够采取Linux的命令了。

二.ls回车,显示全部的事物,当中有个data。

三.cd data回车,再ls回车,cd
data回车,ls回车后就可以看出繁多的com…………….,这正是系统上的应用程序包名,找到您数据库程序的包名,然后进入。

四.进来后在查看全部,会看到有databases,进入databases,展现全体就能够发觉你的数据库名字,这里运用的是”stu_db”。

5.sqlite3
stu_db回车就进来了您的数据库了,然后“.schema”就能够看到该应用程序的全部表及建表语句。

陆.过后就足以选用规范的SQL语句查看刚才生成的数据库及对数码进行增加和删除改查了。
注:ls,cd等一声令下都以linux的主干命令,不领会的校友能够看看关于那上头的资料。

下边介绍多少个在SQLite中常用到的adb命令:

查看
.database 展现数据库消息;
.tables 展现表名称;
.schema 命令能够查阅创立数量表时的SQL命令;
.schema table_name 查看创制表table_name时的SQL的命令;

布置记录
insert into table_name values (field1, field2, field3…);

查询
select * from table_name;查看table_name表中负有记录;
select * from table_name where 田野同志1=’xxxxx’;
查询符合内定条件的记录;

删除
drop table_name; 删除表;
drop index_name; 删除索引;
——————————————-查询,插入,删除等操作数据库的口舌记得不要漏了;—————————————-

# sqlite3 stu_db
sqlite3 stu_db
SQLite version 3.6.22
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite> .schema
.schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE stu_table(id int,sname varchar(20),sage int,ssex
varchar(十)); —>成立的表
sqlite> select * from stu_table;
select * from stu_table;
1|xiaoming|21|male
sqlite>

安顿数据

sqlite> insert into stu_table values(2,’xiaohong’,20,’female’);

布署的数目记得要和表中的天性1一对应
insert into stu_table values(2,’xiaohong’,20,’female’);
sqlite> select * from stu_table;
select * from stu_table;
1|xiaoming|21|male
二|xiaohong|20|female ————–> 插入的多少
sqlite>

当点击修改数据的开关时候

sqlite> select * from stu_table;
select * from stu_table;
一|xiaoming|贰三|male ————–>年龄被改动为二3
2|xiaohong|20|female
sqlite>

当点击删除数据的按键

sqlite> select * from stu_table;
select * from stu_table;
一|xiaoming|二叁|male id=2的数据已经被去除

简来讲之,我们能够在代码中施行数据库的增加和删除改查,也得以在adb命令行降低成。可是因为SQLite未有客户端,不能直接的查阅数据库变化后的新闻,所以常用adb命令行查看数据库改换后的新闻。

前方用到的数据库,表都以自个儿在代码中开创,下边介绍怎样运用外部已部分数据库的法子:
先用SQLite管理工科具,sqliteadmin
具体操作异常粗略,在此地我就不详细介绍的了,但有三个地方时候很值得注意的,正是用sqliteadmin创立数据库的时候,数据库保存的路子无法是中文路线,中文路径会出现下边包车型大巴错误提醒:

 图片 38

本身在sqliteadmin 成立好数据库StuDB,里面的表如下:

 图片 39

将开创好的数据库在DDMS中式点心击导入到data/data/程序的包名/

图片 40

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注