当前位置: 移动技术网 > IT编程>移动开发>Android > 实例讲解Android中SQLiteDatabase使用方法

实例讲解Android中SQLiteDatabase使用方法

2019年07月24日  | 移动技术网IT编程  | 我要评论

龙斗士什么职业好,关公邮票,冷少的见习爱神

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的表。

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网