通过Sql语句和android封装好的方法控制SQLite数据库增删改查

一、利用sql语句来进行增删改查,那么封装在一个工具包内,需要时直接调用即可。

package com.zhangli.sqlite.dao;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.zhangli.sqlite.PersonSQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

public class SQLiteDao {
    private PersonSQLiteOpenHelper sqLiteOpenHelper;

    public SQLiteDao(Context context) {
        sqLiteOpenHelper = new PersonSQLiteOpenHelper(context);
    }

    /**
     * 添加一条数据
     * @param name 名字
     * @param number 电话
     */
    public void add(String name, String number) {
        SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();
        db.execSQL("insert  into person (name,number) values (?,?)", new String[]{name, number});
        db.close();
    }

    /**
     * 查找一条数据
     * @param name 根据名字
     * @return true 找到了 false没找到
     */
    public boolean find(String name) {
        SQLiteDatabase db = sqLiteOpenHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery("select * from person where name=?", new String[]{name});
        boolean b = cursor.moveToNext();
        cursor.close();
        db.close();
        return b;
    }

    /**
     * 修改一条数据
     * @param name 修改名字
     * @param number 根据电话
     */

    public void update(String name,String number){
        SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();
        db.execSQL("update person set name=? where number=?", new String[]{name, number});
        db.close();
    }

    /**
     * 删除一条数据
     * @param name 根据姓名
     */
    public void delete(String name){
        SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();
        db.execSQL("delete from person where name=?",new String[]{name});
        db.close();
    }


    /**
     * 查找数据库中所有的数据
     * @return 返回persons的lsit
     */
    public List<Person> findAll(){
        List<Person> persons=new ArrayList<Person>();
        SQLiteDatabase db=sqLiteOpenHelper.getReadableDatabase();
        Cursor cursor=db.rawQuery("select *from person",null);
        while(cursor.moveToNext()){
            int id=cursor.getInt(cursor.getColumnIndex("id"));
            String name=cursor.getString(cursor.getColumnIndex("name"));
            String number=cursor.getString(cursor.getColumnIndex("number"));
            Person person=new Person(id,name,number);
            persons.add(person);
        }
        cursor.close();
        db.close();
        return persons;
    }

}

二、利用android已经封装好的方法进去数据库的操作,可以对比看一下:

package com.zhangli.sqlite.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.zhangli.sqlite.PersonSQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

public class SQLiteDao {
    private PersonSQLiteOpenHelper sqLiteOpenHelper;

    public SQLiteDao(Context context) {
        sqLiteOpenHelper = new PersonSQLiteOpenHelper(context);
    }

    /**
     * 添加一条数据
     * @param name 名字
     * @param number 电话
     */
    public long add(String name, String number) {
        SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();
//      db.execSQL("insert  into person (name,number) values (?,?)", new String[]{name, number});
        ContentValues values=new ContentValues();
        values.put("name",name);
        values.put("number",number);
        //id返回的是数据的id,如果返回-1时表示未添加成功
        long id=db.insert("person",null,values);
        db.close();
        return id;
    }

    /**
     * 查找一条数据
     * @param name 根据名字
     * @return true 找到了 false没找到
     */
    public boolean find(String name) {
        SQLiteDatabase db = sqLiteOpenHelper.getReadableDatabase();
//      Cursor cursor = db.rawQuery("select * from person where name=?", new String[]{name});
        Cursor cursor=db.query("person",null,"name=?",new String[]{name},null,null,null);
        boolean b = cursor.moveToNext();
        cursor.close();
        db.close();
        return b;
    }

    /**
     * 修改一条数据
     * @param newName 修改名字
     * @param number 根据电话
     */
    public void update(String newName,String number){
        SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();
//        db.execSQL("update person set name=? where number=?", new String[]{name, number});
        ContentValues values=new ContentValues();
        values.put("name",newName);
        db.update("person",values,"number=?",new String[]{number});
        db.close();
    }

    /**
     * 删除一条数据
     * @param name 根据姓名
     */
    public int  delete(String name){
        SQLiteDatabase db = sqLiteOpenHelper.getWritableDatabase();
//        db.execSQL("delete from person where name=?",new String[]{name});
        int i=db.delete("person","name=?",new String[]{});
        db.close();
        //i返回的是删除的是第几行的数据,返回0表示删除不成功
        return i;
    }


    /**
     * 查找数据库中所有的数据
     * @return 返回persons的lsit
     */
    public List<Person> findAll(){
        List<Person> persons=new ArrayList();
        SQLiteDatabase db=sqLiteOpenHelper.getReadableDatabase();
//        Cursor cursor=db.rawQuery("select *from person",null);
        Cursor cursor=db.query("person",new String[]{"id","name","number"},null,null,null,null,null);
        while(cursor.moveToNext()){
            int id=cursor.getInt(cursor.getColumnIndex("id"));
            String name=cursor.getString(cursor.getColumnIndex("name"));
            String number=cursor.getString(cursor.getColumnIndex("number"));
            Person person=new Person(id,name,number);
            persons.add(person);
        }
        cursor.close();
        db.close();
        return persons;
    }

}


