加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Using SQLite in Android Application

发布时间:2020-12-12 20:25:03 所属栏目:百科 来源:网络整理
导读:每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库 --大名鼎鼎的SQLite。SQLite是一款轻量级数据库,它的设计目的是嵌入式,而且它占用的资源非常少,在嵌入式设备中,可能只需要几百KB,这也是 Android 系

每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库 --大名鼎鼎的SQLite。SQLite是一款轻量级数据库,它的设计目的是嵌入式,而且它占用的资源非常少,在嵌入式设备中,可能只需要几百KB,这也是 Android 系统采用 SQLite 数据库的原因之一吧。

简介

  • 轻量级
    使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
  • 独立性
    SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
  • 隔离性
    SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
  • 跨平台
    SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
  • 多语言接口
    SQLite 数据库支持多语言编程接口。
  • 安全性
    SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。

SQLite使用介绍
  
首先先来看一下本篇例子继承 SQLiteOpenHelper 类实现的 dbHelper 类。

package com.terry;

import android.content.ContentValues;
android.content.Context;
android.database.Cursor;
android.database.sqlite.SQLiteDatabase;
android.database.sqlite.SQLiteOpenHelper;
android.database.sqlite.SQLiteDatabase.CursorFactory;

public class dbHelper extends SQLiteOpenHelper{

private final static StringDATABASE_NAME = " sec_db ;
int DATABASE_VERSION 1 StringTABLE_NAME sec_pwd StringFIELD_ID _id StringFIELD_TITLE sec_Title ;


dbHelper(Contextcontext)
{
super (context,DATABASE_NAME, null ,DATABASE_VERSION);
}



@Override
void onCreate(SQLiteDatabasedb){
// TODOAuto-generatedmethodstub
Stringsql Createtable + TABLE_NAME ( FIELD_ID integerprimarykeyautoincrement,0)">FIELD_TITLE text); ;
db.execSQL(sql);


}

@Override
onUpgrade(SQLiteDatabasedb,0)">oldVersion,0)">newVersion){
DROPTABLEIFEXISTS TABLE_NAME;
db.execSQL(sql);
onCreate(db);
}

Cursorselect()
{
SQLiteDatabasedb
this .getReadableDatabase();
Cursorcursor
db.query(TABLE_NAME,0)">_iddesc );
return cursor;
}

long insert(StringTitle)
{
SQLiteDatabasedb
.getWritableDatabase();
ContentValuescv
new ContentValues();
cv.put(FIELD_TITLE,Title);
row db.insert(TABLE_NAME,cv);
row;
}

delete( id)
{
SQLiteDatabasedb
.getWritableDatabase();
Stringwhere
=? ;
String[]whereValue
{Integer.toString(id)};
db.delete(TABLE_NAME,where,whereValue);
}

