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);通过这些静态方法可以很方便的打开和新建一个数据库。
execsql(String sql,Object[] bindArgs) execsql(String sql) rawquery(String sql,String[] selectionArgs); beginTransaction() 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,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的表。
进阶
直接使用sqliteDatabase的openorCreateDatabase可以直接打开或者是新建一个sqliteDatabase,但是这里存在一个缺点。在每次执行SQL语句的时候都需要在try catch语句中进行,如果在try中直接 *** 作的数据库或者表不存在,就需要在catch中重新创建表并且执行CRUD *** 作,并且有关数据库的每一个方法都要这么做,重复的代码太多了,所以实际的开发中大都选用sqliteOpenHelper类。
主要方法:
synchronized sqliteDatabase getReadableDatabase():以读写的方式打开数据库。 synchronized sqliteDatabase getWritableDatabase();以写的方式打开数据库。 abstract voID onCreate(sqliteDatabase db) 当第一次创建数据库的时候回调该方法。 abstract voID onUprade(sqliteDatabase db,int oldversion,int newVersion) 数据库版本更新的时候回调该方法。 abstract voID close() 关闭所有打开的sqliteDatabase.
使用方法:
1)继承sqliteOpenHelper。在构造方法中的参数String name就是数据库的名称。
2)重写onCreate和onUpgrade方法。
MysqLiteOpenHelper类:
package com.app.db; import androID.content.Context;import androID.database.sqlite.sqliteDatabase;import androID.database.sqlite.sqliteDatabase.CursorFactory;import androID.database.sqlite.sqliteOpenHelper; public class MysqLiteOpenHelper extends sqliteOpenHelper { String createsql = "create table tb_test(_ID integer primary key autoincrement,name,age )"; public MysqLiteOpenHelper(Context context,String name,CursorFactory factory,int version) { super(context,factory,version); } @OverrIDe public voID onCreate(sqliteDatabase db) { db.execsql(createsql); } @OverrIDe public voID onUpgrade(sqliteDatabase arg0,int arg1,int arg2) { } }
Main.java
package com.app.main; import androID.app.Activity;import androID.database.Cursor;import androID.database.sqlite.sqliteDatabase;import androID.os.Bundle;import androID.vIEw.Menu;import androID.Widget.Toast; import com.app.db.MysqLiteOpenHelper; public class Main extends Activity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); MysqLiteOpenHelper helper = new MysqLiteOpenHelper(this,"my.db3",null,1); String insertsql = "insert into tb_test values(null,'wx',18)"; sqliteDatabase db = helper.getReadableDatabase(); db.execsql(insertsql); Cursor cursor = db.rawquery("select * from tb_test",null); cursor.movetoFirst(); int ID = cursor.getInt(0); Toast.makeText(this,ID+"",Toast.LENGTH_SHORT).show(); } @OverrIDe public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main,menu); return true; } }
实现效果:
以上是内存溢出为你收集整理的实例讲解Android App使用自带的SQLite数据库的基本方法全部内容,希望文章能够帮你解决实例讲解Android App使用自带的SQLite数据库的基本方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)