Android 连接SQLite
Android的页面显示的数据主要是从数据库中获取数据的,android开发中使用的是SQLite数据库。
SQLite的优点:
-
轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能, 而且那个动态库的尺寸想当小。 -
独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。 -
隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等) 都包含在一个文件夹内,方便管理和维护。 -
跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统 也是能够运行,比如:Android。 -
多语言接口
SQLite 数据库支持多语言编程接口。 -
安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。 这意味着多个进程可以在同一时间从同一数据库读取数据, 但只能有一个可以写入数据。
在Android中连接SQLite需要先创建一个类,并且这个类extends SQLiteOpenHelper,代码如下:
package com.example.sql; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class MySQLDatabase extends SQLiteOpenHelper { private static final String db_name = "myDatabse";//自定义的数据库名; private static final int version =1;//版本号 public MySQLDatabase(Context context) { super(context, db_name, null, version); } //该方法会自动调用,首先系统会检查该程序中是否存在数据库名为‘myDatabase’的数据库,如果存在则不会执行该方法,如果不存在则会执行该方法。 @Override public void onCreate(SQLiteDatabase arg0) { String sql ="create table wx_user(" + "id int primary key," + "name varchar(30)," + "tou varchar(20)," + "content varchar(50)," + "dateTime varchar(30)" + ")"; arg0.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO Auto-generated method stub } }
SQLiteOpenHelper是SQLiteDatabase的一个帮助类, 用来管理数据库的创建和版本的更新。 一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。 常用的方法有:
onCreate(SQLiteDatabase db)
创建数据库时调用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)
版本更新时调用
getReadableDatabase()
创建或打开一个只读数据库
getWritableDatabase()
创建或打开一个读写数据库
这里创建了数据库类,接下来是往数据库中插入数据;
//实例化刚才上面我们创建的那个类 MySQLDatabase mySQLDatabase = new MySQLDatabase(MainActivity.this); /*在通过getReadableDatabase()方法 或者通过getWritableDatabase() 获得SQLDatabse类的对象;通过SQLDatabase类的对象来对数据进行操作;*/ SQLiteDatabase sqlDatabase = mySQLDatabase.getReadableDatabase();
SQLDatabase类的常用方法:
-
(long) insert(String table,String nullColumnHack,ContentValues values)
-
(int) delete(String table,String whereClause,String[] whereArgs)
删除数据行的便捷方法 -
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新数据行的便捷方法
-
(void) close()
关闭数据库 -
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
查询指定的数据表返回一个带游标的数据集 -
(Cursor) rawQuery(String sql, String[] selectionArgs)
运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入) -
(void) execSQL(String sql)//这个是执行SQL语句(sql字符串可以是select,delete,或者insert,update中的任意语句)
//往数据库中插入数据的代码,在这里我使用的是execSQL(sql); for(int i=0;i<20;i++){ String sql = "insert into wx_user(id,name,tou,content,dateTime) values("+i+",'张校花"+i+"','aa','你今天会被打','11月19日')"; sqlDatabase.execSQL(sql);
}
往数据库中参入数据之后,我们再将数据库中的数据取出来看看;我们需要先创建一个实体类;
package com.example.entiy; public class unserInFo { private int id; private String name; private String dateTime; private String tou; private String content; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDateTime() { return datetime; } public void setDateTime(String dateTime) { this.dateTime= dateTime; } public String getTou() { return tou; } public void setTou(String tou) { this.tou = tou; } @Override public String toString() { return "unserInFo [id="+id+,"name=" + name + ", dataTime=" + dataTime+ ", tou=" + tou+ "]"; } public unserInFo() { super(); // TODO Auto-generated constructor stub } }
获取数据
//定义一个集合用来存放所有的结果 List<unserInFo> user = new ArrayList<unserInFo>(); //通过游标来获取表wx_user的信息, Cursor c=sqlDatabase.query("wx_user", null, null, null, null, null, null); //先判断是否有第一条数据(ic.moveToFirst()将游标移到第一条数据,如果没有第一条数据则返回false,否则返回true) if(c.moveToFirst()){ //通过getCount()来决定循环的次数getCount()是游标的总数量。 for (int i = 0; i<c.getCount();i++) { unserInFo uif = new unserInFo(); //将游标移动到下一条数据 c.moveToNext(); uif.setId(c.getInt(c.getColumnIndex("id"))); uif.setLastdate(c.getString(c.getColumnIndex("dateTime"))); uif.setName(c.getString(c.getColumnIndex("name"))); uif.setZhao(c.getString(c.getColumnIndex("tou"))); uif.setContent(c.getString(c.getColumnIndex("content"))); user.add(uif); } }
//最后数据库中获取到的数据就全部存放到user集合中了,我们只需要遍历user就能显示数据了。