Using SQLite in Android Application

前端之家收集整理的这篇文章主要介绍了Using SQLite in Android Application前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

简介@H_403_6@

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

sqlite使用介绍
  
@H_403_6@首先先来看一下本篇例子继承 sqliteOpenHelper 类实现的 dbHelper 类。@H_403_6@

@H_403_6@
package@H_403_6@ com.terry;

@H_403_6@ import@H_403_6@ android.content.ContentValues;
@H_403_6@ android.content.Context;
@H_403_6@ android.database.Cursor;
@H_403_6@ android.database.sqlite.sqliteDatabase;
@H_403_6@ android.database.sqlite.sqliteOpenHelper;
@H_403_6@ android.database.sqlite.sqliteDatabase.CursorFactory;

@H_403_6@ public@H_403_6@ @H_403_6@ class@H_403_6@ dbHelper@H_403_6@ extends@H_403_6@ sqliteOpenHelper{

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


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



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


}

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

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

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

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

@H_403_6@ update(@H_403_6@ id,StringTitle)
{
sqliteDatabasedb@H_403_6@ {Integer.toString(id)};
ContentValuescv@H_403_6@ 403_6@
@H_403_6@

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

    @H_403_6@ public@H_403_6@ sqliteOpenHelper(Contextcontext,sqliteDatabase.CursorFactoryfactory,0)">version)
    Since:APILevel@H_403_6@ 1@H_403_6@
    Createahelperobjecttocreate,open,and@H_403_6@ /@H_403_6@ ormanageadatabase.ThedatabaseisnotactuallycreatedoropeneduntiloneofgetWritableDatabase()orgetReadableDatabase()iscalled.

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

    PublicMethods@H_403_6@
    @H_403_6@

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


    }
    @H_403_6@
    @H_403_6@

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

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

    @H_403_6@
    long@H_403_6@ insert(StringTitle)
    {
    sqliteDatabasedb@H_403_6@ this@H_403_6@ .getWritableDatabase();
    ContentValuescv@H_403_6@ new@H_403_6@ 403_6@ row@H_403_6@ 403_6@ return@H_403_6@ row;
    }@H_403_6@
    @H_403_6@
  • 删除数据--》Delete
    依此类推,添加数据用Insert,那么删除数据为Delete

    @H_403_6@
    delete(@H_403_6@ id)
    {
    sqliteDatabasedb@H_403_6@ .getWritableDatabase();
    Stringwhere@H_403_6@ =?@H_403_6@ ;
    String[]whereValue@H_403_6@ 403_6@
    @H_403_6@
  • 修改数据--》Update
    @H_403_6@
    update(@H_403_6@ sqliteDatabasedb@H_403_6@ {Integer.toString(id)};
    ContentValuescv@H_403_6@ @H_403_6@
  • 可根据自己需要修改字段自行加参数。
  • 查询数据--》Query

    public@H_403_6@ Cursorselect()
    {
    sqliteDatabasedb@H_403_6@ =@H_403_6@ this@H_403_6@ .getReadableDatabase();
    Cursorcursor@H_403_6@ 403_6@ null@H_403_6@ "@H_403_6@ _iddesc@H_403_6@ );
    @H_403_6@ return@H_403_6@ cursor;
    }@H_403_6@

    在 Android 中查询数据是通过 Cursor 类来实现的,当我们使用sqliteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询方法,具体截图如下:
  •   现在dbHelper己经封装完毕,接下来正式进入到我们实际例子中要操作的功能吧,项目运行效果图:

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

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


    @H_403_6@ testDbActivity@H_403_6@ Activity{

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

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

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



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

    myListView.setOnItemClickListener(@H_403_6@ OnItemClickListener(){

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


    myListView.setOnItemSelectedListener(@H_403_6@ OnItemSelectedListener(){

    @Override
    @H_403_6@ onItemSelected(AdapterView@H_403_6@ sqliteCursorsc@H_403_6@ (sqliteCursor)arg0.getSelectedItem();
    _id@H_403_6@ sc.getInt(@H_403_6@ );
    myEditText.setText(sc.getString(@H_403_6@ ));
    }

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

    猜你在找的Sqlite相关文章