首先大家可以首先看看 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.这个本人还不熟悉,正在不断学习中.
来源:oschina
链接:https://my.oschina.net/u/2311311/blog/634017