新聞中心
在Android應(yīng)用程序中,存儲(chǔ)和管理數(shù)據(jù)是非常重要的一部分。Android提供了SQLite數(shù)據(jù)庫來存儲(chǔ)和管理數(shù)據(jù)。SQLite是一個(gè)輕量級的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),能夠提供快速和高效的數(shù)據(jù)存儲(chǔ)和檢索功能。在本文中,我們將介紹如何在Android上建立和管理SQLite數(shù)據(jù)庫。

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站與策劃設(shè)計(jì),銀川網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:銀川等地區(qū)。銀川做網(wǎng)站價(jià)格咨詢:18982081108
之一步:創(chuàng)建數(shù)據(jù)庫幫助器類
在Android開發(fā)中,建議使用單例模式來創(chuàng)建數(shù)據(jù)庫幫助器類。這樣可以確保在整個(gè)應(yīng)用程序中只有一個(gè)數(shù)據(jù)庫連接。它還可以避免重復(fù)創(chuàng)建數(shù)據(jù)庫實(shí)例,從而提高應(yīng)用程序的性能。
在創(chuàng)建數(shù)據(jù)庫幫助器類之前,需要確保我們已經(jīng)準(zhǔn)備好了創(chuàng)建數(shù)據(jù)庫所需的所有數(shù)據(jù)表。創(chuàng)建數(shù)據(jù)表的語法與標(biāo)準(zhǔn)的SQL語法類似。為了避免代碼中的硬編碼,可以定義一個(gè)常量類來存儲(chǔ)所有的SQL查詢語句。
下面是一個(gè)示例代碼片段,它演示了如何創(chuàng)建一個(gè)名為“my_database.db”的數(shù)據(jù)庫和一個(gè)數(shù)據(jù)表:
“`
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = “my_database.db”;
private static final int DB_VERSION = 1;
private static final String TABLE_NAME = “my_table”;
private static final String COL_NAME = “name”;
private static final String COL_AGE = “age”;
private static final String CREATE_SQL = “CREATE TABLE ” + TABLE_NAME +
” (_id INTEGER PRIMARY KEY AUTOINCREMENT, ” +
COL_NAME + ” TEXT NOT NULL, ” +
COL_AGE + ” INTEGER);”;
private static final String DROP_SQL = “DROP TABLE IF EXISTS ” + TABLE_NAME;
private static MyDatabaseHelper sInstance;
public synchronized static MyDatabaseHelper getInstance(Context context) {
if (sInstance == null) {
sInstance = new MyDatabaseHelper(context.getApplicationContext());
}
return sInstance;
}
private MyDatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_SQL);
onCreate(db);
}
}
“`
在此代碼中,我們實(shí)現(xiàn)了數(shù)據(jù)庫幫助器類MyDatabaseHelper,并定義了常量DB_NAME和DB_VERSION。我們還定義了常量TABLE_NAME、COL_NAME和COL_AGE來存儲(chǔ)數(shù)據(jù)表的名稱和列名稱。CREATE_SQL和DROP_SQL是創(chuàng)建和刪除數(shù)據(jù)表的SQL查詢語句。我們實(shí)現(xiàn)了onCreate()和onUpgrade()方法,這兩個(gè)方法將在數(shù)據(jù)庫創(chuàng)建和數(shù)據(jù)庫升級時(shí)自動(dòng)調(diào)用。
第二步:打開/關(guān)閉數(shù)據(jù)庫連接
在Android中,所有的數(shù)據(jù)庫操作都必須通過SQLiteDatabase類來完成。要訪問數(shù)據(jù)庫,需要首先打開數(shù)據(jù)庫連接。在完成數(shù)據(jù)庫操作后,必須關(guān)閉數(shù)據(jù)庫連接,以便釋放資源。
“`
public class MyDataManager {
private SQLiteDatabase mDatabase;
public MyDataManager(Context context) {
mDatabase = MyDatabaseHelper.getInstance(context).getWritableDatabase();
}
public void close() {
if (mDatabase != null) {
mDatabase.close();
mDatabase = null;
}
}
}
“`
在此代碼中,我們實(shí)現(xiàn)了MyDataManager類,它用于管理數(shù)據(jù)庫連接。我們實(shí)現(xiàn)了構(gòu)造函數(shù)和關(guān)閉數(shù)據(jù)庫連接的方法。在構(gòu)造函數(shù)中,我們獲取數(shù)據(jù)庫連接,以便執(zhí)行SQL查詢語句。在關(guān)閉方法中,我們關(guān)閉數(shù)據(jù)庫連接,并將mDatabase設(shè)置為null,以便在下一次打開數(shù)據(jù)庫連接時(shí)重新創(chuàng)建。
第三步:插入數(shù)據(jù)
在Android中,添加數(shù)據(jù)通常使用insert方法。該方法接受三個(gè)參數(shù),之一個(gè)是表名,第二個(gè)是要插入的數(shù)據(jù),第三個(gè)是插入數(shù)據(jù)時(shí)需要忽略的列的名稱。在插入數(shù)據(jù)時(shí),可以使用ContentValues類來存儲(chǔ)數(shù)據(jù)。
“`
public class MyDataManager {
…
public void insertData(String name, int age) {
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.COL_NAME, name);
values.put(MyDatabaseHelper.COL_AGE, age);
mDatabase.insert(MyDatabaseHelper.TABLE_NAME, null, values);
}
}
“`
在此代碼中,我們實(shí)現(xiàn)了insertData方法,可將數(shù)據(jù)插入名為“my_table”的數(shù)據(jù)表中的“name”和“age”列。
第四步:查詢數(shù)據(jù)
查詢數(shù)據(jù)通常使用query方法。該方法接受四個(gè)參數(shù),之一個(gè)是表名,第二個(gè)是要返回的列,第三個(gè)是WHERE子句,第四個(gè)是WHERE子句的參數(shù)。查詢結(jié)果將返回一個(gè)光標(biāo),光標(biāo)用于遍歷結(jié)果集。
“`
public class MyDataManager {
…
public Cursor queryData() {
String[] columns = {MyDatabaseHelper.COL_NAME, MyDatabaseHelper.COL_AGE};
return mDatabase.query(MyDatabaseHelper.TABLE_NAME, columns, null, null, null, null, null);
}
}
“`
在此代碼中,我們實(shí)現(xiàn)了queryData方法,以返回“my_table”數(shù)據(jù)表中的所有數(shù)據(jù)。
第五步:更新數(shù)據(jù)
更新數(shù)據(jù)通常使用update方法。該方法接受四個(gè)參數(shù),之一個(gè)是表名,第二個(gè)是要更新的數(shù)據(jù),第三個(gè)是WHERE子句,第四個(gè)是WHERE子句的參數(shù)。
“`
public class MyDataManager {
…
public void updateData(String name, int age) {
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.COL_NAME, name);
values.put(MyDatabaseHelper.COL_AGE, age);
mDatabase.update(MyDatabaseHelper.TABLE_NAME, values, MyDatabaseHelper.COL_AGE + “=?”, new String[] { String.valueOf(age) });
}
}
“`
在此代碼中,我們實(shí)現(xiàn)了updateData方法,以更新年齡等于參數(shù)age的人員的姓名。
第六步:刪除數(shù)據(jù)
刪除數(shù)據(jù)通常使用delete方法。該方法接受三個(gè)參數(shù),之一個(gè)是表名,第二個(gè)是WHERE子句,第三個(gè)是WHERE子句的參數(shù)。
“`
public class MyDataManager {
…
public void deleteData(int age) {
mDatabase.delete(MyDatabaseHelper.TABLE_NAME, MyDatabaseHelper.COL_AGE + “=?”, new String[] { String.valueOf(age) });
}
}
“`
在此代碼中,我們實(shí)現(xiàn)了deleteData方法,以刪除年齡等于參數(shù)age的人員的所有記錄。
在Android開發(fā)中,SQLite數(shù)據(jù)庫是最常用和更受歡迎的數(shù)據(jù)存儲(chǔ)技術(shù)之一。通過本文介紹的一些技巧和技術(shù),開發(fā)人員可以輕松地構(gòu)建和管理SQLite數(shù)據(jù)庫。讓我們開始構(gòu)建您的應(yīng)用程序,并使用SQLite數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲(chǔ)和管理!
相關(guān)問題拓展閱讀:
- Android創(chuàng)建數(shù)據(jù)庫需要做哪些事情
Android創(chuàng)建數(shù)據(jù)庫需要做哪些事情
首先:使用Eclipse創(chuàng)建一個(gè)Android項(xiàng)目,取名為Database
操作數(shù)據(jù)庫的更佳實(shí)踐是創(chuàng)建一個(gè)輔助類,由它封裝所有對數(shù)據(jù)庫的復(fù)雜訪問,對于調(diào)用代碼而言它是透明的,因此我創(chuàng)建了一個(gè)
DBAdapter
的輔助類,由它創(chuàng)建、打開、關(guān)閉和使用SQLite數(shù)據(jù)庫。
首先,在src/文件夾
(
在這個(gè)例子中是
src/net.learn2develop.Database)下添加一個(gè)DBAdapter.java文件。
在DBAdapter.java文件中,導(dǎo)入所有你要使用到的命名空間:
package net.learn2develop.Databases;
import android.content.ContentValues;
import android.content.Context;
import android.
database
.
Cursor
;
import android.
database
.SQLException;
import android.
database
.sqlite.SQLiteDatabase;
import android.
database
.sqlite.SQLiteOpenHelper;
import android.util.
Log
;
public
class DBAdapter
{
}
.sqlite.SQLiteDatabase;
import android.
database
.sqlite.SQLiteOpenHelper;
import android.util.
Log
;
public
class DBAdapter
{
}
接下來創(chuàng)建一個(gè)數(shù)據(jù)庫,取名為bookstitles在DBAdapter.java文件中,定義清單1中的常量。清單1 定義DBAdapter.java文件中的常量
package net.learn2develop.
Database
;
import android.content.ContentValues;
import android.content.Context;
import android.
database
.
Cursor
;
import android.
database
.SQLException;
import android.
database
.sqlite.SQLiteDatabase;
import android.
database
.sqlite.SQLiteOpenHelper;
import android.util.Log; public class DBAdapter {
public static final String KEY_ROWID = “_id”; public static final String KEY_ISBN = “in”; public static final String KEY_TITLE = “title”;
public static final String KEY_PUBLISHER = “publisher”; private static final String TAG = “DBAdapter”; private static final String DATABASE_NAME = “books”; private static final String DATABASE_TABLE = “titles”; private static final int DATABASE_VERSION = 1; private static final String DATABASE_CREATE =
“create table titles (_id integer primary key autoincrement, ” + “in text not null, title text not null, ” + “publisher text not null);”; private final Context context; }
DATABASE_CREATE常量包括創(chuàng)建扮禪titles表的SQL語句。
在DBAdapter類中,你可以擴(kuò)展SQLiteOpenHelper類,遲液它是一個(gè)Android輔助類,主要用于數(shù)據(jù)庫碼缺物創(chuàng)建和版本管理。實(shí)際上,你可以覆蓋onCreate()和onUpgrade()方法,如清單2所示。
清單2 在DBAdapter類中,擴(kuò)展SQLiteOpenHelper類覆蓋onCreate() 和 onUpgrade()方法
package net.learn2develop.Database; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DBAdapter {
public static final String KEY_ROWID = “_id”;
public static final String KEY_ISBN = “in”;
public static final String KEY_TITLE = “title”;
public static final String KEY_PUBLISHER = “publisher”;
private static final String TAG = “DBAdapter”;
private static final String DATABASE_NAME = “books”;
private static final String DATABASE_TABLE = “titles”;
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE =
“create table titles (_id integer primary key autoincrement, “
+ “in text not null, title text not null, “
+ “publisher text not null);”;
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdapter(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
Log.w(TAG, “Upgrading database from version ” + oldVersion
+ ” to “
+ newVersion + “, which will destroy all old data”);
db.execSQL(“DROP TABLE IF EXISTS titles”);
onCreate(db);
}
}
}
onCreate()方法創(chuàng)建一個(gè)新的數(shù)據(jù)庫,onUpgrade()方法用于升級數(shù)據(jù)庫,這可以通過檢查DATABASE_VERSION常量定義的值來實(shí)現(xiàn),對于onUpgrade()方法而言,只不過是簡單地刪除表,然后在創(chuàng)建表而已。
現(xiàn)在你可以定義不同的方法來打開和關(guān)閉數(shù)據(jù)庫,如清單3中的添加/編輯/刪除/行的函數(shù)。
清單3 定義打開和關(guān)閉數(shù)據(jù)庫以及增加/編輯/刪除表中行的方法
public class DBAdapter
{
//…
//…
//—打開數(shù)據(jù)庫—
public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return this;
}
//—關(guān)閉數(shù)據(jù)庫—
public void close()
{
DBHelper.close();
}
//—向數(shù)據(jù)庫插入一個(gè)標(biāo)題—
public long insertTitle(String in, String title, String publisher)
{
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_ISBN, in);
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_PUBLISHER, publisher);
return db.insert(DATABASE_TABLE, null, initialValues);
}
//—?jiǎng)h除一個(gè)指定的標(biāo)題—
public boolean deleteTitle(long rowId)
{
return db.delete(DATABASE_TABLE, KEY_ROWID + “=” + rowId, null) > 0;
}
//—檢索所有標(biāo)題—
public Cursor getAllTitles()
{
return db.query(DATABASE_TABLE, new String {
KEY_ROWID,
KEY_ISBN,
KEY_TITLE,
KEY_PUBLISHER},
null,
null,
null,
null,
null);
}
//—檢索一個(gè)指定的標(biāo)題—
public Cursor getTitle(long rowId) throws SQLException
{
Cursor mCursor =
db.query(true, DATABASE_TABLE, new String {
KEY_ROWID,
KEY_ISBN,
KEY_TITLE,
KEY_PUBLISHER
},
KEY_ROWID + “=” + rowId,
null,
null,
null,
null,
null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
//—更新一個(gè)標(biāo)題—
public boolean updateTitle(long rowId, String in,
String title, String publisher)
{
ContentValues args = new ContentValues();
args.put(KEY_ISBN, in);
args.put(KEY_TITLE, title);
args.put(KEY_PUBLISHER, publisher);
return db.update(DATABASE_TABLE, args,
KEY_ROWID + “=” + rowId, null) > 0;
}
}
注意Android使用Cursor類返回一個(gè)需要的值,Cursor作為一個(gè)指針從數(shù)據(jù)庫查詢返回結(jié)果集,使用Cursor允許Android更有效地管理它們需要的行和列,你使用ContentValues對象存儲(chǔ)鍵/值對,它的put()方法允許你插入不同數(shù)據(jù)類型的鍵值。
清單4顯示了完整的DBAdapter.java源代碼。
清單4 DBAdapter.java完整源代碼
package net.learn2develop.Database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter
{
public static final String KEY_ROWID = “_id”;
public static final String KEY_ISBN = “in”;
public static final String KEY_TITLE = “title”;
public static final String KEY_PUBLISHER = “publisher”;
private static final String TAG = “DBAdapter”;
private static final String DATABASE_NAME = “books”;
private static final String DATABASE_TABLE = “titles”;
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE =
“create table titles (_id integer primary key autoincrement, “
+ “in text not null, title text not null, “
+ “publisher text not null);”;
private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdapter(Context ctx)
{
this.context = ctx;
DBHelper = new DatabaseHelper(context);
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
DatabaseHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
Log.w(TAG, “Upgrading database from version ” + oldVersion
+ ” to “
+ newVersion + “, which will destroy all old data”);
db.execSQL(“DROP TABLE IF EXISTS titles”);
onCreate(db);
}
}
//—打開數(shù)據(jù)庫—
public DBAdapter open() throws SQLException
{
db = DBHelper.getWritableDatabase();
return this;
}
//—關(guān)閉數(shù)據(jù)庫—
public void close()
{
DBHelper.close();
}
//—向數(shù)據(jù)庫中插入一個(gè)標(biāo)題—
public long insertTitle(String in, String title, String publisher)
{
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_ISBN, in);
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_PUBLISHER, publisher);
return db.insert(DATABASE_TABLE, null, initialValues);
}
//—?jiǎng)h除一個(gè)指定標(biāo)題—
public boolean deleteTitle(long rowId)
{
return db.delete(DATABASE_TABLE, KEY_ROWID +
“=” + rowId, null) > 0;
}
//—檢索所有標(biāo)題—
public Cursor getAllTitles()
{
return db.query(DATABASE_TABLE, new String {
KEY_ROWID,
KEY_ISBN,
KEY_TITLE,
KEY_PUBLISHER},
null,
null,
null,
null,
null);
}
//—檢索一個(gè)指定標(biāo)題—
public Cursor getTitle(long rowId) throws SQLException
{
Cursor mCursor =
db.query(true, DATABASE_TABLE, new String {
KEY_ROWID,
KEY_ISBN,
KEY_TITLE,
KEY_PUBLISHER
},
KEY_ROWID + “=” + rowId,
null,
null,
null,
null,
null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
//—更新一個(gè)標(biāo)題—
public boolean updateTitle(long rowId, String in,
String title, String publisher)
{
ContentValues args = new ContentValues();
args.put(KEY_ISBN, in);
args.put(KEY_TITLE, title);
args.put(KEY_PUBLISHER, publisher);
return db.update(DATABASE_TABLE, args,
KEY_ROWID + “=” + rowId, null) > 0;
}
}
創(chuàng)建一個(gè)類繼承數(shù)據(jù)庫幫助類,在其中寫數(shù)據(jù)庫創(chuàng)建,更新方法
關(guān)于android數(shù)據(jù)庫建立數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營銷公司
成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì)制作,網(wǎng)站維護(hù),網(wǎng)絡(luò)營銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務(wù)。IDC基礎(chǔ)服務(wù):云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)、服務(wù)器租用、服務(wù)器托管提供四川、成都、綿陽、雅安、重慶、貴州、昆明、鄭州、湖北十堰機(jī)房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)。
新聞名稱:如何在Android上建立數(shù)據(jù)庫? (android數(shù)據(jù)庫建立數(shù)據(jù)庫)
瀏覽地址:http://www.dlmjj.cn/article/dpocdos.html


咨詢
建站咨詢
