【Android】sqlite探索

参考郭霖大大的《第一行代码》

一开始先了解数据库的建立和增删改查就可以了,不要分散重点,学会了再学下一个
实现效果:
点两下插入数据,然后点查询,会出现四条数据,两本书的信息(数据随便写的)
这里写图片描述

点击更新数据会将所有书名为《纯粹理性批判》的价格改为38(再点一下查询)
这里写图片描述

点击删除数据,会把所有页数超过500的书删掉,也就是郭霖大大的《第一行代码》
这里写图片描述

创建一个MySQLiteOpenHelper 类继承SQLiteOpenHelper,用于执行 数据库 的创建和更新
CreateTableSentence 是建表语句,想象一个名为book的表格

id name author price pages
1
2
3
4
名称,作者,价格,页数
primary key 主键
autoincrement 自增长
把建表语句放入execSQL函数里,就建立了一张表(看代码)

class MySQLiteOpenHelper extends SQLiteOpenHelper{

    private Context mContext;

    private String CreateTableSentence ="create table book ("
            + "id integer primary key autoincrement, "
            + "author text, "
            + "price real, "
            + "pages integer, "
            + "name text)";

    MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext=context;

    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        sqLiteDatabase.execSQL(CreateTableSentence);//执行建表语句
        Toast.makeText(mContext,"创建表格book",Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

        sqLiteDatabase.execSQL("drop table if exists book");
        onCreate(sqLiteDatabase);
        Toast.makeText(mContext,"更新数据库",Toast.LENGTH_SHORT).show();
    }

}

定义了5个按钮分别做相关的操作,一个文本用于显示book表中的信息
定义三个ContentValues用来存储数据(名起得长用来学英语),ContentValues有点像Map< String ,Object >,不过网上查了一下说不能存储对象,只能存储简单的数据类型,如int,string之类的

public class MainActivity extends Activity implements View.OnClickListener{

    private MySQLiteOpenHelper mMySQLiteOpenHelper;
    private ContentValues mCritiqueOfPureReasonContentValues;//纯粹理性批判
    private ContentValues mTheFirstLineOfCodeContentValues;//第一行代码
    private ContentValues mUpdateCritiqueOfPureReasonPriceContentValues;//升级纯粹理性批判价格

//一堆按钮
    private Button mCreateDatabaseButton;
    private Button mAddDataButton;
    private Button mUpdateButton;
    private Button mDeleteButton;
    private Button mQueryButton;
    private TextView textView;

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

        initView();
        initData();
        initEvent();

    }

}

下面的初始化基本上都没什么,稍微注意一下初始化数据,主要部分是在后面按钮的点击事件


    private void initView(){

        mCreateDatabaseButton=findViewById(R.id.id_button_create_database);
        mAddDataButton=findViewById(R.id.id_button_add_data);
        mUpdateButton=findViewById(R.id.id_button_update);
        mDeleteButton=findViewById(R.id.id_button_delete);
        mQueryButton=findViewById(R.id.id_button_query);
        textView=findViewById(R.id.id_text);

    }

    private void initData(){

        mCreateDatabaseButton.setText("创建数据库");

        mAddDataButton.setText("插入数据");
        mDeleteButton.setText("删除数据");
        mUpdateButton.setText("更新数据");
        mQueryButton.setText("查询数据");

        mMySQLiteOpenHelper =new MySQLiteOpenHelper(this,"BookStore.db",null,2);//硬盘中的文件名

        //用于插入数据,两本书的信息
        mCritiqueOfPureReasonContentValues =new ContentValues();

        mCritiqueOfPureReasonContentValues.put("name","《纯粹理性批判》");
        mCritiqueOfPureReasonContentValues.put("author","康德");
        mCritiqueOfPureReasonContentValues.put("price",36.4);
        mCritiqueOfPureReasonContentValues.put("pages",485);

        mTheFirstLineOfCodeContentValues =new ContentValues();
        mTheFirstLineOfCodeContentValues.put("name","《第一行代码》");
        mTheFirstLineOfCodeContentValues.put("author","郭霖");
        mTheFirstLineOfCodeContentValues.put("price",66.4);
        mTheFirstLineOfCodeContentValues.put("pages",585);

        //用于更新数据,把纯粹理性批判的价格改为38
        mUpdateCritiqueOfPureReasonPriceContentValues=new ContentValues();
        mUpdateCritiqueOfPureReasonPriceContentValues.put("price",38);

    }

    private void initEvent(){

        mCreateDatabaseButton.setOnClickListener(this);
        mAddDataButton.setOnClickListener(this);
        mUpdateButton.setOnClickListener(this);
        mDeleteButton.setOnClickListener(this);
        mQueryButton.setOnClickListener(this);

    }

