當前位置:首頁 » 安卓系統 » androidsqlite類

androidsqlite類

發布時間: 2022-08-15 06:01:01

⑴ 如何在android中使用sqlite資料庫

android 中SQliteDatabase資料庫使用SQLiteOpenHelper輔助類來創建SQLite資料庫視圖,如下代碼:
create view 表名 as 定義

SQLiteOpenHelper類是一個輔助類,用於創建或打開資料庫。
該類的使用方法一般是自定義一個子類,繼承自SQLiteOpenHelper,並覆寫其中最關鍵的兩個方法:onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。當新建一個資料庫時會調用前者,一般在裡面做一些創建表或視圖的操作。資料庫版本升級時則會調用後者。
定義好子類後(假如叫SqlHelper),只要調用SqlHelper對象的getReadableDatabase()方法或getWritableDatabase()方法即可返回一個SQLiteDatabase對象。如果是第一次調用,則會創建資料庫。隨後可使用SQLiteDatabase對象的方法進行數據操作,如:execSQL(), insert(), update(), query(), rawQuery(), delete()等。

⑵ android上如何使用sqlite資料庫

1.打開資料庫Context類的openDatabase可以打開一個已經存在的資料庫,如果資料庫不存在,將會拋出FileNotFoundException異常。可以通過Context類的createDatabase函數建立一個新的資料庫。通過調用SQLiteDatabase 的execSQL方法,執行一條SQL語句建立一個新的數據表。代碼如下:public DBHelper(Context ctx) {try {//打開已經存在的資料庫 db = ctx.openDatabase(DATABASE_NAME, null); } catch (FileNotFoundException e) {try {//建立新的資料庫 db = ctx.createDatabase(DATABASE_NAME, DATABASE_VERSION, 0, null); //建立數據表 db.execSQL(DATABASE_CREATE); } catch (FileNotFoundException e1) {db = null;}}}2.獲取表中的數據建立一個游標類Cursor 通過SQLiteDatabase 的query方法查詢一個表格。有了Cursor就可以遍歷所有的記錄了。代碼如下:public List<row> fetchAllRows() { ArrayList<row> ret = new ArrayList<row>();try {Cursor c =db.query(DATABASE_TABLE, new String[] { "rowid", "title", "body"}, null, null, null, null, null); int numRows = c.count(); c.first();for (int i = 0; i < numRows; ++i) { Row row = new Row(); row.rowId = c.getLong(0); row.title = c.getString(1); row.body = c.getString(2); ret.add(row); c.next();}} catch (SQLException e) { Log.e("booga", e.toString());}return ret;}</row></row></row>3.添加新的記錄構造一個ContentValues類,通過調用put方法,可以設置一條記錄的屬性。通過調用SQLiteDatabase的insert方法添加一條新的記錄。代碼如下:public void createRow(String title, String body) { ContentValues initialValues = new ContentValues(); initialValues.put("title", title); initialValues.put("body", body); db.insert(DATABASE_TABLE, null, initialValues); }4.刪除記錄直接調用SQLiteDatabase的delete方法,第二個參數是一個SQL條件表達式。代碼如下:public void deleteRow(String str) {

⑶ android怎麼連接sqlite資料庫

SQLite 一個非常流行的嵌入式資料庫,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQLite.

Android 開發中使用 SQLite 資料庫
Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。下面會詳細講解如果創建資料庫,添加數據和查詢資料庫。
創建資料庫
Android 不自動提供資料庫。在 Android 應用程序中使用 SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。Android 提供了 SQLiteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實現三個方法:
構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。

⑷ android開發中如何在sqlite中創建一個的一個表和該表對應的方法類,目前最頭疼的就是圖標的圖片存取了

下面這個文件創建了Book.db,創建了表book,另外提供兩個簡單的方法,裡面有很多不完善的地方,沒有一一寫出來。時間有限,希望能幫助到你。

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import java.io.ByteArrayOutputStream;

import static com.ume.myapplication.Columns.BOOK_AUTHOR;

/**
* _ Created by AlphaGo on 2017/3/11. just simple sample
*/

public class BookDbHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "Book.db";
public static final String TABLE_BOOK = "Book";
public static final int DB_VERSION = 1;

private Context mContext;

public BookDbHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
mContext = context;
}

@Override
public void onCreate(SQLiteDatabase db) {

createBookmarkTbl(db);
}

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

}

