Android数据存储方式之:数据库操作

来源:互联网 发布:如何用阿里云os系统 编辑:程序博客网 时间:2024/06/04 18:44

               开发安卓应用肯定离不开与数据打交道,现在有很多的开源框架可用,比原生的操作方便了不少比如AHibernate,GreenDao,OrmLite等等。我目前项目用到的就是GreenDao框架,可以用java项目生成我们对应的工具类在我们Android项目中,我们直接使用就可以。详细使用以后再介绍,今天我贴的是Android自带的数据库操作类SQLiteOpenHelper的使用,由于时间关系,写得非常简单,有不周之处(比如没有考虑性能,没有考虑更好地封装等),请大家多多指正!

------------------------界面--------------------------------------------

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#f0f0f0"
    android:orientation="vertical" >
    <Button
        android:id="@+id/add_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="添加数据" />
    <Button
        android:id="@+id/delete_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="删除数据" />
    <Button
        android:id="@+id/edit_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="修改数据" />
    <Button
        android:id="@+id/qyery_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="查询数据" />
    <ListView
        android:id="@+id/db_listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>

--------------------------数据库操作工具类--------------------------

public class DBTool {
/**数据库帮助类 */
private DataOpartorHelper dbHelper;
/**数据库操作类*/
private SQLiteDatabase db;
/**数据库名 */
private final static String DATABASE_NAME = "test.db";
/**数据库版本号 */
private final static int DATABASE_VERSION = 1;
/**上下文 */
private Context mcontext;
public DBTool(Context mcontext) {
super();
this.mcontext = mcontext;
}
/**内部类,针数据库操作 */
private static class DataOpartorHelper extends SQLiteOpenHelper {
public DataOpartorHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
/**创建数据库方法,第一次使用时会调用*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists pinbao(id integer primary key,name text)");
db.execSQL("insert into pinbao values(1,'a1')");
db.execSQL("insert into pinbao values(2,'a2')");
}
/**针对数据库升级 */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 版本更新时,有数据库变更时,会进入到这里
}
}


/**打开数据库 */
public DBTool open() {
dbHelper = new DataOpartorHelper(mcontext);
db = dbHelper.getWritableDatabase();
return this;
}

     /**关闭数据库 */
public void close() {
db.close();
dbHelper.close();
}
/**插入数据*/
public long insert(String tableName, ContentValues values) {
return 0;
}
/**更新数据操作*/
public long update(String tableName, String whereClause, String[] whereArgs, ContentValues values) {
return db.update(tableName, values, whereClause, whereArgs);
}

/**删除数据操作 */
public boolean delete(String tableName, String whereClause, String[] whereArgs) {
return db.delete(tableName, whereClause, whereArgs) > 0;
}

/**查询数据*/
public Cursor findList(String tableName, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) {
return db.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy, limit);
}
/**直接用sql语法操作数据*/
public void executeSql(String sql) {
db.execSQL(sql);
}
}

-------------------Activity中实现简单的增删改查----------------------------------

public class DBTestActivity extends Activity implements OnClickListener {
private ListView mListView;
private Button addBtn, delBtn, editBtn, queryBtn;
private SimpleAdapter mAdapter;
private DBTool dbHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViews();
setListeners();
dbHelper = new DBTool(this);
init();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.add_btn:
insertDataBase();
break;
case R.id.delete_btn:
delDatabase();
break;
case R.id.edit_btn:
editDataBase();
break;
case R.id.qyery_btn:
getData();
break;
}
}
/* 实例化UI */
private void findViews() {
addBtn = (Button) findViewById(R.id.add_btn);
delBtn = (Button) findViewById(R.id.delete_btn);
editBtn = (Button) findViewById(R.id.edit_btn);
queryBtn = (Button) findViewById(R.id.qyery_btn);
mListView = (ListView) findViewById(R.id.db_listview);
}
/* 设置监听 */
private void setListeners() {
addBtn.setOnClickListener(this);
delBtn.setOnClickListener(this);
editBtn.setOnClickListener(this);
queryBtn.setOnClickListener(this);
}
/**初始化数据 */
private void init() {
mAdapter = new SimpleAdapter(this, getData(), R.layout.list_item, new String[] { "id", "name" }, new int[] { R.id.view_id, R.id.view_name });
mListView.setAdapter(mAdapter);
}

private void insertDataBase() {
ContentValues values = new ContentValues();
values.put("id", "5");
values.put("name", "xiaoming");
dbHelper.insert("pinbao", values);
}

private void delDatabase() {
dbHelper.delete("pinbao", "id=?", new String[] { "5" });
}

private void editDataBase() {
ContentValues values = new ContentValues();
values.put("name", "wangwu");
dbHelper.update("pinbao", "id=?", new String[] { "1" }, values);
}

/**获取数据库集合数据 */
@SuppressWarnings("unchecked")
private List<HashMap<String, Object>> getData() {
dbHelper.open();
Cursor cursor = dbHelper.findList("stu", null, null, null, null, null, null, null);
@SuppressWarnings("rawtypes")
List list = cursor2List(cursor);
dbHelper.close();
return list;
}

/* 游标转换为集合 */
private List<HashMap<String, Object>> cursor2List(Cursor cursor) {
List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
/* 有记录 */
while (cursor.moveToNext()) {
HashMap<String, Object> map = new HashMap<String, Object>();
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
map.put("id", id);
map.put("name", name);
list.add(map);
}
return list;
}
}

0 0