使用 SQLiteOpenHelper操作数据库

爷,独闯天下 提交于 2021-02-19 04:32:08

首先大家可以首先看看 SQLiteOpenHelper类的源码或者 api文档,这样可以增加理解.

一般情况下我们需要事先的是 onCreate 和 onUpgrade 这两个抽象方法:

package com.adcge.test002.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by baozhuwanglei on 16-3-9.
 */
public class DBHelper extends SQLiteOpenHelper {

    /**
     * 构造函数 调用父类构造函数
     */
    public DBHelper(
            Context context,
            String name,
            SQLiteDatabase.CursorFactory factory,
            int version) {
        super(context, name, factory, version);
    }

    /**
     * 当数据库首次创建的时候调用此方法,一般将创建表等初始化操作放在
     * 该方法中执行,重写 onCreate方法,调用 execSQL方法创建表
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("Create table if not exists hero_info("
                + "id integer primary key,"
                + "name varchar,"
                + "level integer)");
    }

    /**
     * 当打开数据库时传入的版本号与当前版本号不同时调用该方法
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

有了这个类之后, 当 new 一个 DBHelper类之后,就会创建一个数据库, 然后通过 DBHelper对象的 getReadableDatabase 方法来获得一个 SQLiteDatabase 对象,然后使用 SQLiteDatabase 可以进行增删改查之类的数据库操作. 然后我们可以把结果赋值给 一个 ListView.

package com.adcge.test002;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.support.v4.widget.DrawerLayout;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import com.adcge.test002.db.DBHelper;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private DBHelper mHelper;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        //初始化
        listView = (ListView)findViewById(R.id.listView);

        //数据库操作
        mHelper = new DBHelper(this, "my.db", null, 1);
        //向数据库中插入和更新数据
        insertAndUpdateData(mHelper);
        //查询数据库内容放入一个 ArrayList中
        ArrayList<HashMap<String,Object>> listItems = queryData(mHelper);

        //设置适配器,把内容放入 ListView
        SimpleAdapter listItemAdapter = new SimpleAdapter(
                this,
                listItems,  //数据源
                R.layout.list_view_item,    //layout文件
                new String[] {"item01","item02"},   //这里是map对应的id,也就是from
                new int[] {R.id.item01,R.id.item02} //这里是布局文件中对应的id,也就是to
        );


        listView.setAdapter(listItemAdapter);
    }

    /**
     * 向数据库中插入和更新数据
     */
    public void insertAndUpdateData(DBHelper mHelper) {
        //获取数据库对象
        SQLiteDatabase db = mHelper.getWritableDatabase();
        //使用 execSQL方法向表中插入数据
        //db.execSQL("insert into hero_info(name, level) values('bb',0)");
        //使用insert方法向表中插入数据
        ContentValues values = new ContentValues();
        values.put("name", "xh");
        values.put("level", "5");
        db.insert("hero_info", "id", values);
        //清空 ContentValues对象
        values.clear();
        //values.put("name", "xh");
        //values.put("level", "10");
        //使用 update 方法更新表数据
        //db.update("hero_info", values, "level=5", null);
        db.close();
    }

    /**
     * 从数据库中查询数据
     * @param mHelper
     * @return
     */
    public ArrayList queryData(DBHelper mHelper) {
        String result = "";
        //获得数据库对象
        SQLiteDatabase db = mHelper.getReadableDatabase();
        //查询表中的数据
        Cursor cursor = db.query("hero_info", null, null, null, null, null, "id asc");
        //获得 name 列的索引
        int nameIndex = cursor.getColumnIndex("name");
        //获得 level列的索引

        //生成数据源  设置listView中每个item的数据
        int levelIndex = cursor.getColumnIndex("level");

        ArrayList<HashMap<String,Object>> listItems = new ArrayList<HashMap<String,Object>>();
        for (cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()) {
            HashMap<String, Object> map = new HashMap<String,Object>();
            map.put("item01",cursor.getString(nameIndex) +"_");
            map.put("item02",cursor.getInt(levelIndex) + "_");
            listItems.add(map);
        }
        cursor.close();
        db.close();
        return listItems;
    }

    /**
     * 销毁
     */
    @Override
    protected void onDestroy() {
        SQLiteDatabase db = mHelper.getWritableDatabase();
        db.delete("hero_info", "1", null);
        super.onDestroy();
    }

    @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);
    }
}


其中我们可以使用 cursor来遍历结果, 当然你也可以通过使用 android.widget.CursorAdapter.这个本人还不熟悉,正在不断学习中.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!