8.安卓.SQLITE数据库的创建与操作
package com.example.database;
import java.util.ArrayList;
import java.util.List;
import com.example.entites.Student;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DataBase extends SQLiteOpenHelper {
public DataBase(Context context) {
super(context, "database", null, 2);
}
//第一次创建数据库会调用这个方法
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE student (studentid integer primary key autoincrement, name varchar(20), age INTEGER)");
}
//更新版本的时候会调用这个方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("ALTER TABLE student ADD phone VARCHAR(12) NULL");
}
//增加
public void add(Student stu)
{
SQLiteDatabase sd = this.getWritableDatabase();
sd.execSQL("insert into student(name,age,phone) values (?,?,?)",new Object[]{ stu.getName(),stu.getAge(),stu.getPhone()});
}
//删除
public void delete(Student stu)
{
SQLiteDatabase sd = this.getWritableDatabase();
sd.execSQL("delete from student where studentid = ?",new Object[]{stu.getStudentId()});
}
//改
public void update(Student stu)
{
SQLiteDatabase sd = this.getWritableDatabase();
sd.execSQL("update student set name=?,age=?,phone=? where studentid=?",new Object[]{stu.getName(),stu.getAge(),stu.getPhone(),stu.getStudentId()});
}
//查
public List<Student> GetAll()
{
SQLiteDatabase sd = this.getReadableDatabase();
Cursor cur = sd.rawQuery("select * from student", null);
Student stu = null;
List<Student> list = new ArrayList<Student>();
while (cur.moveToNext()) {
stu = new Student();
stu.setStudentId(cur.getInt(cur.getColumnIndex("studentid")));
stu.setName(cur.getString(cur.getColumnIndex("name")));
stu.setAge(cur.getInt(cur.getColumnIndex("age")));
stu.setPhone(cur.getString(cur.getColumnIndex("phone")));
list.add(stu);
}
cur.close();
return list;
}
//分页查询
public List<Student> GetAll_Fy(int offset, int maxResult)
{
SQLiteDatabase sd = this.getReadableDatabase();
Cursor cur = sd.rawQuery("select * from student limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)});
Student stu = null;
List<Student> list = new ArrayList<Student>();
while (cur.moveToNext()) {
stu = new Student();
stu.setStudentId(cur.getInt(cur.getColumnIndex("studentid")));
stu.setName(cur.getString(cur.getColumnIndex("name")));
stu.setAge(cur.getInt(cur.getColumnIndex("age")));
stu.setPhone(cur.getString(cur.getColumnIndex("phone")));
list.add(stu);
}
cur.close();
return list;
}
//分页查询,返回Cursor
public Cursor GetCursor_Fy(int offset, int maxResult)
{
SQLiteDatabase sd = this.getReadableDatabase();
Cursor cur = sd.rawQuery("select studentid as _id,* from student limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)});
return cur;
}
//查询总数
public Long GetAllCount()
{
SQLiteDatabase sd = this.getReadableDatabase();
Cursor cur = sd.rawQuery("select COUNT(1) from student", null);
cur.moveToFirst();
Long count = cur.getLong(0);
cur.close();
return count;
}
//增加
public void add_testSw(Student stu,Student s)
{
SQLiteDatabase sd = this.getWritableDatabase();
sd.beginTransaction();
try {
sd.execSQL("insert into student(name,age,phone) values (?,?,?)",new Object[]{ stu.getName(),stu.getAge(),stu.getPhone()});
sd.execSQL("insert into student(name,age,phone) values (?,?,?)",new Object[]{ stu.getName(),stu.getAge(),stu.getPhone()});
sd.setTransactionSuccessful();//默认情况下是false,这里设置为true,表示需要提交
} catch (SQLException e) {
e.printStackTrace();
}finally{
sd.endTransaction();
}
}
public SQLiteDatabase getSQLiteDatabase()
{
return this.getWritableDatabase();
}
}
利用系统API进行sql操作
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "传智播客");
values.put("age", 4);
long rowid = db.insert(“person”, null, values);//返回新添记录的行号,与主键id无关
delete()方法的使用:
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete("person", "personid<?", new String[]{"2"});
db.close();
上面代码用于从person表中删除personid小于2的记录。
update()方法的使用:
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“name”, “传智播客”);//key为字段名,value为值
db.update("person", values, "personid=?", new String[]{"1"});
db.close();
query()方法实际上是把select语句拆分成了若干个组成部分,然后作为方法的输入参数:
SQLiteDatabase db = databaseHelper.getWritableDatabase();
Cursor cursor = db.query("person", new String[]{"personid,name,age"}, "name like ?", new String[]{"%传智%"}, null, null, "personid desc", "1,2");
while (cursor.moveToNext()) {
int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
String name = cursor.getString(1);//获取第二列的值
int age = cursor.getInt(2);//获取第三列的值
}
cursor.close();
db.close();
上面代码用于从person表中查找name字段含有“传智”的记录,匹配的记录按personid降序排序,对排序后的结果略过第一条记录,只获取2条记录。
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义:
table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
columns:要查询出来的列名。相当于select语句select关键字后面的部分。
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:相当于select语句group by关键字后面的部分
having:相当于select语句having关键字后面的部分
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。

浙公网安备 33010602011771号