1.SQLite简介
SQLite是一款轻型的数据库,是恪守ACID的相关式数据库办理体系,它的规划目标是嵌入式的,而且现在已经在许多嵌入式产品中运用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支撑Windows/Linux/Unix等等干流的操作体系,一起能够跟许多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源国际闻名的数据库办理体系来讲,它的处理速度比他们都快。
2.SQLite的特点:
轻量级
SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。运用SQLite一般只需要带上它的一个动态库,就能够享用它的悉数功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。
不需要”安装”
SQLite的中心引擎本身不依赖第三方的软件,运用它也不需要”安装”。有点相似那种绿色软件。
单一文件
数据库中所有的信息(比如表、视图等)都包含在一个文件内。这个文件能够自由复制到其它目录或其它机器上。
跨渠道/可移植性
除了干流操作体系windows,linux之后,SQLite还支撑其它一些不常用的操作体系。
弱类型的字段
同一列中的数据能够是不同类型
开源
这个信任咱们都懂的!!!!!!!!!!!!
3.SQLite数据类型
一般数据选用的固定的静态数据类型,而SQLite选用的是动态数据类型,会根据存入值主动判断。SQLite具有以下五种常用的数据类型:
NULL:这个值为空值
VARCHAR(n):长度不固定且其最大长度为n的字串,n不能超过4000。
CHAR(n):长度固定为n的字串,n不能超过254。
INTEGER:值被标识为整数,依据值的巨细能够顺次被存储为1,2,3,4,5,6,7,8.
REAL:所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.
TEXT:值为文本字符串,运用数据库编码存储(TUTF-8,UTF-16BEorUTF-16-LE).
BLOB:值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改变格式。
DATA:包含了年份、月份、日期。
TIME:包含了小时、分钟、秒。
信任学过数据库的童鞋对这些数据类型都不陌生的!!!!!!!!!!
二.SQLiteDatabase的介绍
Android供给了创立和是用SQLite数据库的API。SQLiteDatabase代表一个数据库目标,供给了操作数据库的一些办法。在Android的SDK目录下有sqlite3东西,咱们能够利用它创立数据库、创立表和履行一些SQL句子。下面是SQLiteDatabase的常用办法。
SQLiteDatabase的常用办法
办法称号
办法表明意义
openOrCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory)
翻开或创立数据库
insert(Stringtable,StringnullColumnHack,ContentValuesvalues)
刺进一条记录
delete(Stringtable,StringwhereClause,String[]whereArgs)
删去一条记录
query(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy)
查询一条记录
update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs)
修正记录
execSQL(Stringsql)
履行一条SQL句子
close()
封闭数据库
Google公司命名这些办法的称号都是非常形象的。例如openOrCreateDatabase,咱们从字面英文意义就能看出这是个翻开或创立数据库的办法。
1、翻开或者创立数据库
在Android中运用SQLiteDatabase的静态办法openOrCreateDatabase(Stringpath,SQLiteDatabae.CursorFactoryfactory)翻开或者创立一个数据库。它会主动去检测是否存在这个数据库,如果存在则翻开,不存在则创立一个数据库;创立成功则返回一个SQLiteDatabase目标,否则抛出异常FileNotFoundException。
下面是创立名为“stu.db”数据库的代码:
openOrCreateDatabase(Stringpath,SQLiteDatabae.CursorFactoryfactory)
参数1数据库创立的路径
参数2一般设置为null就能够了
1
db=SQLiteDatabase.openOrCreateDatabase(“/data/data/com.lingdududu.db/databases/stu.db”,null);
2、创立表
创立一张表的过程很简单:
编写创立表的SQL句子
调用SQLiteDatabase的execSQL()办法来履行SQL句子
下面的代码创立了一张用户表,属性列为:id(主键而且主动增加)、sname(学生名字)、snumber(学号)
privatevoidcreateTable(SQLiteDatabasedb){
//创立表SQL句子
Stringstu_table=”createtableusertable(_idintegerprimarykeyautoincrement,snametext,snumbertext)”;
//履行SQL句子
db.execSQL(stu_table);
}
3、刺进数据
刺进数据有两种办法:
①SQLiteDatabase的insert(Stringtable,StringnullColumnHack,ContentValuesvalues)办法,
参数1表称号,
参数2空列的默认值
参数3ContentValues类型的一个封装了列称号和列值的Map;
②编写刺进数据的SQL句子,直接调用SQLiteDatabase的execSQL()办法来履行
榜首种办法的代码:
privatevoidinsert(SQLiteDatabasedb){
//实例化常量值
ContentValuescValue=newContentValues();
//增加用户名
cValue.put(“sname”,”xiaoming”);
//增加密码
cValue.put(“snumber”,”01005″);
//调用insert()办法刺进数据
db.insert(“stu_table”,null,cValue);
}
第二种办法的代码:
privatevoidinsert(SQLiteDatabasedb){
//刺进数据SQL句子
Stringstu_sql=”insertintostu_table(sname,snumber)values(‘xiaoming’,’01005′)”;
//履行SQL句子
db.execSQL(sql);
}
4、删去数据
删去数据也有两种办法:
①调用SQLiteDatabase的delete(Stringtable,StringwhereClause,String[]whereArgs)办法
参数1表称号
参数2删去条件
参数3删去条件值数组
②编写删去SQL句子,调用SQLiteDatabase的execSQL()办法来履行删去。
榜首种办法的代码:
privatevoiddelete(SQLiteDatabasedb){
//删去条件
StringwhereClause=”id=?”;
//删去条件参数
String[]whereArgs={String.valueOf(2)};
//履行删去
db.delete(“stu_table”,whereClause,whereArgs);
}
第二种办法的代码:
privatevoiddelete(SQLiteDatabasedb){
//删去SQL句子
Stringsql=”deletefromstu_tablewhere_id=6″;
//履行SQL句子
db.execSQL(sql);
}
5、修正数据
修正数据有两种办法:
①调用SQLiteDatabase的update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs)办法
参数1表称号
参数2跟队伍ContentValues类型的键值对Key-Value
参数3更新条件(where字句)
参数4更新条件数组
②编写更新的SQL句子,调用SQLiteDatabase的execSQL履行更新。
榜首种办法的代码:
privatevoidupdate(SQLiteDatabasedb){
//实例化内容值ContentValuesvalues=newContentValues();
//在values中增加内容
values.put(“snumber”,”101003″);
//修正条件
StringwhereClause=”id=?”;
//修正增加参数
String[]whereArgs={String.valuesOf(1)};
//修正
db.update(“usertable”,values,whereClause,whereArgs);
}
第二种办法的代码:
privatevoidupdate(SQLiteDatabasedb){
//修正SQL句子
Stringsql=”updatestu_tablesetsnumber=654321whereid=1″;
//履行SQL
db.execSQL(sql);
}
6、查询数据
在Android中查询数据是经过Cursor类来完成的,当咱们运用SQLiteDatabase.query()办法时,会得到一个Cursor目标,Cursor指向的便是每一条数据。它供给了许多有关查询的办法,具体办法如下:
publicCursorquery(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit);
各个参数的意义阐明:
参数table:表称号
参数columns:列称号数组
参数selection:条件字句,相当于where
参数selectionArgs:条件字句,参数数组
参数groupBy:分组列
参数having:分组条件
参数orderBy:排序列
参数limit:分页查询约束
参数Cursor:返回值,相当于成果集ResultSet
Cursor是一个游标接口,供给了遍历查询成果的办法,如移动指针办法move(),获得列值办法getString()等.
,androidsqlite操作实例,packagecom.locke.android;
importjava.text.SimpleDateFormat;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;
importandroid.content.ContentValues;
importandroid.content.Context;
importandroid.database.Cursor;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteException;
importandroid.database.sqlite.SQLiteOpenHelper;
importandroid.util.Log;
importcom.locke.android.model.User;
publicclassDbHelperextendsSQLiteOpenHelper{
privatefinalstaticStringTAG=”DbHelper”;//程序标志
privatefinalstaticStringDATABASE_NAME=”locke_db”;
privatefinalstaticintDATABASE_VERSION=1;
privatefinalstaticStringTABLE_NAME=”tbl_users”;
privatefinalstaticStringCREATE_TABLE_USERS=
“CREATETABLEIFNOTEXISTStbl_users(idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXT,passwordTEXT,regdatedate)”;
privatefinalstaticStringDROP_TABLE_USERS=
“DROPTABLEIFEXISTtbl_users”;
privatefinalstaticStringFIELD_ID=”id”;
publicfinalstaticStringSQL_RAWQUERY=”selectid,name,password,regdateFROMtbl_users”;
publicDbHelper(Contextcontext){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
publicvoidonCreate(SQLiteDatabasedb){
db.execSQL(CREATE_TABLE_USERS);
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
db.execSQL(DROP_TABLE_USERS);
onCreate(db);
}
/*
*添加一条User记录
*@paramuser用户记录
*@return返回插入的行id
*/
publiclongaddUser(Useruser){
SQLiteDatabasedb=null;
try{
//转化SQLite日期格式
SimpleDateFormatdateFormat=newSimpleDateFormat(“yyyy-MM-ddHH:mm:ss”);
ContentValuesvalues=newContentValues();
values.put(“name”,user.GetName());
values.put(“password”,user.GetPassword());
values.put(“regdate”,dateFormat.format(user.GetRegdate()));
db=this.getWritableDatabase();
longresult=db.insert(TABLE_NAME,null,values);
returnresult;
}catch(SQLiteExceptione){
return-1;
}finally{
if(db.isOpen())
db.close();
}
}
/*
*查询记录
*@return获取到的行记录
*/
publicList<User>queryUsers(){
Cursorc=null;
SQLiteDatabasedb=null;
List<User>result=newArrayList<User>();
try
{
db=this.getReadableDatabase();
c=db.query(TABLE_NAME,newString[]{“id”,”name”,”password”,”regdate”},null,null,null,null,null,”idasc”);
c.moveToFirst();
while(!c.isAfterLast()){
Useruser=newUser();
user.SetId(c.getInt(0));
user.SetName(c.getString(1));
user.SetPassword(c.getString(2));
user.SetRegdate(newDate(c.getString(0)));
result.add(user);
c.moveToNext();
}
returnresult;
}catch(SQLiteExceptione){
Log.e(TAG,e.getMessage());
returnnull;
}finally{
if(!c.isClosed()){
c.close();
}
if(db.isOpen()){
db.close();
}
}
}
/*
*删除一条用户记录
*@return是否删除成功
*/
publicbooleandelete(Useruser)
{
SQLiteDatabasedb=null;
try{
db=this.getWritableDatabase();
Stringwhere=FIELD_ID+”=?”;
String[]whereValue={Integer.toString(user.GetId())};
longresult=db.delete(TABLE_NAME,where,whereValue);
returnresult>0;
}catch(SQLiteExceptione){
returnfalse;
}finally{
if(db.isOpen()){
db.close();
}
}
}
/*
*更新一条记录
*@return是否更新成功
*/
publicbooleanupdate(Useruser){
SQLiteDatabasedb=null;
try{
db=this.getWritableDatabase();
Stringwhere=FIELD_ID+”=?”;
String[]whereValue={Integer.toString(user.GetId())};
ContentValuesvalues=newContentValues();
values.put(“name”,user.GetName());
values.put(“password”,user.GetPassword());
longresult=db.update(TABLE_NAME,values,where,whereValue);
returnresult>0;
}catch(SQLiteExceptione){
returnfalse;
}finally{
if(db.isOpen()){
db.close();
}
}
}
}
Tips:本站所有资源均收集自互联网,分享目的仅供学习参考,资源版权归该资源的合法拥有者所有。
Tips:若本站所发布的资源侵犯到您的合法权益,请及时联系 hqteam@qq.com 删除!
暂无评论内容