实例讲解Android中SQLiteDatabase使用方法
sqlite数据库是android系统内嵌的数据库,小巧强大,能够满足大多数sql语句的处理工作,而sqlite数据库仅仅是个文件而已。虽然sqlite的有点很多,但并不是如同pc端的mysql般强大,而且android系统中不允许通过jdbc操作远程数据库,所以只能通过webservice等手段于php、servlet交互获取数据。
sqlitedatabase类,代表了一个数据库对象,通过sqlitedatabase来操作管理数据库。
一些基本的用法:
static sqlitedatabase opendatabase(string path,sqlitedatabase.cursorfactory factory,int flag);
static sqlitedatabase openorcreatedatabase(file file,sqlitedatabase.cursorfactory factory);
static sqlitedatabase openorcreatedatabase(string path,sqlitedatabse.cursorfactory factory);
通过这些静态方法可以很方便的打开和新建一个数据库。
1、execsql(string sql,object[] bindargs)
2、execsql(string sql)
3、rawquery(string sql,string[] selectionargs);
4、begintransaction()
5、endtransaction()
这些函数可以完成sql功能,对于查询出来的结果是用cursor表示的,类似于jdbc中的resultset类,在这些类中通过方法move(int offset)、movetofirst()、movetolast()、movetonext()、movetoposition(int position)、movetoprivious()获取需要的结果行。
下面通过一个实例来说明一下sqlitedatabase的基本使用:
main.xml:
<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:orientation="vertical" tools:context=".main" > <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="key" /> <edittext android:id="@+id/keys" android:layout_width="100sp" android:layout_height="wrap_content" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="value" /> <edittext android:id="@+id/values" android:layout_width="100sp" android:layout_height="wrap_content" /> <button android:id="@+id/btn" android:layout_width="100sp" android:layout_height="wrap_content" android:text="submit" /> </linearlayout> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" > <listview android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="wrap_content" /> </linearlayout> </linearlayout>
用于填充数据的mytextview.xml:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <textview android:id="@+id/listkey" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" /> <textview android:id="@+id/listvalue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="300sp" /> </linearlayout>
main.java
package com.app.main; import android.annotation.suppresslint; import android.app.activity; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.cursoradapter; import android.widget.edittext; import android.widget.listview; import android.widget.simplecursoradapter; public class main extends activity { edittext ed1 = null; edittext ed2 = null; button btn = null; listview lv = null; sqlitedatabase db = null; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); ed1 = (edittext) this.findviewbyid(r.id.keys); ed2 = (edittext) this.findviewbyid(r.id.values); btn = (button) this.findviewbyid(r.id.btn); lv = (listview) this.findviewbyid(r.id.lv); db = sqlitedatabase.openorcreatedatabase(this.getfilesdir().tostring() + "/my.db3", null); btn.setonclicklistener(new onclicklistener() { @override public void onclick(view view) { string key = ed1.gettext().tostring(); string value = ed2.gettext().tostring(); try { insertdata(db, key, value); cursor cursor = db.rawquery("select * from tb_info", null); inflatelistview(cursor); } catch (exception e) { string sql = "create table tb_info(_id integer primary key autoincrement,db_key varchar(20),db_value varchar(50))"; db.execsql(sql); insertdata(db, key, value); cursor cursor = db.rawquery("select * from tb_info", null); inflatelistview(cursor); } } }); } // 向数据库中插入数据 private void insertdata(sqlitedatabase db, string key, string value) { db.execsql("insert into tb_info values (null,?,?)", new string[] { key, value }); system.out.println("------------------"); } // 向listview中填充数据 @suppresslint("newapi") public void inflatelistview(cursor cursor) { simplecursoradapter adapter = new simplecursoradapter(main.this, r.layout.mytextview, cursor, new string[] { "db_key", "db_value" }, new int[] { r.id.listkey, r.id.listvalue }, cursoradapter.flag_register_content_observer); lv.setadapter(adapter); } @override protected void ondestroy() { super.ondestroy(); if (db != null && db.isopen()) { db.close(); } } }
实现的效果:
需要特别指出,在用simplecursoradapter封装cursor的时候,要求底层数据库表的主键列的列名为_id,因为simplecursoradapter只能识别主键列名为_id的表。
以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持。
上一篇: Java instanceof关键字的的进一步理解
下一篇: dhtmlxGrid 添加行号详细步骤
推荐阅读
-
Android中AutoCompleteTextView与TextWatcher结合小实例
-
Android中HorizontalScrollView使用方法详解
-
在Android中通过Intent使用Bundle传递对象的使用方法
-
Android中SeekBar和RatingBar用法实例分析
-
实例讲解Android中的AutoCompleteTextView自动补全组件
-
Android中通过AsyncTask类来制作炫酷进度条的实例教程
-
Android App开发中自定义View和ViewGroup的实例教程
-
Android中invalidate()和postInvalidate() 的区别及使用方法
-
Java中的观察者模式实例讲解
-
在Android中调用WebService实例