Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中SQLite數據庫的簡單使用

Android中SQLite數據庫的簡單使用

編輯:關於Android編程

File file = new File(“hah.txt”);

//只是創建了一個對象file, file指向了hah.txt這個文件,hah.txt這個文件可能存在,也可能不存在。如果文件不存在,則不會被創建。

必須要有文件輸出流對文件進行了寫的操作,文件才會被創建。

 

游標:在訪問數據庫中表結構時,想訪問表中的某一行的時候,數據庫內部有一個快速的定位方式,這個定位方式是通過索引來實現的。游標相當於數組的指針,通過游標的上下移動來查找數據。


在Android中使用SQLite數據庫,需要繼承SQLiteOpenHelper,該類沒有提供默認的構造函數,所以在子類中必須顯示的調用該類的構造函數。

創建數據庫

package com.test.sqllitedemo;

 

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

 

public class MyDBOpenHelper extends SQLiteOpenHelper {

//子類構造函數的參數不一定要和父類構造函數的參數一一對應

public MyDBOpenHelper(Context context) {

/**

* @paramcontext 上下文

* @paramname 數據庫文件的名稱

* @paramfactory 用來創建游標對象,null就用默認的游標工廠

* @paramversion 數據庫的版本 號,從1開始。用來更新數據庫。

* 數據庫後綴名不是固定的,寫為.db只是為了方便查看和識別

*/

super(context, "test.db", null,1);

}

 

@Override

//數據庫第一次創建的時候自動執行

public void onCreate(SQLiteDatabase db) {

}

 

@Override

//數據庫版本更新時自動執行

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO Auto-generated method stub

}

 

}

創建數據庫

package com.test.sqllitedemo;

 

import android.app.Activity;

import android.os.Bundle;

 

public class MainActivity extends Activity {

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//執行該行代碼,數據庫不會被創建,只是創建了一個數據庫對象

MyDBOpenHelper helper = new MyDBOpenHelper(this);

//創建或者打開一個數據庫,該數據庫具有讀寫權限,位於data/data/應用程序包名/databases /文件夾下面

helper.getWritableDatabase();

}

 

}

 

在SQLite中創建表

SQLite中所有數據類型默認存儲都是字符串類型的,沒有長度限制的。超過表定義時的數據長度,也不會報錯。

在Android中SQLite會自動創建一張名為android_metadata的表。用於存儲當前的語言環境的。在SQLite中id推薦使用_id。

SQLite的數據庫版本只能增大,不能減小。

package com.test.sqllitedemo;

 

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

 

public class MyDBOpenHelper extends SQLiteOpenHelper {

//子類構造函數的參數不一定要和父類構造函數的參數一一對應

public MyDBOpenHelper(Context context) {

/**

* @paramcontext 上下文

* @paramname 數據庫文件的名稱

* @paramfactory 用來創建游標對象,null就用默認的游標工廠

* @paramversion 數據庫的版本 號,從1開始。用來更新數據庫。

* 數據庫後綴名不是固定的,寫為.db只是為了方便查看和識別

*/

super(context, "test.db", null,1);

}

 

@Override

//數據庫第一次創建的時候自動執行,如果數據庫已經存在,則不會再次調用該方法

/**

* 該方法中創建表結構,初始化數據庫

* @param db 代表的是創建好的數據庫

*/

public void onCreate(SQLiteDatabase db) {

// TODO Auto-generated method stub

//執行SQL語句

db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varchar(20))");

}

 

@Override

//數據庫版本更新時自動執行,即數據庫版本號有變化的時候執行 數據庫的版本只能變大,不能變小

//int oldVersion, int newVersion用來完成跨版本升級數據庫時保持數據

//如果是壟斷性行業,數據是一次有效的情況下,可以強制以前數據失效的方式升級,讓用戶重新輸入數據

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO Auto-generated method stub

db.execSQL("alter table info add money varchar(10)");

}

}

 

EL表達式只能在jsp頁面中使用。

 

數據庫的增刪改查。

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.test.databaseoper.MainActivity" >

android:onClick="add"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:text="add" />

android:onClick="update"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:text="update" />

android:onClick="delete"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:text="delete" />

android:onClick="query"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:text="query" />

 

 

 

package com.test.databaseoper;

 

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

 

public class MyDBOpenHelper extends SQLiteOpenHelper {

//子類構造函數的參數不一定要和父類構造函數的參數一一對應

public MyDBOpenHelper(Context context) {

/**

* @param context 上下文

* @param name 數據庫文件的名稱

* @param factory 用來創建游標對象,null就用默認的游標工廠

* @param version 數據庫的版本 號,從1開始。用來更新數據庫。

* 數據庫後綴名不是固定的,寫為.db只是為了方便查看和識別

*/

super(context, "test.db", null,1);

 

}

 

@Override

//數據庫第一次創建的時候自動執行,如果數據庫已經存在,則不會再次調用該方法

/**

* 該方法中創建表結構,初始化數據庫

* @param db 代表的是創建好的數據庫

*/

public void onCreate(SQLiteDatabase db) {

// TODO Auto-generated method stub

//執行SQL語句

db.execSQL("create table info (_id integer primary key autoincrement,name varchar(20),phone varch ar(20))");

}

 

@Override

//數據庫版本更新時自動執行,即數據庫版本號有變化的時候執行 數據庫的版本只能變大,不能變小

//int oldVersion, int newVersion用來完成跨版本升級數據庫時保持數據

//如果是壟斷性行業,數據是一次有效的情況下,可以強制以前數據失效的方式升級,讓用戶重新輸入數據

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO Auto-generated method stub

db.execSQL("alter table info add money varchar(10)");

}

 

}

 

 

package com.test.databaseoper;

 