需要的person类:

package com.zhangli.sqlite.dao;

/**
 * Created by scxh on 2016/2/27.
 */
public class Person {
    private int id;
    private String name;
    private String number;

    public Person() {
    }

    public Person(int id, String name, String number) {
        this.id = id;
        this.name = name;
        this.number = number;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}

需要将数据库初始化,定义一个类继承SQLiteOpenHelper。

package com.zhangli.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
    /**
     * 构造方法
     * 数据库的名称   数据库返回的结果集    数据库的版本
     * @param context
     */
    public PersonSQLiteOpenHelper(Context context) {
        super(context, "person.db", null, 1);
    }
    /**
     * 数据库第一次被创建  传进来我们自己创建的数据库
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        //初始化表结构
        db.execSQL("create table person (id Integer primary key autoincrement,name varchar(20),number varchar(20))");
    }

    /**
     * 数据库升級的方法
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

下面是对数据库操作的测试代码:

    public void testAdd(){
        SQLiteDao dao=new SQLiteDao(getContext());
        dao.add("xiaoming","119");
    }

    public void testFind(){
        SQLiteDao dao=new SQLiteDao(getContext());
        boolean b=dao.find("xiaoming");
        Log.e("tag","b:"+b);
    }

    public void testdelete(){
        SQLiteDao dao=new SQLiteDao(getContext());
        dao.delete("xiaoming");
    }

    public void testUpdate(){
        SQLiteDao dao=new SQLiteDao(getContext());
        dao.update("xiaoming","001");
    }

    public void testFindAll(){
        SQLiteDao dao=new SQLiteDao(getContext());
        List<Person> persons=dao.findAll();
        for(Person p: persons){
            int id=p.getId();
            String name=p.getName();
            String number=p.getNumber();
            Log.e("tag","id:"+id+"\n"+"name:"+name+"\n"+"number:"+number);
        }
    }


一个简单的基于AndroidSqlite数据库的操作封装,它有如下的好处:便捷地创建表和增添表字段灵活的数据类型处理通过操作对象来insert或者update表记录支持多种查询方式,支持多表自定义的复杂查询,支持分页查询支持事务快速开始:    1. 设计表:@Table(name="t_user") public class UserModel {     @Table.Column(name="user_id",type=Column.TYPE_INTEGER,isPrimaryKey=true)     public Integer userId;     @Table.Column(name="user_name",type=Column.TYPE_STRING,isNull=false)     public String userName;     @Table.Column(name="born_date",type=Column.TYPE_TIMESTAMP)     public Date bornDate;     @Table.Column(name="pictrue",type=Column.TYPE_BLOB)     public byte[] pictrue;     @Table.Column(name="is_login",type=Column.TYPE_BOOLEAN)     public Boolean isLogin;     @Table.Column(name="weight",type=Column.TYPE_DOUBLE)     public Double weight; }2. 初始化对象:SQLiteDatabase db = context.openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null); DbSqlite dbSqlite = new DbSqlite(db); IBaseDao userDAO = DaoFactory.createGenericDao(dbSqlite, UserModel.class);3. 创建表:userDAO.createTable(); 4. Insert 记录:UserModel user = new UserModel(); user.userName = "darcy"; user.isLogin = true; user.weight = 60.5; user.bornDate = new Date(); byte[] picture = {0x1,0x2,0x3,0x4}; user.pictrue = picture; userDAO.insert(user);5. Update 记录:UserModel user = new UserModel(); user.weight = 88.0; userDAO.update(user, "user_name=?", "darcy");6. 查询://单条结果查询 UserModel user = userDAO.queryFirstRecord("user_name=?", "darcy"); //一般查询 List userList = userDAO.query("user_name=? and weight > ?", "darcy" , "60"); //分页查询 PagingList pagingList = userDAO.pagingQuery(null, null, 1, 3);7. 事务支持:DBTransaction.transact(mDb, new DBTransaction.DBTransactionInterface() {         @Override         public void onTransact() {             // to do                 } };8. 更新表(目前只支持添加字段)@Table(name="t_user" , version=2) //修改表版本 public class UserModel {     //members above...     //new columns     @Table.Column(name="new_column_1",type=Column.TYPE_INTEGER)     public Integer newColumn;     @Table.Column(name="new_column_2",type=Column.TYPE_INTEGER)     public Integer newColumn2; } userDAO.updateTable();缺点和不足:还没支持多对一或者一多的关系没支持联合主键没支持表的外键设计其他...实例:SqliteLookup(Android内查看Sqlite数据库利器): https://github.com/YeDaxia/SqliteLookup 标签:SQLiteUtils
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值