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关键字后面的部分。

posted @ 2014-05-04 02:00  宝贝,我永远都在  阅读(231)  评论(0)    收藏  举报