安卓开发-实现数据库的CRUD操作

1.创建DBOpenHelper类继承SQLiteOpenHelper:

public class DBOpenHelper extends SQLiteOpenHelper implements BaseColumns {
    public static final String DB_NAME = "contact.db";//数据库的名称
    public static final int DB_VERSION = 6;//数据库的版本

    public static final String _TABLENAME = "_contactinfo";//表名
    public static final String _USERNAME = "_username";//属性名
    public static final String _PHONE = "_phone";//属性名


    //通过传入context对象创建数据库对象
    public DBOpenHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);

    }

    //当数据库当调用函数getWritableDatabase()/getReadableDatabase()且数据库database文件不在时执行
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + _TABLENAME + "(" + _ID
                + " integer primary key autoincrement, " + _USERNAME
                + " text, " + _PHONE + " text)");
    }

    //版本更新时执行
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

}

2.定义CRUD操作的接口IContactDao:

public interface IContactDao {
    //向表中插入一条数据
    boolean addContact(String username, String phone);

    //通过指定phone删除表中的一条数据
    boolean deleteContact(String phone);

    //通过phone更新一条数据
    boolean updateContact(String username, String phone);

    //通过phone查询该条数据
    String queryContact(String phone);
}

3.定义实现接口IContactDao的类ContactDaoImpl和ContactGoogleDaoImpl:

public class ContactDaoImpl implements IContactDao {
    private static DBOpenHelper mHelper;

    public ContactDaoImpl(Context c) {
        mHelper = new DBOpenHelper(c);
    }

    public boolean addContact(String username, String phone) {
        SQLiteDatabase database = mHelper.getWritableDatabase();

        database.execSQL("insert into " + DBOpenHelper._TABLENAME
                + " ("+DBOpenHelper._USERNAME+","+DBOpenHelper._PHONE+") values (?, ?)", new String[] { username,
                phone });
        return true;
    }

    public boolean deleteContact(String phone) {
        SQLiteDatabase database = mHelper.getWritableDatabase();

        database.execSQL("delete from " + DBOpenHelper._TABLENAME
                + " where "+DBOpenHelper._PHONE+" = ?", new String[] { phone });
        return true;
    }

    public boolean updateContact(String username, String phone) {
        SQLiteDatabase database = mHelper.getWritableDatabase();

        database.execSQL("update " + DBOpenHelper._TABLENAME
                + " set "+DBOpenHelper._USERNAME+" = ?, "+DBOpenHelper._PHONE+" = ?", new String[] { username,
                phone });
        return true;
    }

    public String queryContact(String phone) {
        SQLiteDatabase database = mHelper.getWritableDatabase();

        Cursor cursor = database.rawQuery("select "+DBOpenHelper._USERNAME+" from "+DBOpenHelper._TABLENAME+" where "+DBOpenHelper._PHONE+" = ?",
                new String[] { phone });
        if(cursor.moveToNext()){
            String username = cursor.getString(0);
            Log.v("aaa", username);
        }

        return null;
    }

}









public class ContactGoogleDaoImpl implements IContactDao {
    private DBOpenHelper dbHelper;

    public ContactGoogleDaoImpl(Context c) {
        dbHelper = new DBOpenHelper(c); 
    }

    public boolean addContact(String username, String phone) {
        SQLiteDatabase database = dbHelper.getWritableDatabase();


        ContentValues values = new ContentValues();
        values.put(DBOpenHelper._USERNAME, username);
        values.put(DBOpenHelper._PHONE, phone);
        Long rawNum = database.insert(DBOpenHelper._TABLENAME, null, values);

        return rawNum != -1L;
    }

    public boolean deleteContact(String phone) {
        SQLiteDatabase database = dbHelper.getWritableDatabase();

        int rawNum = database.delete(DBOpenHelper._TABLENAME,
                DBOpenHelper._PHONE + "= ?", new String[] { phone });
        return rawNum != 0;
    }

    public boolean updateContact(String username, String phone) {
        SQLiteDatabase database = dbHelper.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(DBOpenHelper._USERNAME, username);

        int rawNum = database.update(DBOpenHelper._TABLENAME, values,
                DBOpenHelper._PHONE + "= ?", new String[] { phone });

        return rawNum != 0; 
    }

