设为首页 收藏本站
查看: 1168|回复: 0

[经验分享] 有关Android SQLite编程的一些知识

[复制链接]

尚未签到

发表于 2016-11-30 10:41:00 | 显示全部楼层 |阅读模式
  有关Android SQLite编程的一些知识
  因为Android的系统的热门,数据库SQLite也热起来了。其实SQLlite数据不仅仅应用于Android,在PC机器WINDOWS和WINDOWS CE里也有广泛的应用。之所以广泛用在手机操作系统里,主要是因为它是轻量级的。
  SQLite 数据库功能非常强大,使用起来也非常方便,SQLite数据库的一般操作包括:创建数据库、打开数据库、创建表、向表中添加数据、从表中删除数据、修改表中的数据、关闭数据库、删除指定表、删除数据库和查询表中的某条数据。
  
下面我们分别来学习这些基本操作。
  1.创建和打开数据库
在Android 中创建和打开一个数据库都可以使用openOrCreateDatabase 方法来实现,因为它会自动去检测是否存在这个数据库,如果存在则打开,不过不存在则创建一个数据库;创建成功则返回一个 SQLiteDatabase对象,否则抛出异常FileNotFoundException。下面我们来创建一个名为”MyProgram_6_05.db”的数据库,并返回一个SQLiteDatabase对象 mSQLiteDatabase。
  mSQLiteDatabase = this.openOrCreateDatabase("MyProgram_6_05.db", MODE_PRIVATE, null);

  2.创建表
一个数据库中可以包含多个表,我们的每一条数据都保存在一个指定的表中,要创建表可以通过execSQL 方法来执行一条SQL语句。execSQL能够执行大部分的SQL语句,下面我们来创建一个名为table1 且包含3个字段的表。 具体代码如下:
  String CREATE_TABLE = "CREATE TABLE table1 (_id INTEGER PRIMARY KEY, num INTEGER, data TEXT)";
mSQLiteDatabase.execSQL(CREATE_TABLE);

  3.向表中添加一条数据
可以使用insert 方法来添加数据,但是 insert 方法要求把数据都打包到 ContentValues 中, ContentValues 其实就是一个Map, key值是字段名称, Value值是字段的值。通过 ContentValues 的 put 方法就可以把数据放到ContentValues中,然后插入到表中去。具体实现如下:
  ContentValues cv = new ContentValues();
cv.put(TABLE_NUM, 1);
cv.put(TABLE_DATA, "测试数据");
mSQLiteDatabase.insert(TABLE_NAME, null, cv);

//这样同样可以使用execSQL方法来执行一条“插入”的SQL语句,代码如下:
String INSERT_DATA = "INSERT INTO table1 (_id, num, data) values (1, 1, '通过SQL语句插入')" ;
mSQLiteDatabase.execSQL(INSERT_DATA);

  4.从表中删除数据
要删除数据可以使用delete 方法,下面我们删除字段 “_id” 等于1的数据,具体代码如下:
  mSQLiteDatabase.delete("MyProgram_6_05.db", " where_id="+0, null);
通过 execSQL方法执行SQL语句删除数据如下:
String DELETE_DATA = "DELETE FROM table1 WHERE _id=1";
mSQLiteDatabase.execSQL(DELETE_DATA);

  5.修改表中的数据
如果添加了数据后发现数据有误,这时需要修改这个数据,可以使用updata方法来更新一条数据。下面我们来修改 “num” 值为0的数据,具体代码如下:
  ContentValues cv = new ContentValues();
cv.put(TABLE_NUM, 3);
cv.put(TABLE_DATA, "修改后的数据");
mSQLiteDatabase.update("table1" cv, "num " + "=" + Integer.toString(0), null);

  6.关闭数据库
关闭数据库很重要,也是大家经常容易忘记的。关闭的方法很简单,直接使用SQLiteDatabase 的 close 方法。具体代码如下:
  1
  mSQLiteDatabase.close();

  7.删除指定表
这里我们使用execSQL方法来实现,具体代码如下:
  1
  mSQLiteDatabase.execSQL("DROP TABLE table1");

  8.删除数据库