private void createBookmarkTbl(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_BOOK + "("
+ Columns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ BOOK_AUTHOR + " TEXT,"
+ Columns.BOOK_INTRODUCTION + " TEXT,"
+ Columns.BOOK_LABEL + " TEXT ,"
+ Columns.BOOK_NAME + " INTEGER NOT NULL DEFAULT 0,"
+ Columns.BOOK_PRICE + " FLOAT,"
+ Columns.BOOK_STOCK + " INTEGER NOT NULL,"
+ Columns.BOOK_ICON + " BLOB"
+ ");");
}

/**
* Insert Item
*/

public long insertItem(Book book) {
long id;
ContentValues initValues = new ContentValues();
ByteArrayOutputStream os = new ByteArrayOutputStream();
book.icon.compress(Bitmap.CompressFormat.PNG, 100, os);
initValues.put(BOOK_AUTHOR, book.author);
initValues.put(Columns.BOOK_INTRODUCTION, book.introction);
initValues.put(Columns.BOOK_LABEL, book.label);
initValues.put(Columns.BOOK_NAME, book.name);
initValues.put(Columns.BOOK_PRICE, book.price);
initValues.put(Columns.BOOK_STOCK, book.stock);
initValues.put(Columns.BOOK_ICON, os.toByteArray());
SQLiteDatabase db = getWritableDatabase();
id = db.insert(TABLE_BOOK, null, initValues);
db.close();
return id;
}

/**
* retrieve item by database index
*/

public Book getItemByIndex (int index){
Book book = new Book();

SQLiteDatabase db = getWritableDatabase();
Cursor cursor = db.query(TABLE_BOOK, null, "_id =?", new String[]{String.valueOf(index)}, null, null, null);
while (cursor.moveToNext()){
int id = cursor.getInt(0);
String author = cursor.getString(1);
String introction = cursor.getString(2);
String label = cursor.getString(3);
String name = cursor.getString(4);
float price = cursor.getFloat(5);
int stock = cursor.getInt(6);
byte[] bytes = cursor.getBlob(7);
Bitmap icon = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
book.icon = icon;
// TODO: 2017/3/11 one more thing
}
return book;
}

private static class Book {
public String author;
public String introction;
public String label;
public String name;
public float price;
public int stock;
public Bitmap icon;
}
}

⑸ 安卓sqlite需要有什麼基礎

