SQLite数据库存储

我们先讲解数据库的创建。

在android中我们通常会用到SQLiteOpenHelper来建立数据库,因为他书写简单,并且可以快速的升级数据库的版本。
下面我们对SQLiteOpenHelper进行一一解答:

创建一个数据库:

继承SQLiteOpenHelper

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    //这里的bank是数据库的表名;而"banke.db"是整个数据库的文件名;
    private static final String sql = "create table bank(id integer primary key autoincrement ,name varchar , money integer)";
    private static final String TAG = MySQLiteOpenHelper.class.getSimpleName();

    public MySQLiteOpenHelper(Context context) {
        //第二个参数是数据库文件名;
        //第三个参数为 factory 游标工厂,null 表示使用默认的工厂;
        //version 为版本号;
        super(context, "banke.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG, "onCreate: enter");
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

下面我们对增删改查四个方法逐个讲解;

sql语句:

增:String sql = "insert into bank (name , money ) values(?,?)";
        database.execSQL(sql, new Object[]{"apple", 1800});
删:String sql = "delete from bank where name = ?";
        database.execSQL(sql, new Object[]{"apple"});
改:String sql = "update bank set  money = ? where name =?";
        database.execSQL(sql,new Object[]{1000,"apple"});
查:String sql = "select (money) from bank where name = ?";
        Cursor cursor1 = database.rawQuery(sql, new String[]{"apple"});

首先我们讲-增;

使用方法有两种:每次使用时都要得到

MySQLiteOpenHelper mySql = new MySQLiteOpenHelper(this);
SQLiteDatabase mDatabase = mySql.getWritableDatabase();
//第一种方法:
/*
        insert(String table, String nullColumnHack, ContentValues values);
        String table 表示是数据表的表名(数据库的文件名不等于数据表的表名这点得弄清楚)
        String nullColumnHack 当下面的values为null时有效这个参数才有效,表示强行插入null值
        ContentValues values
         */
        ContentValues values = new ContentValues();
        values.put("name", "apple");
        values.put("money", 4999);
        mDatabase.insert("bank", null, values);
//第二种方法:
//sql语句中的bank时数据库的表名,values(?,?)里面的?号为占位符,这里的结果由execSQL中的new Object[]{}传入;
 String sql = "insert into bank (name , money ) values(?,?)";
        mDatabase.execSQL(sql, new Object[]{"apple", 1800});
mDatabase.close();

同样也是两种方法;

MySQLiteOpenHelper mySql = new MySQLiteOpenHelper(this);
SQLiteDatabase mDatabase = mySql.getWritableDatabase();
//第一种:
/*
          String table 数据表的表名
          String[] columns, 要查询出来的列名;
          String selection, 相当于select语句where 后面的部分,可提供占位符,
          String[] selectionArgs,为上一个占位符提供参数,
          String groupBy,
          String having,
          String orderBy
         */
Cursor cursor = mDatabase.query("bank", new String[]{"money"}, "name = ?", new String[]{"HUAWEI"}, null, null, null);

//第二种:
//sql中 select 表示要查的内容 from 数据库表 where name = ?  "?"号代表占位符; 下面这句话表示查询name为 ?的一整行数据;
String sql = "select (money) from bank where name = ?";
        Cursor cursor1 = mDatabase.rawQuery(sql, new String[]{"apple"});
        while (cursor1.moveToNext()) {
            //int apple = cursor.getInt(cursor.getColumnIndex("money"));
            int huawei = cursor1.getInt(cursor1.getColumnIndex("money"));
            Log.d(TAG, "query: huawei = " + huawei);
        }
        cursor.close();
mDatabase.close();

//如果是要查询整张表那么select语句后面的where部分就不需要了,如下;
//查询整张表的所有内容;
String sql = "select * from bank";
Cursor cursor = database.rawQuery(sql, null);

删除

 MySQLiteOpenHelper mySql = new MySQLiteOpenHelper(this);
        SQLiteDatabase database = mySql.getWritableDatabase();
//public int delete(String table, String whereClause, String[] whereArgs) whereClause如果为null表示删除所有
        int list = database.delete("bank", "name = ?", new String[]{"HUAWEI"});
        //list 表示影响的行数,0表示没有删除成功
        Log.d(TAG, "delete: list = " + list);
        //这里表示删除name为apple的一行数据;
        String sql = "delete from bank where name = ?";
        database.execSQL(sql, new Object[]{"apple"});
        //表示删除bank表中的所有数据;
        String sql = "delete from bank";
        database.execSQL(sql, new Object[]{});
        database.close();

修改

 MySQLiteOpenHelper mySql = new MySQLiteOpenHelper(this);
        SQLiteDatabase database = mySql.getWritableDatabase();
//        ContentValues values = new ContentValues();
//        values.put("money", 55555);
//        database.update("bank", values, "name = ?", new String[]{"apple"});
// 这里是指更新bank表中的name对应的money,where后面也可以指定id或表中对应的其它有的变量,如name;
        String sql = "update bank set  money = ? where name =?";
        database.execSQL(sql,new Object[]{1000,"apple"});
        database.close();

//如果要修改一行的所有数据那么使用update()api会比较省事。
// public int update(String table, ContentValues values, String whereClause, String[] whereArgs) 
//whereClause为null的话表示更新整个表有数据的每一行;
database.update("bank", values, "id = ?", new String[]{"这里是所需要修改的行标"});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值