实例讲解Android App使用自带的SQLite数据库的基本方法

实例讲解Android App使用自带的SQLite数据库的基本方法,第1张

概述SQLite数据库是android系统内嵌的数据库,小巧强大,能够满足大多数SQL语句的处理工作,而SQLite数据库仅仅是个文件而已。虽然SQLite的有点很多,但并不是如同PC端的mysql般强大,而且android系统中不允许通过JDBC ***

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数据库的基本方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存