一.基礎知識: 1.SQLite的數據類型: NULL:空值。 INTEGER:帶符號的整型,具體取決有存入數字的范圍大小。 REAL:浮點數字,存儲為8-byte IEEE浮點數。 TEXT:字元串文本。 BLOB:二進制對象。 smallint 16位元的整數。 interger 32位元的整數。 decimal(p,s) p 精確值和 s 大小的十進位整數,精確值p是指全部有幾個數(digits)大小值,s是指小數點後有幾位數。如果沒有特別指定,則系統會設為 p=5; s=0 。 float 32位元的實數。 double 64位元的實數。 char(n) n 長度的字串,n不能超過 254。 varchar(n) 長度不固定且其最大長度為 n 的字串,n不能超過 4000。 graphic(n) 和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態是為了支援兩個字元長度的字體,例如中文字。 vargraphic(n) 可變長度且其最大長度為 n 的雙字元字串,n不能超過 2000 date 包含了 年份、月份、日期。 time 包含了 小時、分鍾、秒。 timestamp 包含了 年、月、日、時、分、秒、千分之一秒。 datetime 包含日期時間格式,必須寫成'2010-08-05'不能寫為'2010-8-5',否則在讀取時會產生錯誤! 2.SQLite的基本操作: ①SQLiteOpenHelper 抽象類:通過從此類繼承實現用戶類,來提供資料庫打開、關閉等操作函數。 [java] // 創建資料庫 public void onCreate(SQLiteDatabase db) // 更新資料庫 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 打開資料庫 public void onOpen(SQLiteDatabase db) // 得到一個可讀SQLiteDatabase對象 public synchronized SQLiteDatabase getReadableDatabase() // 得到一個可寫SQLiteDatabase對象 public synchronized SQLiteDatabase getWriteableDatabase() // 創建資料庫 public void onCreate(SQLiteDatabase db) // 更新資料庫 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 打開資料庫 public void onOpen(SQLiteDatabase db) // 得到一個可讀SQLiteDatabase對象 public synchronized SQLiteDatabase getReadableDatabase() // 得到一個可寫SQLiteDatabase對象 public synchronized SQLiteDatabase getWriteableDatabase() ②SQLiteDatabase 資料庫訪問類:執行對資料庫的插入記錄、查詢記錄等操作。 [java] execSQL()方法可以執行insert、delete、update和CREATE TABLE之類有更改行為的SQL語句; rawQuery()方法可以執行select語句。 query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) table:表名。相當於select語句from關鍵字後面的部分。如果是多表聯合查詢,可以用逗號將兩個表名分開。 columns:要查詢出來的列名。相當於select語句select關鍵字後面的部分。 selection:查詢條件子句,相當於select語句where關鍵字後面的部分,在條件子句允許使用佔位符“?” selectionArgs:對應於selection語句中佔位符的值,值在數組中的位置與佔位符在語句中的位置必須一致,否則就會有異常。 groupBy:相當於select語句group by關鍵字後面的部分 having:相當於select語句having關鍵字後面的部分 orderBy:相當於select語句order by關鍵字後面的部分,如:personid desc, age asc; limit:指定偏移量和獲取的記錄數,相當於select語句limit關鍵字後面的部分。 //還有兩個,網上貌似都用的比較少,而我們這個例子中採用的是這些: public long insert( String table, // 待插入的表名 String nullColumnHack, // 通常設置為null ContentValues values // 待插入的數據 ) public int update( String table, // 待更新的表名 ContentValues values, // 待更新的內容 String whereClause, // 選擇通過哪個欄位來更新 String [] whereArgs // 為whereClause欄位要查詢的值 ) execSQL()方法可以執行insert、delete、update和CREATE TABLE之類有更改行為的SQL語句; rawQuery()方法可以執行select語句。 query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) table:表名。相當於select語句from關鍵字後面的部分。如果是多表聯合查詢,可以用逗號將兩個表名分開。 columns:要查詢出來的列名。相當於select語句select關鍵字後面的部分。 selection:查詢條件子句,相當於select語句where關鍵字後面的部分,在條件子句允許使用佔位符“?” selectionArgs:對應於selection語句中佔位符的值,值在數組中的位置與佔位符在語句中的位置必須一致,否則就會有異常。 groupBy:相當於select語句group by關鍵字後面的部分 having:相當於select語句having關鍵字後面的部分 orderBy:相當於select語句order by關鍵字後面的部分,如:personid desc, age asc; limit:指定偏移量和獲取的記錄數,相當於select語句limit關鍵字後面的部分。 //還有兩個,網上貌似都用的比較少,而我們這個例子中採用的是這些: public long insert( String table, // 待插入的表名 String nullColumnHack, // 通常設置為null ContentValues values // 待插入的數據 ) public int update( String table, // 待更新的表名 ContentValues values, // 待更新的內容 String whereClause, // 選擇通過哪個欄位來更新 String [] whereArgs // 為whereClause欄位要查詢的值 ) ③下面為網上常用的訪問資料庫的一般流程: [java] public void onClick(View v) { DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"傳智播客", 4}); db.close(); }; public void onClick(View v) { DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"傳智播客", 4}); db.close(); }; 二.編程實現: 1. 界面編輯(reslayoutmain.xml): [java] android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:text="創建資料庫" android:id="@+id/ButtonCreate" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="增加數據" android:id="@+id/ButtonInsert" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="更新數據" android:id="@+id/ButtonUpdate" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="查詢數據" android:id="@+id/ButtonQuery" android:layout_width="fill_parent" android:layout_height="wrap_content"> 定義了一個垂直方向上的線性布局,及各操作的按鈕,水平方向充滿父窗口,垂直方向與內容等高。 界面布局效果如下: 2. 代碼編輯(srcwyfzclMyActivity.java): [java] package wyf.zcl; import wyf.zcl.sqlitedb.SqLiteDBHelper; //引入相關包 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.Button; //引入相關包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; //創建資料庫按鈕 private Button insertBut; //增加資料庫記錄按鈕 private Button updateBut; //更新資料庫記錄按鈕 private Button queryBut; //查詢資料庫記錄按鈕 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton=(Button)findViewById(R.id.ButtonCreate); //實例化創建資料庫按鈕 insertBut=(Button)findViewById(R.id.ButtonInsert); //實例化插入資料庫按鈕 updateBut=(Button)findViewById(R.id.ButtonUpdate); //實例化更新資料庫按鈕 queryBut=(Button)findViewById(R.id.ButtonQuery); //實例化查詢資料庫按鈕 createButton.setOnClickListener(new View.OnClickListener() {//創建資料庫時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 System.out.println("create or open database success!"); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 Toast.makeText(MyActivity.this, "創建或打開資料庫", Toast.LENGTH_SHORT).show(); }}); insertBut.setOnClickListener(new View.OnClickListener() {//增加資料庫記錄時調用 @Override public void onClick(View v) { ContentValues cv=new ContentValues(); //得到ContentValues對象 cv.put("uid", 1); //放入鍵值對,鍵要與列名一致,值要與列的數據類型一致 cv.put("uname", "zcl"); //放入鍵值對,鍵要與列名一致,值要與列的數據類型一致 SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 Toast.makeText(MyActivity.this, "插入記錄", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getWritableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 sld.insert("sqlitetest", null, cv);//增加資料庫記錄 System.out.println("success insert a new content!"); }}); updateBut.setOnClickListener(new View.OnClickListener() { //更新資料庫記錄時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1); //創建資料庫 SQLiteDatabase sld=dh.getWritableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 ContentValues cv = new ContentValues(); //得到ContentValues對象 Toast.makeText(MyActivity.this, "更新記錄", Toast.LENGTH_SHORT).show(); cv.put("uname", "zcl_update"); sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新資料庫記錄 System.out.println("success updata the content!"); }}); queryBut.setOnClickListener(new View.OnClickListener() { //查詢資料庫記錄時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 Toast.makeText(MyActivity.this, "查詢記錄", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //列印輸出 String name=cursor.getString(cursor.getColumnIndex("uname")); System.out.println("query result:"+name); }}}); } } package wyf.zcl; import wyf.zcl.sqlitedb.SqLiteDBHelper; //引入相關包 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.Button; //引入相關包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; //創建資料庫按鈕 private Button insertBut; //增加資料庫記錄按鈕 private Button updateBut; //更新資料庫記錄按鈕 private Button queryBut; //查詢資料庫記錄按鈕 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton=(Button)findViewById(R.id.ButtonCreate); //實例化創建資料庫按鈕 insertBut=(Button)findViewById(R.id.ButtonInsert); //實例化插入資料庫按鈕 updateBut=(Button)findViewById(R.id.ButtonUpdate); //實例化更新資料庫按鈕 queryBut=(Button)findViewById(R.id.ButtonQuery); //實例化查詢資料庫按鈕 createButton.setOnClickListener(new View.OnClickListener() {//創建資料庫時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 System.out.println("create or open database success!"); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 Toast.makeText(MyActivity.this, "創建或打開資料庫", Toast.LENGTH_SHORT).show(); }}); insertBut.setOnClickListener(new View.OnClickListener() {//增加資料庫記錄時調用 @Override public void onClick(View v) { ContentValues cv=new ContentValues(); //得到ContentValues對象 cv.put("uid", 1); //放入鍵值對,鍵要與列名一致,值要與列的數據類型一致 cv.put("uname", "zcl"); //放入鍵值對,鍵要與列名一致,值要與列的數據類型一致 SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 Toast.makeText(MyActivity.this, "插入記錄", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getWritableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 sld.insert("sqlitetest", null, cv);//增加資料庫記錄 System.out.println("success insert a new content!"); }}); updateBut.setOnClickListener(new View.OnClickListener() { //更新資料庫記錄時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1); //創建資料庫 SQLiteDatabase sld=dh.getWritableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 ContentValues cv = new ContentValues(); //得到ContentValues對象 Toast.makeText(MyActivity.this, "更新記錄", Toast.LENGTH_SHORT).show(); cv.put("uname", "zcl_update"); sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新資料庫記錄 System.out.println("success updata the content!"); }}); queryBut.setOnClickListener(new View.OnClickListener() { //查詢資料庫記錄時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 Toast.makeText(MyActivity.this, "查詢記錄", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //列印輸出 String name=cursor.getString(cursor.getColumnIndex("uname")); System.out.println("query result:"+name); }}}); } } (.java): [java] package wyf.zcl.sqlitedb; import android.content.Context; //引入相關包 import android.database.sqlite.SQLiteDatabase; //引入相關包 import android.database.sqlite.SQLiteOpenHelper; //引入相關包 import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相關包 public class SqLiteDBHelper extends SQLiteOpenHelper{ public SqLiteDBHelper(Context context, String name, CursorFactory factory, int version) {//繼承SQLiteOpenHelper的類,必須有該構造函數 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //創建資料庫時調用,此方法是在調用了getReadableDatabase()或getWritableDatabase()後才調用 db.execSQL("create table sqlitetest(uid long,uname varchar(25))"); System.out.println("already create a database:sqlitetest."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //升級資料庫時掉用 } } package wyf.zcl.sqlitedb; import android.content.Context; //引入相關包 import android.database.sqlite.SQLiteDatabase; //引入相關包 import android.database.sqlite.SQLiteOpenHelper; //引入相關包 import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相關包 public class SqLiteDBHelper extends SQLiteOpenHelper{ public SqLiteDBHelper(Context context, String name, CursorFactory factory, int version) {//繼承SQLiteOpenHelper的類,必須有該構造函數 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //創建資料庫時調用,此方法是在調用了getReadableDatabase()或getWritableDatabase()後才調用 db.execSQL("create table sqlitetest(uid long,uname varchar(25))"); System.out.println("already create a database:sqlitetest."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //升級資料庫時掉用 } }

