目录
二 、SQLiteDatabase、SQLiteOpenHelper、Cursor
一、关于SQLite
SQLite体积小,对于简单开发很方便,而且很多软件都有自带。而且开发支持也多。SQLite的核心引擎本身不依赖第三方的软件,在我们开发时直接使用即可。
二 、SQLiteDatabase、SQLiteOpenHelper、Cursor
- 创建SQLiteOpenHelper 之后在类创建数据库,创建表等等
- 创建SQLiteDatabase 之后操作数据库
- ContentValues是唯一插入数据库的数据类型 如果你使用对象就必须将Object转成ContentValues
- 数据库的数据提取返回cursor,之后手动的将cursor将数据取出来把数据封装成Object之后再使用
SQLiteDatabase:
SQLiteDatabase是SQLite数据库类, 用于创建数据库.
SQLiteOpenHelper:
SQLiteOpenHelper这个类用来管理数据库。包括创建 和更新 数据库。所以我们只要继承SQLiteOpenHelper类来就可以对数据库进行管理。
Cursor:
SQLite查询的结果是返回一个游标(Cursor)。类似于我们在java学习数据库操作中的ResultSet类差不多, rawQuery(String sql, String[] selectionArgs)。通过移动游标来进行数据的查询。
三、实现增删查改
使用数据库前提是有一个数据库, 要进行数据操作就要对表进行操作
创建SQLite数据库,首先的创建一个 SQLiteOpenHeper 的子类并实现相应的方法(如下)。
创建数据库:
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CreateStudentInfo); //此处的CreateStudentInfo是创建表的语句
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
在我们使用这个类时, 构造方法就会新建数据库
public DBHelper(Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
使用数据库
new了SQLiteOpenHeper的子类后新建数据库就已经完成. 然后通过getReadAbleDatabase()或getWriteableDatabase()方法来获取一个数据库实例。可以在onCreate()方法中对数据库进行操作。不过为了便于管理, 最好重新写一个专门的工具类。
新建表:
其实在onCreate()方法中就是在创建表:
public static final String SqlCreatTable = "create table student ("
+ "number integer primary key, "
+ "gender text , "
+ "name text,"
+ "birth text,"
+ "native_place text,"
+ "specialty text,"
+ "phone text)";
db.execSQL(SqlCreatTable );
插入数据:
public void add(List<Person> persons){
db.beginTransaction();
try{
for (Person p:persons){
db.execSQL("INSERT INTO person VALUES(null,?,?,?)",
new Object[]{p.getName(),p.getAge(),p.getInfo()});
}
db.setTransactionSuccessful();
}catch(Exception e){
e.printStackTrace();
}finally {
db.endTransaction();
}
}
删除数据(按name字段删除):
public void deleteOldPerson(Person p){
db.delete("person","name=?",new String[]{p.getName()});
}
查询数据:
用cursor查询,在按列读取cursor的每一组数据。
public List<Person> findAllPerson(){
ArrayList<Person> persons = new ArrayList<Person>();
Cursor c = db.rawQuery("SELECT * FROM person", null);
while(c.moveToNext()){
Person p = new Person();
p.set_id(c.getInt(c.getColumnIndex("_id")));
p.setName(c.getString(c.getColumnIndex("name")));
p.setAge(c.getInt(c.getColumnIndex("age")));
p.setInfo(c.getString(c.getColumnIndex("info")));
persons.add(p);
}
c.close();
return persons;
}
更新数据:
还是根据name字段更新,数据是一个list形式封装好的。
public void update(Person p){
ContentValues cv = new ContentValues();
cv.put("age",p.getAge());
cv.put("info",p.getInfo());
db.update("person",cv,"name=?",new String[]{p.getName()});
}
四、效果图
五、项目地址
项目地址: SQLiteLearn
Github:SQLiteLearn