要删除一个数据库,直接使用deleteDatabase 方法即可,具体代码如下:
  1
  this.deleteDatabase("MyProgram_6_05.db");

  9.查询表中的某条数据
在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下:
  方法 说明
move 以当前的位置为参考,将Cursor移动到指定的位置,成功返回true, 失败返回false
  moveToPosition 将Cursor移动到指定的位置,成功返回true,失败返回false
  moveToNext 将Cursor向前移动一个位置,成功返回true,失败返回false
  moveToLast 将Cursor向后移动一个位置,成功返回true,失败返回 false。
  movetoFirst 将Cursor移动到第一行,成功返回true,失败返回false
  isBeforeFirst 返回Cursor是否指向第一项数据之前
  isAfterLast 返回Cursor是否指向最后一项数据之后
  isClosed 返回Cursor是否关闭
  isFirst 返回Cursor是否指向第一项数据
  isLast 返回Cursor是否指向最后一项数据
  isNull 返回指定位置的值是否为null
  getCount 返回总的数据项数
  getInt 返回当前行中指定的索引数据
  下面我们就是用Cursor来查询数据库中的数据,具体代码如下:
  
Cursor cur = mSQLiteDatabase.rawQuery("SELECT * FROM table", null);
if( cur != null ){
if( cur.moveToFirst() ){
do{
int numColumn = cur.getColumnIndex("num");
int num = cur.getInt(numColumn);
}while( cur.moveToNext());
}
}

删除修改等操作
  如果一个应用程序中的数据库无需提供对外访问,实现一个继承自SQLiteOpenHelper的数据库帮助类,以支持数据库的创建和版本的更新, 这些SQLiteDataBase所不能实现的.但是SQLiteDataBase却具备一些非常重要的对数据库进行操作的方法,数据表的创建删除、数据 的增删改查都是通过它实现的。
执行增删改操作方法 :db.execSQL(sql); 或者db.insert()、db.delete()、db.update(),并且包括数据表的创建和删除等等也可以通过execSQL实现
  
//创建表
public
boolean createTable(){
SQLiteDatabase db=dbHelper.getWritableDatabase();
String sql="CREATE TABLE IF NOT EXISTS "+TABLE_NAME+"(ID INTEGER PRIMARY KEY,Name VARCHAR,Age INTEGER)";
try{
db.execSQL(sql);
return
true;
}catch(SQLException ex){
Log.d(tag,
"create table failure");
return
false;
}
}
//添加数据
public
boolean addData(){
String name=etname.getText().toString();
String age=etage.getText().toString();
SQLiteDatabase db=dbHelper.getWritableDatabase();
String sql="insert into "+TABLE_NAME+"(name,age) values ('"+name+"','"+age+"')";
try{
db.execSQL(sql);
return
true;
}catch(SQLException ex){
Log.d(tag,
"add data failure");
return
false;
}
}
//修改
public
boolean updateData(){
SQLiteDatabase db=dbHelper.getWritableDatabase();
String sql="update "+TABLE_NAME+" set age='2' where name like 'cb'";
Object[] bindArgs={"cb"};
try{
db.execSQL(sql, bindArgs);
return
true;
}catch(SQLException ex){
Log.d(tag,
"update data failure");
return
false;
}
}执行数据查询方法:db.rawQuery(sql, selectionArgs); 或者db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);


//查询
public
void selectData(){
SQLiteDatabase db=dbHelper.getReadableDatabase();
String[] columns={"name"};
Cursor cursor=db.query(TABLE_NAME, columns,
null,
null,
null,
null,
null);
String names="";
while(cursor.moveToNext()){
int c=cursor.getColumnIndexOrThrow("Name");
String name=cursor.getString(c);
//< = >
//String name=cursor.getString(0);//只查询了一列
if(names==""){
names=name;
}else{
names=names+"\n"+name;
}
}
tvname.setText(names);
//另外一种查询方法
//String sql="select name from "+TABLE_NAME;
//Curosr cursor=db.rawQuery(sql, null);
}


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307627-1-1.html 上篇帖子: 如何在QML使用Sqlite数据库 下篇帖子: sqlite时间函数及时间处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表