⑹ 有哪些比較好的 Android SQLite 開源工具類

ThinkAndroid是一個免費的開源的、簡易的、遵循Apache2開源協議發布的Android開發框架,其開發宗旨是簡單、快速的進行Android應用程序的開發,包含Android mvc、簡易sqlite orm、ioc模塊、封裝Android httpclitent的http模塊,具有快速構建文件緩存功能,無需考慮緩存文件的格式,都可以非常輕松的實現緩存,它還基於文件緩存模塊實現了圖片緩存功能,在android中載入的圖片的時候,對oom的問題,和對載入圖片錯位的問題都輕易解決。他還包括了一個手機開發中經常應用的實用工具類,如日誌管理,配置文件管理,android下載器模塊,網路切換檢測等等工具。

目前ThinkAndroid主要有以下模塊:

MVC模塊:實現視圖與模型的分離。
ioc模塊:android中的ioc模塊,完全註解方式就可以進行UI綁定、res中的資源的讀取、以及對象的初始化。
資料庫模塊:android中的orm框架,使用了線程池對sqlite進行操作。
http模塊:通過httpclient進行封裝http數據請求,支持非同步及同步方式載入。
緩存模塊:通過簡單的配置及設計可以很好的實現緩存,對緩存可以隨意的配置
圖片緩存模塊:imageview載入圖片的時候無需考慮圖片載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象。
配置器模塊:可以對簡易的實現配對配置的操作,目前配置文件可以支持Preference、Properties對配置進行存取。
日誌列印模塊:可以較快的輕易的是實現日誌列印,支持日誌列印的擴展,目前支持對sdcard寫入本地列印、以及控制台列印
下載器模塊:可以簡單的實現多線程下載、後台下載、斷點續傳、對下載進行控制、如開始、暫停、刪除等等。
網路狀態檢測模塊:當網路狀態改變時,對網路狀態進行檢測。