update( id,StringTitle)
{
SQLiteDatabasedb
{Integer.toString(id)};
ContentValuescv

  • 创建和打开数据库
    上篇通过构造函数来创建数据库,看一下构造函数的方法 android.database.sqlite.SQLiteOpenHelper.SQLiteOpenHelper(Contextcontext,Stringname,CursorFactoryfactory, int version)

    public SQLiteOpenHelper(Contextcontext,SQLiteDatabase.CursorFactoryfactory,0)">version)
    Since:APILevel
    1
    Createahelperobjecttocreate,open,and
    / ormanageadatabase.ThedatabaseisnotactuallycreatedoropeneduntiloneofgetWritableDatabase()orgetReadableDatabase()iscalled.

    Parameters
    contexttousetoopenorcreatethedatabase
    nameofthedatabasefile,or
    null for anin - memorydatabase
    factorytouse
    creatingcursorobjects,0)">the default
    versionnumberofthedatabase(startingat
    ); if thedatabaseisolder,onUpgrade(SQLiteDatabase,0)">)willbeusedtoupgradethedatabase

    PublicMethods

    大体可以理成如下:如果进入此函数,不存在此数据库则创建,如果存在此数据库则打开连接,只要进入此方法就可以用打开的连接获得getWritableDatabase()或getReadableDatabase()这两个方法。
  • 创建表--》Create Table
    一个数据库中可以包含多个表,每一条数据都存在指定的表中,要创建可以通过 execSQL 方法来执行一条 SQL 语句。上面的方法为 代码 void onCreate(SQLiteDatabasedb){
    // TODOAuto-generatedmethodstub
    Stringsql = " Createtable + TABLE_NAME ( FIELD_ID FIELD_TITLE text); ;
    db.execSQL(sql);


    }

    上面代码创建了表名为“sec_pwd” 的数据表,表内存在一个 integer 类型的主键和一个 text 类型的字段,并执行创建该表。

  • 添加数据--》Insert
    上面的代码封装了一个使用SQLite 的 insert 方法,向表中添加数据,但是insert 方法要求把数据都打包到 ContentValues 中, ContentValue 其实可就是一个 HashTable,Key值是字段名称,Value 值是字段的值。通过 ContentValues 的put 方法就可以把数据库放到 ContentValue 对象中,然后插入到表中去。代码为:

    long insert(StringTitle)
    {
    SQLiteDatabasedb
    this .getWritableDatabase();
    ContentValuescv
    new row return row;
    }

  • 删除数据--》Delete
    依此类推,添加数据用Insert,那么删除数据为Delete

    delete( id)
    {
    SQLiteDatabasedb
    .getWritableDatabase();
    Stringwhere
    =? ;
    String[]whereValue

  • 修改数据--》Update
    update( {Integer.toString(id)};
    ContentValuescv

    可根据自己需要修改字段自行加参数。
  • 查询数据--》Query

    public Cursorselect()
    {
    SQLiteDatabasedb
    = this .getReadableDatabase();
    Cursorcursor
    null " _iddesc );
    return cursor;
    }

    在 Android 中查询数据是通过 Cursor 类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体截图如下:

  现在dbHelper己经封装完毕,接下来正式进入到我们实际例子中要操作的功能吧,项目运行效果图:

  这里用到了Menu做功能按钮,实例代码如下:

android.app.Activity;
android.database.sqlite.SQLiteCursor;
android.os.Bundle;
android.view.Menu;
android.view.MenuItem;
android.view.View;
android.widget.AdapterView;
android.widget.EditText;
android.widget.ListAdapter;
android.widget.ListView;
android.widget.SimpleCursorAdapter;
android.widget.AdapterView.OnItemClickListener;
android.widget.AdapterView.OnItemSelectedListener;


testDbActivity Activity{

dbHelperdb;
CursormyCursor;
ListViewmyListView;
EditTextmyEditText;
_id;
protected MENU_ADD Menu.FIRST;
MENU_EDIT Menu.FIRST MENU_DELETE 2 ;

@Override
boolean onCreateOptionsMenu(Menumenu){
.onCreateOptionsMenu(menu);
menu.add(Menu.NONE,MENU_ADD,0)">0
true ;
}

@Override
onOptionsItemSelected(MenuItemitem){
.onOptionsItemSelected(item);
switch (item.getItemId()){
case MENU_ADD:
operation(
add break MENU_EDIT:
operation(
edit MENU_DELETE:
operation(
delete default :
;
}
;
}



/** Calledwhentheactivityisfirstcreated. */
@Override
onCreate(BundlesavedInstanceState){
.onCreate(savedInstanceState);
setContentView(R.layout.main);
myEditText
(EditText)findViewById(R.id.EditText1);
myListView
(ListView)findViewById(R.id.ListView1);
db
dbHelper(testDbActivity. );
myCursor
db.select();
SimpleCursorAdapteradpater
SimpleCursorAdapter(
,R.layout.test,myCursor,
String[]{dbHelper.FIELD_TITLE},0)">[]{R.id.topTextView});
myListView.setAdapter(adpater);

myListView.setOnItemClickListener(
OnItemClickListener(){

@Override
onItemClick(AdapterView <?> arg0,Viewarg1,0)">arg2,0)">arg3){
myCursor.moveToPosition(arg2);
_id
myCursor.getInt( );
myEditText.setText(myCursor.getString(
));
}
});


myListView.setOnItemSelectedListener(
OnItemSelectedListener(){

@Override
onItemSelected(AdapterView SQLiteCursorsc (SQLiteCursor)arg0.getSelectedItem();
_id
sc.getInt( );
myEditText.setText(sc.getString(
));
}

@Override
onNothingSelected(AdapterView arg0){

}
});
}
operation(Stringcmd)
{
if (myEditText.getText().toString().equals( "" ))
(cmd == )
db.insert(myEditText.getText().toString());
)
db.update(_id,myEditText.getText().toString());
)
db.delete(_id);
myCursor.requery();
myListView.invalidateViews();
myEditText.setText(
);
_id
; } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读