使用SQLiteOpenHelper操作数据库

coding

首先大家可以首先看看 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.这个本人还不熟悉,正在不断学习中.

以上是 使用SQLiteOpenHelper操作数据库 的全部内容, 来源链接: utcz.com/z/509691.html

回到顶部