⑺ Android開發 sqlite作用

SQLite簡介
Google為Andriod的較大的數據處理提供了SQLite,他在數據存儲、管理、維護等各方面都相當出色,功能也非常的強大。SQLite具備下列特點:

1.輕量級
使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能,而且那個動態庫的尺寸想當小。
2.獨立性
SQLite 資料庫的核心引擎不需要依賴第三方軟體,也不需要所謂的「安裝」。
3.隔離性
SQLite 資料庫中所有的信息(比如表、視圖、觸發器等)都包含在一個文件夾內,方便管理和維護。
4.跨平台
SQLite 目前支持大部分操作系統,不至電腦操作系統更在眾多的手機系統也是能夠運行,比如:Android。
5.多語言介面
SQLite 資料庫支持多語言編程介面。
6.安全性
SQLite 資料庫通過資料庫級上的獨占性和共享鎖來實現獨立事務處理。這意味著多個進程可以在同一時間從同一資料庫讀取數據,但只能有一個可以寫入數據。
Android中的SQLite使用
首先創建資料庫類

public class DatabaseHelper extends SQLiteOpenHelper {

private static final String DB_NAME = "mydata.db"; //資料庫名稱
private static final int version = 1; //資料庫版本

public DatabaseHelper(Context context) {
super(context, DB_NAME, null, version);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table user(username varchar(20) not null , password varchar(60) not null );";
db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub

}

}

