新聞中心
隨著 Android 手機(jī)的普及,越來(lái)越多的應(yīng)用程序需要使用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)和管理數(shù)據(jù)。而 Android 提供了一個(gè)輕量級(jí)的 SQLite 數(shù)據(jù)庫(kù),可以讓開(kāi)發(fā)者方便地進(jìn)行數(shù)據(jù)庫(kù)操作。本文將深入了解 Android 數(shù)據(jù)庫(kù)的操作,包括數(shù)據(jù)庫(kù)的創(chuàng)建和升級(jí)、表的創(chuàng)建和刪除、數(shù)據(jù)的插入和查詢等。

10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有本溪免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
一、數(shù)據(jù)庫(kù)的創(chuàng)建與升級(jí)
SQLite 數(shù)據(jù)庫(kù)是 Android 系統(tǒng)中內(nèi)置的一種嵌入式數(shù)據(jù)庫(kù),開(kāi)發(fā)者可以在應(yīng)用程序中方便地創(chuàng)建和使用它。在使用 SQLite 數(shù)據(jù)庫(kù)之前,需要先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)。下面是創(chuàng)建數(shù)據(jù)庫(kù)的代碼:
“`
public static final String DB_NAME = “my_db”;
public static final int DB_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
“`
上面的代碼定義了一個(gè)名為“my_db”、版本號(hào)為 1 的數(shù)據(jù)庫(kù),通過(guò)繼承 SQLiteOpenHelper 實(shí)現(xiàn)創(chuàng)建和升級(jí)數(shù)據(jù)庫(kù)的操作。在創(chuàng)建完數(shù)據(jù)庫(kù)之后,就可以在應(yīng)用程序中使用它了。
如果需要升級(jí)數(shù)據(jù)庫(kù),可以通過(guò)在 onUpgrade() 方法中修改數(shù)據(jù)庫(kù)表結(jié)構(gòu)來(lái)實(shí)現(xiàn)。例如下面的代碼實(shí)現(xiàn)了從版本 1 升級(jí)到版本 2 并添加了一個(gè)新的表:
“`
public static final int DB_VERSION = 2;
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion
db.execSQL(“CREATE TABLE new_table (id INTEGER PRIMARY KEY AUTOINCREMENT, value TEXT)”);
}
}
“`
在 onUpgrade() 方法中,首先判斷原數(shù)據(jù)庫(kù)的版本號(hào)是否小于 2,如果是則執(zhí)行創(chuàng)建新表的 SQL 語(yǔ)句。在 Android 中,數(shù)據(jù)庫(kù)的升級(jí)一般是通過(guò)增加版本號(hào)來(lái)實(shí)現(xiàn)的。
二、表的創(chuàng)建與刪除
在創(chuàng)建完數(shù)據(jù)庫(kù)之后,下一步就是創(chuàng)建表格??梢酝ㄟ^(guò)執(zhí)行 SQL 語(yǔ)句來(lái)創(chuàng)建表格,例如下面的代碼創(chuàng)建了一個(gè)名為“my_table”的表格:
“`
public static final String TABLE_NAME = “my_table”;
public static final String ID_COLUMN = “id”;
public static final String NAME_COLUMN = “name”;
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(“CREATE TABLE ” + TABLE_NAME + ” (” + ID_COLUMN + ” INTEGER PRIMARY KEY AUTOINCREMENT, ” + NAME_COLUMN + ” TEXT)”);
}
“`
上面的代碼創(chuàng)建了一個(gè)包含 id 和 name 兩個(gè)字段的表格,其中 id 是主鍵并自動(dòng)遞增。通過(guò)類似的語(yǔ)句可以創(chuàng)建具有不同字段和約束條件的表格。
除了創(chuàng)建表格,還可以通過(guò) SQL 語(yǔ)句來(lái)刪除表格,例如下面的代碼刪除了名為“my_table”的表格:
“`
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion
db.execSQL(“DROP TABLE IF EXISTS ” + TABLE_NAME);
}
}
“`
在升級(jí)數(shù)據(jù)庫(kù)的操作中,如果要?jiǎng)h除表格需要先判斷該表格是否存在??赏ㄟ^(guò)“DROP TABLE IF EXISTS”語(yǔ)句實(shí)現(xiàn)刪除操作。在刪除表格之前,需要把表格中的數(shù)據(jù)備份到其他位置以免數(shù)據(jù)丟失。
三、數(shù)據(jù)的插入與查詢
在創(chuàng)建表格之后,下一步就是對(duì)表格進(jìn)行操作。常見(jiàn)的操作有數(shù)據(jù)的插入、刪除、修改和查詢。本節(jié)討論數(shù)據(jù)的插入和查詢操作。
1、數(shù)據(jù)的插入
向表格中插入數(shù)據(jù),可以使用 insert() 方法。例如下面的代碼向名為“my_table”的表格插入一行數(shù)據(jù):
“`
ContentValues values = new ContentValues();
values.put(NAME_COLUMN, “test_name”);
long newRowId = db.insert(TABLE_NAME, null, values);
“`
上面的代碼中,首先用 ContentValues 對(duì)象封裝數(shù)據(jù),然后調(diào)用 insert() 方法向表格中插入該數(shù)據(jù)。insert() 方法返回一個(gè)表示新行 id 的值,表示該數(shù)據(jù)所在行的 id 值,可以用于后續(xù)的操作。
2、數(shù)據(jù)的查詢
查詢表格中的數(shù)據(jù),可以使用 query() 方法。例如下面的代碼查詢名為“my_table”的表格中所有數(shù)據(jù):
“`
String[] projection = {ID_COLUMN, NAME_COLUMN};
String sortOrder = ID_COLUMN + ” DESC”;
Cursor cursor = db.query(TABLE_NAME, projection, null, null, null, null, sortOrder);
while (cursor.moveToNext()) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(ID_COLUMN));
String name = cursor.getString(cursor.getColumnIndexOrThrow(NAME_COLUMN));
}
cursor.close();
“`
上面的代碼中,首先定義了需要返回的字段數(shù)組和排序方式。然后調(diào)用 query() 方法查詢表格中的數(shù)據(jù),并將查詢結(jié)果封裝到 Cursor 對(duì)象中。從 Cursor 對(duì)象中可以逐行提取數(shù)據(jù)并進(jìn)行處理。
四、
本文深入介紹了 Android 數(shù)據(jù)庫(kù)的操作,包括數(shù)據(jù)庫(kù)的創(chuàng)建和升級(jí)、表格的創(chuàng)建和刪除、數(shù)據(jù)的插入和查詢等。掌握了這些操作之后,開(kāi)發(fā)者就能夠方便地使用 SQLite 數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)和管理 App 的數(shù)據(jù)了。當(dāng)然,實(shí)際應(yīng)用場(chǎng)景下,還需要根據(jù)不同的需求進(jìn)行具體的設(shè)計(jì)和實(shí)現(xiàn)。
相關(guān)問(wèn)題拓展閱讀:
- android怎么鏈接數(shù)據(jù)庫(kù)mysql
- 請(qǐng)簡(jiǎn)要描述Android中數(shù)據(jù)庫(kù)操作的一般步驟
android怎么鏈接數(shù)據(jù)庫(kù)mysql
有點(diǎn)多請(qǐng)耐心看完。
希望能幫助你,還請(qǐng)及時(shí)采納謝謝。
一.前言
android連接數(shù)據(jù)庫(kù)的方式有兩種,之一種是通過(guò)連接服務(wù)器,再由服務(wù)器讀取數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)數(shù)據(jù)的增刪改查,這也是我們常用的方式。第二種方式是android直接連接數(shù)據(jù)庫(kù),這種方式非常耗手機(jī)內(nèi)存,而且容易被
反編譯
造成
安全隱患
,所以在實(shí)際項(xiàng)目中不推薦使用。
二.準(zhǔn)備工作
1.加載外部jar包
在Android工程中要使用jdbc的話,要導(dǎo)入jdbc的外部jar包,因?yàn)樵贘ava的jdk中并沒(méi)有jdbc的api,我使用的jar包是mysql-connector-java-5.1.18-bin.jar包,網(wǎng)絡(luò)上有使用mysql-connector-java-5.1.18-bin.jar包的,自己去用的時(shí)候發(fā)現(xiàn)不兼容,所以下載了比較新版本的,jar包可以去官網(wǎng)下載,也可以去百度,有很多前人們上傳的。
2.導(dǎo)入jar包的方式
方式一:
可以在項(xiàng)目的build.gradle文件中直接添加如下語(yǔ)句導(dǎo)入
compile files(‘libs/mysql-connector-java-5.1.18-bin.jar’)
方式二:下載jar包復(fù)制到項(xiàng)目的libs目錄下,然后右鍵復(fù)制過(guò)來(lái)的jar包Add as libs
三.建立數(shù)據(jù)庫(kù)連接
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jdbc);
new Thread(runnable).start();
}
Handler myHandler=new Handler(){
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
Bundle data=new Bundle();
data=msg.getData();
//System.out.println(“id:”+data.get(“id”).toString()); //輸出第n行,列名為“id”的值
Log.e(“TAG”,”id:”+data.get(“id”).toString());
TextView tv= (TextView) findViewById(R.id.jdbc);
//System.out.println(“content:”+data.get(“content”).toString());
}
};
Runnable runnable=new Runnable() {
private Connection con = null;
@Override
public void run() {
// TODO Auto-generated method stub
try {
Class.forName(“com.mysql.jdbc.Driver”);
//引用代碼此處需要修改,address為數(shù)據(jù)IP,Port為
端口號(hào)
,DBName為數(shù)據(jù)名稱,UserName為數(shù)據(jù)庫(kù)登錄賬戶,Password為數(shù)據(jù)庫(kù)登錄密碼
con =
//DriverManager.getConnection(“jdbc: “root”, “”);
DriverManager.getConnection(“jdbc:
“,
UserName,Password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
testConnection(con); //測(cè)試數(shù)據(jù)庫(kù)連接
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void testConnection(Connection con1) throws java.sql.SQLException {
try {
String sql = “select * from ecs_users”;//查詢表名為“oner_alarm”的所有內(nèi)容
Statement stmt = con1.createStatement();//創(chuàng)建Statement
ResultSet rs = stmt.executeQuery(sql);//ResultSet類似Cursor
//ResultSet最初指向之一行
Bundle bundle=new Bundle();
while (rs.next()) {
bundle.clear();
bundle.putString(“id”,rs.getString(“userid”));
//bundle.putString(“content”,rs.getString(“content”));
Message msg=new Message();
msg.setData(bundle);
myHandler.sendMessage(msg);
}
rs.close();
stmt.close();
} catch (SQLException e) {
} finally {
if (con1 != null)
try {
con1.close();
} catch (SQLException e) {}
}
}
};
注意:
在Android4.0之后,不允許在主
線程
中進(jìn)行比較耗時(shí)的操作(連接數(shù)據(jù)庫(kù)就屬于比較耗時(shí)的操作),需要開(kāi)一個(gè)新的線程來(lái)處理這種耗時(shí)的操作,沒(méi)新線程時(shí),一直就是程序直接退出,開(kāi)了一個(gè)新線程處理直接,就沒(méi)問(wèn)題了。
當(dāng)然,連接數(shù)據(jù)庫(kù)是需要網(wǎng)絡(luò)的,千萬(wàn)別忘了添加訪問(wèn)網(wǎng)絡(luò)權(quán)限:
四.bu
1.導(dǎo)入的jar包一定要正確
2.連接數(shù)據(jù)庫(kù)一定要開(kāi)啟新線程
3.數(shù)據(jù)庫(kù)的IP一定要是可以ping通的,局域網(wǎng)地址手機(jī)是訪問(wèn)不了的
4.數(shù)據(jù)庫(kù)所在的服務(wù)器是否開(kāi)了防火墻,阻止了訪問(wèn)
————————————————
版權(quán)聲明:本文為CSDN博主「shuaiyou_comon」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:
請(qǐng)簡(jiǎn)要描述Android中數(shù)據(jù)庫(kù)操作的一般步驟
這個(gè)建議先把 SqliteOpenHelper 這個(gè)數(shù)據(jù)庫(kù) 操作類 看看 你就懂了
關(guān)于android 數(shù)據(jù)庫(kù)詳解的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)網(wǎng)絡(luò)推廣網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì),網(wǎng)站建設(shè)公司,網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),1500元定制網(wǎng)站優(yōu)化全包,先排名后付費(fèi),已為上千家服務(wù),聯(lián)系電話:13518219792
當(dāng)前題目:深入了解Android數(shù)據(jù)庫(kù)操作詳解(android數(shù)據(jù)庫(kù)詳解)
URL鏈接:http://m.5511xx.com/article/dhdjgdh.html


咨詢
建站咨詢