mSQLiteDatabase是数据库使用getWritableDatabase创建或者打开数据库时返回的一个可对数据库操作的对象,我们使用这个对象对数据库进行增删改查
增删改就不说了,查询时使用query方法,可以指定相关的行和列,这里传入null,然后返回所有book表的数据到mCursor中,再用循环取出来,显示到textView中(光看文字看不懂,请结合看代码看,熟练使用Ctrl键+F键)


    @Override
    public void onClick(View view) {

        SQLiteDatabase mSQLiteDatabase;//在点击事件中对数据进行操作

        switch (view.getId()){

            case R.id.id_button_create_database:

                mMySQLiteOpenHelper.getWritableDatabase();
                break;

            case R.id.id_button_add_data:

                mSQLiteDatabase = mMySQLiteOpenHelper.getWritableDatabase();
                mSQLiteDatabase.insert("book",null, mCritiqueOfPureReasonContentValues);//第一行
                mSQLiteDatabase.insert("book",null, mTheFirstLineOfCodeContentValues);//第二行
                break;

            case R.id.id_button_delete:

                mSQLiteDatabase = mMySQLiteOpenHelper.getWritableDatabase();
                mSQLiteDatabase.delete("book","pages>?",new String[]{"500"});//删除页数大于500的行

                break;

            case R.id.id_button_update:

                mSQLiteDatabase = mMySQLiteOpenHelper.getWritableDatabase();

                //选择book表中name为《纯粹理性批判》的所有行更新
                mSQLiteDatabase.update("book",
                                mUpdateCritiqueOfPureReasonPriceContentValues,"name=?",new String[]{"《纯粹理性批判》"});
                break;

            case R.id.id_button_query:

                mSQLiteDatabase = mMySQLiteOpenHelper.getWritableDatabase();
                Cursor mCursor= mSQLiteDatabase.query("book",null,null,null,null,null,null);//获取book表中的所有数据
                String textString="";
                if (mCursor.moveToFirst()){
                    while (true){

                        String name=mCursor.getString(mCursor.getColumnIndex("name"));
                        String author=mCursor.getString(mCursor.getColumnIndex("author"));
                        int pages=mCursor.getInt(mCursor.getColumnIndex("pages"));
                        double price=mCursor.getDouble(mCursor.getColumnIndex("price"));
                        textString=textString+"书名:"+name+",作者:"+author+",页数:"+pages+",价格:"+price+"\n";//追加到文本后

                        if (!mCursor.moveToNext())break;//移动失败结束循环

                    }
                }
                mCursor.close();
                textView.setText(textString);
                break;
        }

    }

增加一个事务功能


public class MainActivity extends Activity implements View.OnClickListener{

    ……
    private Button mReplaceButton;

    private void initView(){
        ……
        mReplaceButton=findViewById(R.id.id_button_replace);

    }

    private void initData(){

        ……
        mReplaceButton.setText("替换全部数据(事务)");
    }

    private void initEvent(){

        ……
        mReplaceButton.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {

        SQLiteDatabase mSQLiteDatabase;//在点击事件中对数据进行操作

        switch (view.getId()){

            ……
            case R.id.id_button_replace:

                mSQLiteDatabase=mMySQLiteOpenHelper.getWritableDatabase();
                mSQLiteDatabase.beginTransaction();
                try {
                    mSQLiteDatabase.delete("book",null,null);
                    mSQLiteDatabase.insert("book",null, mCritiqueOfPureReasonContentValues);
                    mSQLiteDatabase.setTransactionSuccessful();

                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    mSQLiteDatabase.endTransaction();
                }
                break;

        }

    }

}

如果在删除过程中出现异常,则事务不会成功,删除操作会撤回。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值