SQLiteOpenHelper類介紹
SQLiteOpenHelper是SQLiteDatabase的一個幫助類,用來管理資料庫的創建和版本的更新。一般是建立一個類繼承它,並實現它的onCreate和onUpgrade方法。

方法名
方法描述

SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) 構造方法,一般是傳遞一個要創建的資料庫名稱那麼參數
onCreate(SQLiteDatabase db) 創建資料庫時調用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) 版本更新時調用
getReadableDatabase() 創建或打開一個只讀資料庫
getWritableDatabase() 創建或打開一個讀寫資料庫
下面來介紹調用的方法
創建資料庫
這里特別的地方是通過調用了SQLiteOpenHelper類的getReadableDatabase()方法來實現創建一個資料庫的

1
2
3

DatabaseHelper database = new DatabaseHelper(this);//這段代碼放到Activity類中才用this
SQLiteDatabase db = null;
db = database.getReadalbeDatabase();

SQLiteDatabase類為我們提供了很多種方法,而較常用的方法如下

(返回值)方法名
方法描述

(int) delete(String table,String whereClause,String[] whereArgs) 刪除數據行的便捷方法
(long) insert(String table,String nullColumnHack,ContentValues values) 添加數據行的便捷方法
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新數據行的便捷方法
(void) execSQL(String sql) 執行一個SQL語句,可以是一個select或其他的sql語句
(void) close() 關閉資料庫
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 查詢指定的數據表返回一個帶游標的數據集
(Cursor) rawQuery(String sql, String[] selectionArgs) 運行一個預置的SQL語句,返回帶游標的數據集(與上面的語句最大的區別就是防止SQL注入)
數據的添刪改查分別可以通過2種途徑來實現
數據的添加
1.使用insert方法

1
2
3

ContentValues cv = new ContentValues();//實例化一個ContentValues用來裝載待插入的數據cv.put("username","Jack Johnson");//添加用戶名
cv.put("password","iLovePopMusic"); //添加密
db.insert("user",null,cv);//執行插入操作

2.使用execSQL方式來實現

1
2

String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL語句
db.execSQL(sql);//執行SQL語句

數據的刪除
同樣有2種方式可以實現

1
2
3

String whereClause = "username=?";//刪除的條件
String[] whereArgs = {"Jack Johnson"};//刪除的條件參數
db.delete("user",whereClause,whereArgs);//執行刪除

使用execSQL方式的實現

1
2

String sql = "delete from user where username='Jack Johnson'";//刪除操作的SQL語句
db.execSQL(sql);//執行刪除操作

數據修改
同上,仍是2種方式

1
2
3
4
5

ContentValues cv = new ContentValues();//實例化ContentValues
cv.put("password","iHatePopMusic");//添加要更改的欄位及內容
String whereClause = "username=?";//修改條件
String[] whereArgs = {"Jack Johnson"};//修改條件的參數
db.update("user",cv,whereClause,whereArgs);//執行修改

使用execSQL方式的實現

1
2

String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL語句
db.execSQL(sql);//執行修改

數據查詢
數據查詢相對前面幾種方法就復雜一些了,因為查詢會帶有很多條件
通過query實現查詢的
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
各參數說明:
table:表名稱
colums:列名稱數組
selection:條件子句,相當於where
selectionArgs:條件語句的參數數組
groupBy:分組
having:分組條件
orderBy:排序類
limit:分頁查詢的限制
Cursor:返回值,相當於結果集ResultSet
針對游標(Cursor)也提供了不少方法

方法名稱
方法描述

getCount() 總記錄條數
isFirst() 判斷是否第一條記錄
isLast() 判斷是否最後一條記錄
moveToFirst() 移動到第一條記錄
moveToLast() 移動到最後一條記錄
move(int offset) 移動到指定的記錄
moveToNext() 移動到嚇一條記錄
moveToPrevious() 移動到上一條記錄
getColumnIndex(String columnName) 獲得指定列索引的int類型值
實現代碼

1
2
3
4
5
6
7
8