    public String queryContact(String phone) {
        String result = "";

        SQLiteDatabase database = dbHelper.getReadableDatabase();
        Cursor cursor = database.query(DBOpenHelper._TABLENAME, new String[] {
                DBOpenHelper._USERNAME, DBOpenHelper._PHONE },
                DBOpenHelper._PHONE + "= ?", new String[] { phone }, null, null,
                null);

        String usernameValue = "";
        String phoneValue = "";
        while(cursor.moveToNext()){
            int usernameIndex = cursor.getColumnIndex(DBOpenHelper._USERNAME);
            usernameValue = cursor.getString(usernameIndex);

            int phoneIndex = cursor.getColumnIndex(DBOpenHelper._PHONE);
            phoneValue = cursor.getString(phoneIndex);
        }
        result += usernameValue;
        result += phoneValue;

        return result;
    }

}

4.在MainActivity中调用ContactDaoImpl中的方法:

public class MainActivity extends Activity {
    private IContactDao mContactDao = new ContactGoogleDaoImpl(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void addContactClick(View v){
        boolean ifChanged = mContactDao.addContact("张三", "111");
        Toast.makeText(this, ifChanged ? "添加成功" : "添加失败", Toast.LENGTH_SHORT).show();
    }

    public void deleteContactClick(View v){
        boolean ifChanged = mContactDao.deleteContact("111");
        Toast.makeText(this, ifChanged ? "删除成功" : "删除失败", Toast.LENGTH_SHORT).show();
    }

    public void updateContactClick(View v){
        boolean ifChanged = mContactDao.updateContact("李四", "111");
        Toast.makeText(this, ifChanged ? "修改成功" : "更新失败", Toast.LENGTH_SHORT).show();
    }

    public void queryContactClick(View v){
        String result = mContactDao.queryContact("111");
        Toast.makeText(this, result, Toast.LENGTH_SHORT).show();

    }

}

5.Sqlite工具的使用:

1.位置:sdk/tools/sqlite3.exe

2.使用:
    2.1:cmd中,adb -s 模拟器名称  shell
    2.2:cd /data/data/包名/databases
    2.3:sqlite3 数据库文件名(contact.db)
            .tables : 查看所有表
            sql语句  :执行
            sqlite.quit:退出
一.创建一个DataBaseHelper DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 1.getReadableDatebase(),getWriteableDatabase()可以获取SQLiteDatabase对象,通过 2.提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 A、 在SQLiteOpenHelper的子类当中,必须要有的构造函数 B、该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDataBase对象的时候onCreate 二、创建一个实体person类并且给字段和封装 三、创建一个业务类对SQL的CRUD操作 1.getWritableDatabase()和getReadableDatabase()的区别 ,两个方法都可以获取一个用于操作数据库的SQLiteDatabase实例 2.execSQL(增,删,改都是这个方法)和close();android内部有缓存可关闭也不关闭也行,查询rawQuery是方法 3.在分页有到Cursor(游标)取游标下一个值cursor.moveToNext(),用游标对象接数据 "select * from person limit ?,?" person不能加上where 关键字 4.在删除注意:sb.deleteCharAt(sb.length() - 1); 四、AndroidCRUD业务对SQLite的CRUD操作 1.ContentValues对象的使用 2.android内部insert添加数据的方法,而且values这个不给值也必须要执行,而主键是不是null的其他字段的值是为null 3.insert update query delete 五、单元测试类要注意的 AndroidCRUDService curdService = new AndroidCRUDService(this.getContext()); /* * 注意:getContext必须在我们使用前已经注解进去的,在使用前要实力化,而且是使用后才有上下文 *一般设置为局部对象 */ 六、AndroidManifest.xml的配置 <!-- 配置用户类库android.test.runner测试 --> package jll.sqlitedb; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; /** * *@author Administrator DataBaseHelper是一个访问SQLite的助类,提供两个方面的功能 * 1.getReadableDatebase(),getWriteableDatabase()可以获取SQLiteDatabase对象,通过 * 2.提供了onCreate()和onUpdate()两个回调函数,允许我们常见和升级数据库是进行使用 */ public class DataBaseHelper extends SQLiteOpenHelper { // 给一个默认的SQLite的数据库名 private static final String DataBaseName = "SQLite_DB"; private static final int VERSION = 2; // 在SQLiteOpenHelper的子类当中,必须要有的构造函数 public DataBaseHelper(Context context, String name, CursorFacto
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值