import java.util.Random;

 

import android.app.Activity;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

 

public class MainActivity extends Activity {

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

 

}

 

public void add(View view){

//創建數據庫

MyDBOpenHelper helper = new MyDBOpenHelper(this);

SQLiteDatabase db = helper.getWritableDatabase();

Random random = new Random();

String sql = "insert into info(name,phone)values(?,?)";

//在SQLite中,也可以使用占位符來傳遞參數

db.execSQL(sql, new Object[]{"lisi"+random.nextInt(100),"453231"});

//釋放資源

db.close();

}

 

public void delete(View view){

 

}

 

public void update(View view){

 

}

 

public void query(View view){

MyDBOpenHelper helper = new MyDBOpenHelper(this);

SQLiteDatabase db = helper.getWritableDatabase();

String sql = "select * from info";

Cursor cursor = db.rawQuery(sql, null);

while (cursor.moveToNext()) {

String id = cursor.getString(0);

String name = cursor.getString(1);

String phone = cursor.getString(2);

System.out.println(id+" "+name+" "+phone);

}

//釋放資源

cursor.close();

db.close();

}

}

 

在SQLite中,所有的數據都是當做字符串存的。

Android數據庫中支持中文顯示

 

查看SQLite中表中的數據的三種方式

1.寫sql語句把數據查出,顯示在logcat中查看

2.在應用程序獨立數據區,把數據庫pull出來,然後再可是話工具中查看

3.在命令行查看SQLite數據庫中表中的數據

\

更改命令行默認的編碼集

chcp(change current page) 65001(utf-8的編碼值)


插入重復數據時,應該提示用戶是否覆蓋已有的數據。

刪除數據時,應該提示用戶是否確定刪除。

 

程序的設計應該有良好的提示和操作方式。

 

查詢操作不會更改數據庫中的內容。一般獲取可讀的數據庫。

多線程寫數據庫,必須明確寫入的先後順序。以及加鎖。

讀的操作可以多線程並發操作,寫數據庫的操作必須枷鎖。

 

googleAndroidapi對數據庫的增刪改查

package com.test.databaseoper;

 

import java.util.Random;

 

import android.app.Activity;

import android.content.ContentValues;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

import android.widget.Toast;

 

public class GoogleDataBaseOPR extends Activity {

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

 

public void add(View view) {

// 創建數據庫

MyDBOpenHelper helper = new MyDBOpenHelper(this);

SQLiteDatabase db = helper.getWritableDatabase();

Random random = new Random();

ContentValues values = new ContentValues();

values.put("name", "lisi" + random.nextInt(100));

values.put("phone", "12345678");

 

/*

* db.insert(table, nullColumnHack, values)

* 第一個參數:表名

* 第二個參數:要填充空值的列

* 第三個參數:插入的值 map集合,ContentValues

*/

long id = db.insert("info", null, values);

if (id != -1) {

Toast.makeText(this, "添加成功,添加在" + id + "行", Toast.LENGTH_SHORT)

.show();

} else {

Toast.makeText(this, "添加失敗", Toast.LENGTH_SHORT).show();

}

// 釋放資源

db.close();

}

 

public void delete(View view) {

MyDBOpenHelper helper = new MyDBOpenHelper(this);

SQLiteDatabase db = helper.getWritableDatabase();

/*

* db.delete(table, whereClause, whereArgs)

* 第一個參數:表名

* 第二個參數:選擇條件

* 第三個參數:選擇條件的參數

* 返回值:刪除的行數,如果沒有刪除,返回0;

*/

int result = db.delete("info", null, null);

db.close();

if (result != 0) {

Toast.makeText(this, "刪除"+ result + "行", Toast.LENGTH_SHORT)

.show();

} else {

Toast.makeText(this, "刪除失敗" , Toast.LENGTH_SHORT).show();

}

}

 

public void update(View view) {

MyDBOpenHelper helper = new MyDBOpenHelper(this);

SQLiteDatabase db = helper.getWritableDatabase();

/*

* db.update(table, values, whereClause, whereArgs)

* 第一個參數:表名

* 第二個參數:插入的值

* 第三個參數:選擇條件,沒有選擇條件時填null

* 第四個參數:選擇條件的參數 沒有參數時填null

* 返回值:修改的行數,如果沒有修改,返回0;

*/

ContentValues values = new ContentValues();

values.put("name", "lisi");

values.put("phone", "12345678");

int result = db.update("info", values, null, null);

if (result != 0) {

Toast.makeText(this, "修改了第"+ result + "行", Toast.LENGTH_SHORT)

.show();

} else {

Toast.makeText(this, "修改失敗" , Toast.LENGTH_SHORT).show();
}

}

 

public void query(View view) {

MyDBOpenHelper helper = new MyDBOpenHelper(this);

SQLiteDatabase db = helper.getWritableDatabase();

/*

* db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)

* 第一個參數:表名

* 第二個參數:返回的列 null表示返回所有列

* 第三個參數:選擇條件,沒有選擇條件寫null

* 第四個參數:選擇條件的參數,沒有選擇條件參數寫null

* 第五個參數:分組條件,沒有寫null

* 第六個參數:分組條件,沒有寫null

* 第七個參數:分組條件,沒有寫null

* 返回值:查詢結果的記錄的條數

*/

//Cursor cursor = db.query("info", null, null, null,null,null,null);

Cursorcursor=db.query("info",newString[]{"_id","name","phone"},null,null,null,null,null);

while (cursor.moveToNext()) {

String id = cursor.getString(0);

String name = cursor.getString(1);

String phone = cursor.getString(2);

System.out.println(id+" "+name+" "+phone);

}

//釋放資源

cursor.close();

db.close();

db.close();

}

}

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved