文档章节

SqliteOpenHelper封装的增删改查方法(16)

f
 flyqilong
发布于 2016/02/21 21:02
字数 481
阅读 9
收藏 0
import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.Sqlutil.MySqliteOpenHelper;

/**
 * studentinfo --> Student实体 --->StudentService 对Student实体的操作类(增删改查)
 * student2.db: data/data/{包名}/database/xxx.db 面向对象的封装操作类
 */
public class StudentService {
	private MySqliteOpenHelper dbhelper;

	// 除了用execSQL()进行增删改外,另外SqliteOpenHelper封装了delete(),insert(),update()方法
	// 面向对象的封装操作类
	public StudentService(Context context) {
		dbhelper = new MySqliteOpenHelper(context);
	}

	// 查找所有
	public List<Student> findAllStudents() {
		List<Student> list = new ArrayList<Student>();
		// dbHelper.getReadableDatabase() : 如果空间不足,不能写,只能读
		// dbHelper.getWritableDatabase(); 如果空间不足,既不能写,也不能读(报错)
		SQLiteDatabase db = dbhelper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select*from studentinfo", null);
		while (cursor.moveToNext()) {
			// 按以下方式写时要注意数据库顺序
			int sid = cursor.getInt(0);
			String sname = cursor.getString(1);
			String sex = cursor.getString(2);
			int score = cursor.getInt(3);
			Student stu = new Student(sid, sname, sex, score);
			list.add(stu);
		}
		cursor.close();
		db.close();
		return list;
	}

	// 添加
	public long add(Student student) {
		SQLiteDatabase db = dbhelper.getReadableDatabase();
		ContentValues values = new ContentValues();
		values.put("sname", student.getSname());
		values.put("sex", student.getSex());
		values.put("score", student.getScore());
		long row = db.insert("studentinfo", null, values);
		// 插入成功后返回的是影响的主键
		db.close();
		return row;

	}

	// 更新
	public int update(ContentValues values, String whereClause,
			String[] whereArgs) {
		SQLiteDatabase db = dbhelper.getReadableDatabase();
		int row = db.update("studentinfo", values, whereClause, whereArgs);
		db.close();
		return row;// 返回的是受影响的行

	}

	// 删除
	public int delete(String whereClause, String[] whereArgs) {
		SQLiteDatabase db = dbhelper.getReadableDatabase();
		int row = db.delete("studentinfo", whereClause, whereArgs);
		db.close();
		return row;// 返回的是受影响的行
	}
}
//SQLiteOpenHelper类
public class MySqliteOpenHelper extends SQLiteOpenHelper {
	
	private static final String DBNAME = "student2.db";
	
	private static final int VERSION = 1;// 版本可以自己取

	public MySqliteOpenHelper(Context context) {
		super(context, DBNAME, null, VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// 创建数据库表,首次升级时调用,初始化一些数据
		String sql = "create table studentinfo "
				+ " (sid integer primary key autoincrement not null,"
				+ " sname varchar(30) not null," + " sex varchar(2) not null,"
				+ " score integer not null)";
		db.execSQL(sql);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// 大于旧版本时,就升级
		if (newVersion > oldVersion) {
			db.execSQL("drop table if exists studentinfo ");
			// 实际操作是先备份数据,再进行删除升级
		}
	}

}


© 著作权归作者所有

f
粉丝 3
博文 93
码字总数 53900
作品 0
Android工程师
私信 提问
开源中国 OsChina Android 客户端源码分析(8)数据库Sqlite

1开源中国客户端使用的数据库部分的源码在net.oschina.app.db包下,两个类一个是用于管理数据库的创建类DatabaseHelper,继承SQLiteOpenHelper,另一个是用于数据库的增删改查的工具类NoteD...

姬鑫
2015/08/15
0
0
Kotlin入门(26)数据库ManagedSQLiteOpenHelper

共享参数毕竟只能存储简单的键值对数据,如果需要存取更复杂的关系型数据,就要用到数据库SQLite了。尽管SQLite只是手机上的轻量级数据库,但它麻雀虽小、五脏俱全,与Oracle一样存在数据库的...

aqi00
2018/10/19
0
0
不会点SQLite,都不好意思说自己是开发的

一、为什么要会点SQLite? SQLite作为一款轻量级的关系型数据库,占用的资源特别少,所以其应用场景也是特别的多。在移动开发中,我们经常会有将数据存储在本地的需求,此时SQLite将是我们最...

silencezwm
2018/07/03
0
0
SQLite数据库创建时自定义路径

前言 在新建数据库sqlite的时候,我们已经知道了数据库默认路径为 那么,如果我们想在创建数据库时,自定义一个自己的路径该如何处理呢,需要涉及到三步 自定义Context,重写sqlite存储路径 ...

奔跑的佩恩
2017/11/21
0
0
CI(CodeIgniter )封装自定义Restful控制器

RestfulApi的官方定义这里不再赘述,我个人给他定义就是,把一个表的增删改查接口封装起来,提供统一的接口给调用者。 如果是写API接口,表的增删改查何其之多,基本也都一样,我一开始也是每...

满损谦益
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

The /usr/local/mysql/data directory is not owned by the 'mysql' to '_mysql' user

20190720 经过前两天折腾环境,重装了 apache 和 mysql 之后,今天调试程序是突然发现,本机的 mysql 起不来了! 在启动面板上,显示有这样一行小字 (抱歉!光顾着解决问题,没有记录下来图片...

wwzzhh166
4分钟前
2
0
centos安装增强功能出现kernel headers not found for target kernel解决办法

最近新安装一个centos虚拟机,在安装增强功能的时候出现了,kernel headers not found for target kernel的错误。特记下我的解决方案。 1.update kernel yum update kernel -y 2.Install the...

mbzhong
4分钟前
0
0
大发最好邀请码80006032

大发最好邀请码80006032

非常高大发
13分钟前
0
0
最好邀请码分享05000199

q77810527我其实想写这段故事很久了,但是一直没有勇气,过去尘封的往事虽如刺扎在心里,隐隐作痛,但真正鼓足勇气写下它的时候,突然发现,一切已平淡得如每天的太阳朝起夕落。曾经的,早已...

大发邀请码05000199
16分钟前
0
0
solr实例

需求:使用Solr实现电商网站中商品信息搜索功能,可以根据关键字、分类、价格搜索商品信息,也可以根据价格进行排序,并且实现分页功能。 一.架构设计:1.solr服务器 2.自己开发的应用(2.1...

klmkom
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部