Cursor c = db.query("user",null,null,null,null,null,null);//查詢並獲得游標
if(c.moveToFirst()){//判斷游標是否為空
for(int i=0;i<c.getCount();i++){
c.move(i);//移動到指定記錄
String username = c.getString(c.getColumnIndex("username");
String password = c.getString(c.getColumnIndex("password"));
}
}

通過rawQuery實現的帶參數查詢

1
2
3
4

Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"});
if(cursor.moveToFirst()) {
String password = c.getString(c.getColumnIndex("password"));
}

⑻ 如何使用SQLite,Android上SQLite的最佳實踐

前些時候看到興趣小組里有人問「Android上SQLite的最佳實踐」是什麼,好奇地搜了一下,確實沒有一個好一點的指導文檔,平時的使用也只是簡單的拷貝code,並沒有深入的研究過。以下是我看到的Kevin關於其使用的心得,原文的大體的意思是:

Android例子涵蓋了一些Sqlite的基本用法,但它們並沒有深入地給出合理的使用方法,更重要的是,不合理的使用方法。大多數例子和文檔只是涉及最基本的資料庫查詢,或者教你如何創建一個ContentProvider。從來不提及的地方像:

· 什麼地方創建和保存SQLiteOpenHelper實例?

· 可以有多少個實例?

· 多線程同時訪問資料庫有沒有什麼要擔心的?

基本的內容是,你可以任意次數地連接Sqlite資料庫,而且Android系統也支持你這樣做。Sqlite擁有文件級別的鎖,用來同步訪問和防止錯誤。如果你只知道這些,那麼,將會給你帶來很大的痛苦。開源的一個好處是,你可以深入代碼一探究竟。從代碼和一些測試中,我了解到以下事實:

· Sqlite擁有文件級別的鎖。許多線程可以同時讀,但只有一個可以寫。鎖阻止多個同時寫入。

· Android在SQLiteDatabase中實現了一些java鎖來確保動作是同步進行。

· 如果你用多個線程瘋狂地訪問資料庫,你的資料庫不會(或不應該)崩潰。

沒提到的是,如果你通過多個不同的真實連接同時寫資料庫,其中的某個會失敗,它不會等到前一個完成後繼續寫入。簡單地,不會寫入你的改變,更糟糕的是,你也得不到一個異常,只是在LogCat中輸出一些message,僅此而已。

SQLiteOpenHelper類做了一些有趣的事。盡管它有方法可以獲得一個只讀的連接和可讀寫的連接,但實質上它們是同一個連接。假設沒有文件寫錯誤的話,只讀的連接實質上就是一個可讀寫的連接。有趣吧。因此,如果你的app中使用一個helper的話,即便從多線程中使用,你也從未使用多個連接。

同樣,一個helper中只有一個SQLiteDatabase的實例,這個實例中實現了一些java鎖。因此,當你正在執行資料庫的操作時,其它db的操作都將鎖定。即便是你使用多個線程來做這些事以便優化資料庫的性能,壞消息,沒有什麼用。

按照我的認識,SQLite工作的方式,基本上不可能會破壞你的資料庫,除非代碼里有bug或者有硬體問題。

因此,我推薦這樣使用:創建一個SQLiteOpenHelper靜態對象。什麼時候去close它呢?不需要。當app關閉,它會自動釋放文件引用。

但是,會不會有「close() was never explicitly called on database」異常呢?

如果你注意的話,當連接掛在那裡的時候,你沒有得到那個異常。你只是在連接已經建立,而你又嘗試打開另一個時才會有異常。因此,你只需要打開一次連接。

像這樣來使用:

public class DatabaseHelper extends OrmLiteSqliteOpenHelper

{

private static DatabaseHelper instance;public static synchronized DatabaseHelper getHelper(Context context)

{

if (instance == null)

instance = new DatabaseHelper(context);return instance;

}

//Other stuff...

}

⑼ android怎麼在手機SD卡上創建SQLite資料庫

在sd卡上創建資料庫
通過android的sqliteopenhelper類的源碼,可以看到sqliteopenhelper類的getwritabledatabase
這個介面實際上調用的是context的openorcreatedatabase方法,而這個方法是不支持帶路徑的資料庫名
稱的,也就是說,用這個方法創建的資料庫只能放在/data/data/包名稱/
目錄下;要想在sd卡上創建資料庫
,我們可以調用sqlitedatabase類的openorcreatedatabase方法,這個方法是支持帶路徑的資料庫名稱的。

熱點內容
事件驅動python 發布:2024-10-18 14:39:54 瀏覽:844
java熔斷 發布:2024-10-18 14:32:05 瀏覽:867
蘋果訪問限制要打開嗎 發布:2024-10-18 14:26:31 瀏覽:121
php時間數字 發布:2024-10-18 14:26:30 瀏覽:604
qq系統頭像文件夾 發布:2024-10-18 14:14:55 瀏覽:235
安卓手機請輸入密碼在哪裡 發布:2024-10-18 14:13:28 瀏覽:646
設計編譯程序注意的問題 發布:2024-10-18 14:08:43 瀏覽:255
傳智播客android視頻 發布:2024-10-18 14:04:42 瀏覽:905
手機版安卓吃雞哪個好 發布:2024-10-18 14:01:40 瀏覽:492
編程自學入門教程 發布:2024-10-18 13:50:58 瀏覽:142