android开发--sqlite数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android开发--sqlite数据库相关的知识,希望对你有一定的参考价值。
一、SQLite简介
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:
1.轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:android。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
二、数据类型
SQLite与其他常见的DBMS的最大不同是它对数据类型的支持。其他常见的DBMS通常支持强类型的数据,也就是每一列的类型都必须预先指定,但是SQLite采用的是弱类型的字段。实际上,其内部仅有下列五种存储类型:
?
NULL: 表示一个NULL值
INTEGER: 用来存储一个整数,根据大小可以使用1,2,3,4,6,8位来存储.
REAL: IEEE 浮点数
TEXT: 按照字符串来存储
BLOB: 按照二进制值存储,不做任何改变.
要注意,这些类型是值本身的属性,而不是列的属性.
但是为了和其他DBMS(以及SQL标准)兼容,在其create table语句中可以指定列的类型,为此,SQLite有个列相似性的概念(Column Affinity). 列相似性是列的属性,SQLite有以下几种列相似性:
TEXT: TEXT列使用NULL,TEXT或者BLOB存储任何插入到此列的数据,如果数据是数字,则转换为TEXT.
NUMERIC: NUMERIC列可以使用任何存储类型,它首先试图将插入的数据转换为REAL或INTEGER型的,如果成功则存储为REAL和INTEGER型,否则不加改变的存入.
INTEGER:和NUMERIC类似,只是它将可以转换为INTEGER值都转换为INTEGER,如果是REAL型,且没有小数部分,也转为INTEGER
REAL: 和NUMERIC类型 只是它将可以转换为REAL和INTEGER值都转换为REAL.
NONE:不做任何改变的尝试.
SQLite根据create table语句来决定每个列的列相似性.规则如下(大小写均忽略):
1. 如果数据类型中包括INT,则是INTEGER
2. 如果数据类型中包括CHAR,CLOB,TEXT则是TEXT
3. 如果数据类型中包括BLOB,或者没有指定数据类型,则是NONE
4. 如果数据类型中包括REAL,FLOA或者DOUB,则是REAL
5. 其余的情况都是NUMERIC
创建android项目,添加类
mess类来构建实体
public class mess { private String lad; private String name; private String messeng; private String date; private String Zhang; private int id; public String getLad() { return lad; } public void setLad(String lad) { this.lad = lad; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMesseng() { return messeng; } public void setMesseng(String messeng) { this.messeng = messeng; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getZhang() { return Zhang; } public void setZhang(String zhang) { Zhang = zhang; } public int getId() { return id; } public void setId(int id) { this.id = id; }
Openhelp类,先继承SQLiteOpenHelper
public class Openhelp extends SQLiteOpenHelper { //创建数据库 private static final String DB_NAME="Text.db"; //数据库版本 private static final int version=1; public Openhelp(Context context) { super(context,DB_NAME,null,version); } //创建表 @Override public void onCreate(SQLiteDatabase db) { Log.i("hi", "没有数据库,创建数据库"); String sql="create table t_message (id integer primary key,tou varchar(50),userName varchar(50),message varchar(50),datetime varchar(50))"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO Auto-generated method stub } }
test类,操作,写方法
public class test { private SQLiteDatabase help; public test(SQLiteDatabase context){ this.help=context; } //添加 public void addmess() { ContentValues con=new ContentValues();//实例化ContentValues con.put("tou",R.drawable.lad); con.put("userName","少年"); con.put("message","过的怎么样"); con.put("datetime","11-29"); help.insert("t_message",null,con); } //删除 public void deletemess(Integer ind) { String whereClause="id=?";//删除的条件 String[] whereArgs={"1"};//删除的参数 help.delete("t_message", whereClause, whereArgs);//执行删除 } //修改 public void updatemess(mess me) { ContentValues con=new ContentValues();//实例化ContentValues con.put("userName","骚年");//添加要更改的字段及内容 String whereClause="id=?";//修改条件 String[] whereArgs={"1"};//修改条件的参数 help.update("t_message",con, whereClause, whereArgs);//执行修改 } //查询 public List<mess> find() { List<mess> list=new ArrayList<mess>(); Cursor cur=help.query("t_message",null,null,null,null,null,null);//查询并获得游标 if(cur.moveToFirst()){ //判断游标是否为空 for (int i = 0; i <cur.getCount(); i++) { cur.moveToNext(); mess ss=new mess();//实体类 ss.setLad(cur.getString(cur.getColumnIndex("tou"))); ss.setName(cur.getString(cur.getColumnIndex("userName"))); ss.setMesseng(cur.getString(cur.getColumnIndex("message"))); ss.setDate(cur.getString(cur.getColumnIndex("datetime"))); ss.setId(cur.getInt(cur.getColumnIndex("id"))); list.add(ss); } } help.close(); return list; } }
在MainActivity类运行
public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.deng); Openhelp help=new Openhelp(MainActivity.this); SQLiteDatabase base=help.getWritableDatabase(); test st=new test(base); st.addmess();//运行的方法,增,删,改
在执行完上面的代码后,系统就会在/data/data/[PACKAGE_NAME]/databases目录下生成一个“test.db”的数据库文件,如图:
查看方式:打开cmd,找到安装目录如我的 E:\\adt-bundle-windows-x86_64-20140702\\sdk\\platform-tools
以上是关于android开发--sqlite数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何在片段内的 recylerview 列表中显示 SQLite 数据库数据?
java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段
当sqlite android片段中的数据更改或删除时如何刷新recyclerview?