SQLite数据库总结一

安卓的数据存储有几种方式,其中SQLite数据库存储是最重要的,今天上午特地花了时间去学习,略有心得,来自我总结下,大神指正。


首先当然还是介绍两个类(= = 好像我都喜欢这样开头)

SQLiteOpenHelper:可以说是最先用到的类了,顾名思义,打开数据库的好帮手,哈哈

SQLiteDatabase:这个可以直观理解为特定数据库的管理者,有了它,就能任意所了!


接下来介绍类的几个方法

SQLiteOpenHelper:

两个主要打开的方法,一个是getReadableDatabase()getWritableDatabase(),这两个方法的共同点是可以创建一个或者打开一个现有的数据库,并返回一个可以对数据库进行操作的对象(就是我说的管理员).而区别就是,当数据库不可以写入的时候(磁盘满)getReadableDatabase()方法是以只读方式去打开,而另个方法就会出现异常。

还有三个重写方法:一个是构造函数,一个是oncreate方法,一个是onUpgrade方法,其中构造函数是为了在初始化时,参数传入新建数据库的对象,是为了关联数据库,onCreate方法是在里面执行execSQL语句建表而用,而onUpgrade方法是更新表或者表数据的方法,成为数据库升级。


SQLiteDatabase:

有数据库的各种操作方法,再加上一种执行数据库语句的方法。

create: 很简单的方法,用SQLiteOpenHelper好帮手类的对象执行getWritableDatabase

           方法,就可以触发SQLiteOpenHelper类下的onCreate方法,即创建一个数据库  

<span style="font-size:24px;"></span><pre name="code" class="java">dbhelper.getWritableDatabase();//这里的dbhelper是SQLiteOpenHelper对象
Toast.makeText(this,"create is succeessful",Toast.LENGTH_SHORT).show();

delete: 这个方法比较简单,传入三个参数,表名,列名,约束条件。

SQLiteDatabase db1 = dbhelper.getWritableDatabase();
db1.delete("Book", "name", new String[]{"zhongyan"});
Toast.makeText(this,"delete is succeessful",Toast.LENGTH_SHORT).show();


insert:  这里介绍个类ContentValues,我把它叫做内容信息八卦,哈哈,其实就是把所有             的信息数据放在这个类的对象里,然后一窝蜂把它存进去,这个ContentValues             类对象,是通过键值对存放的,也就是数据库一个列名对应一个数据。最后再用

            insert(表名,默认值,内容信息对象)执行下就OK啦~

SQLiteDatabase db = dbhelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name","my code");
values.put("pages","1000");
values.put("author","zhongyan");
values.put("price", "36");
db.insert("Book", null, values);
Toast.makeText(this,"insert is succeessful",Toast.LENGTH_SHORT).show();


querry:  需要介绍个类Cursor,我觉得它是个用来缓存数据库查询后出来的数据的东东,              当SQLiteDatabase对象执行querry方法时,就会返回Cursor对象,其中querry                方法需要传入8个参数= = ,好多,都是有关数据库表名,列名,约束等,下面              贴出详细介绍。

             而Cursor对象里面的数据,则是用最常用的遍历手法,一个一个的拿出来就可                以了,这里用的是类似指针的方法。

SQLiteDatabase db2 = dbhelper.getWritableDatabase();
Cursor cursor=db2.query("Book",null,null,null,null,null,null,null);
if (cursor.moveToFirst()){    //把指针放到cursor对象首地址
    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"));

    }while(cursor.moveToLast());  //直到最后才结束
}

execSQL:没有什么特别的,里面就是写数据库操作语句,你可以先把语句封装,在传入常量参数进去执行,也可以直接在里面写语句,看个人喜好。

这是全部代码,仅供参考:

首先是mainactivity类

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private MyDatabaseHelper dbhelper;
    private Button bu_crea,bu_upda,bu_inser,bu_dele,bu_quer;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbhelper = new MyDatabaseHelper(this,"BookStore.db",null,2);
        findid();


    }

    private void findid() {
        bu_crea = (Button) findViewById(R.id.bu_update);
        bu_inser = (Button) findViewById(R.id.bu_insert);
        bu_quer = (Button) findViewById(R.id.bu_querry);
        bu_quer.setOnClickListener(this);
        bu_crea.setOnClickListener(this);
        bu_inser.setOnClickListener(this);
        bu_dele.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bu_create:
                dbhelper.getWritableDatabase();
                Toast.makeText(this,"create is succeessful",Toast.LENGTH_SHORT).show();
                break;

            case R.id.bu_insert:
                SQLiteDatabase db = dbhelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put("name","my code");
                values.put("pages","1000");
                values.put("author","zhongyan");
                values.put("price", "36");
                db.insert("Book", null, values);
                Toast.makeText(this,"insert is succeessful",Toast.LENGTH_SHORT).show();
                break;

            case R.id.bu_delete:
                SQLiteDatabase db1 = dbhelper.getWritableDatabase();
                db1.delete("Book", "name", new String[]{"zhongyan"});
                Toast.makeText(this,"delete is succeessful",Toast.LENGTH_SHORT).show();
                break;

            case R.id.bu_querry:
                SQLiteDatabase db2 = dbhelper.getWritableDatabase();
                Cursor cursor=db2.query("Book",null,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"));

                    }while(cursor.moveToLast());
                }



        }
    }
}

然后是MyDatabaseHelper类

public class MyDatabaseHelper extends SQLiteOpenHelper
{
    private Context mcontext;
    private static final String CREATE_BOOK="create table book(" +
            "id integer primary key autoincrement" +
            "author text" +
            "price real" +
            "pages integer" +
            "name text)";


    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mcontext=context;

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
        Toast.makeText(mcontext,"create successed",Toast.LENGTH_SHORT).show();

    }

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

    }
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值