SQLite数据库---数据库的基本操作

                                  数据库的常用操作

1.创建SQLite数据库

Android系统推荐使用SQLiteOpenHelper的子类创建SQLite数据库,因此需要创建一个类继承自SQLiteOpenHelper,重写onCreate()方法,并在该方法中执行创建数据库的命令。具体代码如下所示

public class DbHelper extends SQLiteOpenHelper{
    private  Context context;//成员变量
    public static final String DB_NAME="BookStore.db";
    public static final  String CREATE_BOOK="create table book(id integer primary key autoincrement," +
            "author text,price real,pages integer,name text)";//autoincrement,用于主键自动增长
    public  static final  String CREATE_CATEGORY="create table category(id integer primary key autoincrement,name text,code integer)";
    public DbHelper(Context context, int version) {
        super(context,DB_NAME, null, version);//上下文,数据库名,游标工厂,默认为null,数据库版本
        Log.d("DBHelper","constructor");
        this.context=context;
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d("DBHelper","onCreate");
 //建表
        db.execSQL(CREATE_BOOK);
        //弹出toast表示执行完毕
        db.execSQL(CREATE_CATEGORY);
        Toast.makeText(context,"create success",Toast.LENGTH_LONG).show();
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//旧版本,新版本
        db.execSQL("drop table if exists Book");
        db.execSQL("drop table if exists category");//先把旧表删除
        onCreate(db);//再建表
    }
}

上述代码中,创建数据库表的SQL语句被定义在onCreate()方法中,当数据库第一次被创建时会自动调用该方法,并执行方法中的SQL语句。当数据库版本号增加时会调用onUpgrade()方法,如果版本号不增加,该方法就不会被调用。需要注意的是:创建的数据库会被放置在/data/data/<your package name>/database 目录下。

2.增加一条数据

下面以book表为例子,介绍如何向表中插入一条数据。

 //添加数据
    public void addData(View view)
    {
        SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();//得到一个读写的 SQLiteDatabase 对象
        //将参数名和列添加到ContentValues 对象里面
        ContentValues contentValues=new ContentValues();
        contentValues.put("name","android");
        contentValues.put("author","li");
        contentValues.put("pages",200);
        contentValues.put("price",40);
        //插入
        sqLiteDatabase.insert("book","name",contentValues);
}

3.修改一条数据   

    public  void updateData(View view) {
        //获取一个读写的 SQLiteDatabase 对象
        SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase();
        //创建一个ContentValues对象
        ContentValues contentValues = new ContentValues();
        //将参数以key,values的形式添加进去
        contentValues.put("price", 1000);
        //执行修改的方法
        sqLiteDatabase.update("book", contentValues, "name=?", new String[]{"java"});
    }

注意的是:使用完SQLitedatabase对象后一定要关闭,否则数据库连接一定存在。会不断消耗内存,并且会报出数据库连接会一直存在,会不断消耗内存,并且报出数据库未关闭的异常,当数据库内存不足时将获取不到SQLitedatabase对象。

4.删除一条数据

 public void deleteData(View view){
        SQLiteDatabase sqLiteDatabase=dbHelper.getWritableDatabase();
        sqLiteDatabase.delete("book","pages<?",new String[]{"300"});

    }

5.查询一条数据

查询数据首先要获得一个可读的SQLitedatabase对象。SQLitedatabase提供了两个用于查询数据的方法,一个是rawQuery(),另一个是query()方法。

public void queryData(View view)
    {
        StringBuilder stringBuilder=new StringBuilder();
        SQLiteDatabase sqLiteDatabase=dbHelper.getReadableDatabase();
        Cursor cursor=sqLiteDatabase.query("book",null,null,null,null,null,null);//表示查询的是所有数据
        if(cursor.moveToFirst())
        {
            do{
                String name=cursor.getString(cursor.getColumnIndex("name"));
                String author=cursor.getString(cursor.getColumnIndex("author"));
               int pages=cursor.getInt(cursor.getColumnIndex("pages"));
                double price=cursor.getDouble(cursor.getColumnIndex("price"));
               stringBuilder.append(name+"-"+author+"-"+pages+"-"+price);
            }while(cursor.moveToNext());//是否有下一条值
        }
        //当需要操作很长的字符串,或者要对字符串进行非常频繁的操作时,应该使用StringBuilder,其余场合,用String比较方便。
        Toast.makeText(this,stringBuilder.toString(),Toast.LENGTH_LONG).show();
    }
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值