日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

淺談Android游戲開發(fā)之詳解SQLite存儲(chǔ)

出處:yuang_ccl 發(fā)布于:2011-09-03 21:37:33

  先介紹幾個(gè)基本概念知識(shí):

  Android是基于Linux內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機(jī)操作系統(tǒng)。早期由原名為"Android"的公司開發(fā),谷歌在2005年收購(gòu)"Android.Inc"后,繼續(xù)進(jìn)行對(duì)Android系統(tǒng)開發(fā)運(yùn)營(yíng),它采用了軟件堆層(software stack,又名以軟件疊層)的架構(gòu),主要分為三部分。底層Linux內(nèi)核只提供基本功能,其他的應(yīng)用軟件則由各公司自行開發(fā),部分程序以Java編寫。

  什么是SQLite:

  SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。

  SQLite的特性:

  1. ACID事務(wù)

  2. 零配置 - 無需安裝和管理配置

  3. 儲(chǔ)存在單一磁盤文件中的一個(gè)完整的數(shù)據(jù)庫

  4. 數(shù)據(jù)庫文件可以在不同字節(jié)順序的機(jī)器間自由的共享

  5. 支持?jǐn)?shù)據(jù)庫大小至2TB

  6. 足夠小, 大致3萬行C代碼, 250K

  7. 比一些流行的數(shù)據(jù)庫在大部分普通數(shù)據(jù)庫操作要快

  8. 簡(jiǎn)單, 輕松的API

  9. 包含TCL綁定, 同時(shí)通過Wrapper支持其他語言的綁定

  10. 良好注釋的源代碼, 并且有著90%以上的測(cè)試覆蓋率

  11. 獨(dú)立: 沒有額外依賴

  12. Source完全的Open, 你可以用于任何用途, 包括出售它

  13. 支持多種開發(fā)語言,

  C, PHP, Perl, Java, ASP .NET,Python

  優(yōu)點(diǎn):

  1.能存儲(chǔ)較多的數(shù)據(jù)。

  2.能將數(shù)據(jù)庫文件存放到SD卡中!

  如何連接SQLite?

  用PHP操作sqlite數(shù)據(jù)庫

  a、 如何連接sqlite數(shù)據(jù)庫?

  if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {

  select * from sqlite_master;

  echo "數(shù)據(jù)庫連接成功!n

  ";

  } else {

  die($sqliteerror);

  }

  b、 如何列出數(shù)據(jù)庫中所有的表?

  if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {

  $result = sqlite_array_query($db, 'select * from sqlite_master;');

  foreach ($result as $entry) {

  echo 'talbe name='.$entry['name']."

  n";

  echo 'sql='.$entry['sql']."

  n";

  echo "

  --------------------------------------------------------------------------------

  }

  sqlite_close($db);

  } else {

  die($sqliteerror);

  }}

  c、 對(duì)sqlite數(shù)據(jù)庫的查詢,以及結(jié)果集的顯示

  if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) {   $result = sqlite_array_query($db, 'select name, email from user ', SQLITE_ASSOC);

  echo "user表查詢結(jié)果:

  n";

  echo " n name email

  n";

  foreach ($result as $entry) {

  echo ' '.$entry['name']." " $entry['email']."

  n";

  }

  echo ' ';

  sqlite_close($db);

  } else {

  die($sqliteerror);

  }

  d、 數(shù)據(jù)庫對(duì)象記錄的增加、刪除、修改

  sqlite_query($db, "INSERT INTO user VALUES('user".$i."'" ",'user".$i."@ hichina. com')");   sqlite_query($db, "delete from user where user=’user99’");

  sqlite_query($db, 'UPDATE user SET email="lilz@ hichina .com" where name="user1"');

  什么是 SQLiteDatabase?

  一個(gè) SQLiteDatabase 的實(shí)例代表了一個(gè)SQLite 的數(shù)據(jù)庫,通過SQLiteDatabase 實(shí)例的一些方法,我們可以執(zhí)行SQL 語句,對(duì)數(shù) 據(jù)庫進(jìn)行增、刪、查、改的操作。需要注意的是,數(shù)據(jù)庫對(duì)于一個(gè)應(yīng)用來說是私有的,并且在一個(gè)應(yīng)用當(dāng)中,數(shù)據(jù)庫的名字也是惟一的。

  什么是 Cursor ?

  Cursor是網(wǎng)頁制作CSS中的光標(biāo)類型,與圖標(biāo)文件Icon一樣,是特殊類型的小位圖。

  順便來張項(xiàng)目截圖:

  

  先給出xml:

  view plaincopy to clipboardprint?

  ·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

  《?xml version=“1.0” encoding=“utf-8”?》

  《LinearLayout xmlns:android=“https://schemas.android.com/apk/res/android”

  android:orientation=“vertical” android:layout_width=“fill_parent”

  android:layout_height=“fill_parent”》

  《TextView android:layout_width=“fill_parent”

  android:layout_height=“wrap_content” android:text=“SQL 練習(xí)!”

  android:textSize=“20sp” android:textColor=“#ff0000” android:id=“@+id/tv_title” /》

  《Button android:id=“@+id/sql_addOne” android:layout_width=“fill_parent”

  android:layout_height=“wrap_content” android:text=“插入一條記錄”》《/Button》

  《Button android:id=“@+id/sql_check” android:layout_width=“fill_parent”

  android:layout_height=“wrap_content” android:text=“查詢數(shù)據(jù)庫”》《/Button》

  《Button android:id=“@+id/sql_edit” android:layout_width=“fill_parent”

  android:layout_height=“wrap_content” android:text=“修改一條記錄”》《/Button》

  《Button android:id=“@+id/sql_deleteOne” android:layout_width=“fill_parent”

  android:layout_height=“wrap_content” android:text=“刪除一條記錄”》《/Button》

  《Button android:id=“@+id/sql_deleteTable” android:layout_width=“fill_parent”

  android:layout_height=“wrap_content” android:text=“刪除數(shù)據(jù)表單”》《/Button》

  《Button android:id=“@+id/sql_newTable” android:layout_width=“fill_parent”

  android:layout_height=“wrap_content” android:text=“新建數(shù)據(jù)表單”》《/Button》

  《/LinearLayout》

  xml中定義了我們需要練習(xí)用到的幾個(gè)操作按鈕,這里不多解釋了,下面看java源碼:先看我們繼承的 SQLiteOpenHelper 類

  Java平臺(tái)由Java虛擬機(jī)(Java Virtual Machine)和Java 應(yīng)用編程接口(Application Programming Interface、簡(jiǎn)稱API)構(gòu)成。Java 應(yīng)用編程接口為Java應(yīng)用提供了一個(gè)獨(dú)立于操作系統(tǒng)的標(biāo)準(zhǔn)接口,可分為基本部分和擴(kuò)展部分。在硬件或操作系統(tǒng)平臺(tái)上安裝一個(gè)Java平臺(tái)之后,Java應(yīng)用程序就可運(yùn)行。現(xiàn)在Java平臺(tái)已經(jīng)嵌入了幾乎所有的操作系統(tǒng)。這樣Java程序可以只編譯,就可以在各種系統(tǒng)中運(yùn)行。

  view plaincopy to clipboardprint?

  ·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

  package com.himi;

  import android.content.Context;

  import android.util.Log;

  /**

  *

  * @author Himi

  // 在數(shù)據(jù)庫次生成的時(shí)候會(huì)調(diào)用這個(gè)方法,一般我們?cè)谶@個(gè)方法里邊生成數(shù)據(jù)庫表;

  public void onCreate(SQLiteDatabase db) {

  String str_sql = “CREATE TABLE ” + TABLE_NAME + “(” + ID

  + “ INTEGER PRIMARY KEY AUTOINCREMENT,” + TEXT + “ text );”;

  // CREATE TABLE 創(chuàng)建一張表 然后后面是我們的表名

  // 然后表的列,個(gè)是id 方便操作數(shù)據(jù),int類型

  // ----------注意:這里str_sql是sql語句,類似dos命令,要注意空格!

  db.execSQL(str_sql);

  // execSQL()方法是執(zhí)行一句sql語句

  // 雖然此句我們生成了一張數(shù)據(jù)庫表和包含該表的sql.himi文件,

  // 但是要注意 不是方法是創(chuàng)建,是傳入的一句str_sql這句sql語句表示創(chuàng)建??!

  }

  @Override

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

  // 一般默認(rèn)情況下,當(dāng)我們插入 數(shù)據(jù)庫就立即更新

  // 當(dāng)數(shù)據(jù)庫需要升級(jí)的時(shí)候,Android 系統(tǒng)會(huì)主動(dòng)的調(diào)用這個(gè)方法。

  // 一般我們?cè)谶@個(gè)方法里邊刪除數(shù)據(jù)表,并建立新的數(shù)據(jù)表,

  // 當(dāng)然是否還需要做其他的操作,完全取決于游戲需求。

  Log.v(“Himi”, “onUpgrade”);

  }

  }

  我喜歡代碼中立即附上解釋,感覺這樣代碼比較讓大家更容易理解和尋找,當(dāng)然如果童鞋們不喜歡,可以告訴我,我改~嘿嘿~

  下面看重要的MainActivity中的代碼:

  view plaincopy to clipboardprint?

  ·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

  package com.himi;

  import java.io.File;

  import java.io.IOException;

  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.view.Window;

  import android.view.WindowManager;

  import android.view.View.OnClickListener;

  import android.widget.Button;

  import android.widget.TextView;

  // ------------第三種保存方式--------《SQLite》---------

  /**

  * @author Himi

  * @保存方式:SQLite 輕量級(jí)數(shù)據(jù)庫、

  * @優(yōu)點(diǎn): 可以將自己的數(shù)據(jù)存儲(chǔ)到文件系統(tǒng)或者數(shù)據(jù)庫當(dāng)中, 也可以將自己的數(shù)據(jù)存

  * 儲(chǔ)到SQLite數(shù)據(jù)庫當(dāng)中,還可以存到SD卡中

  * @注意1:數(shù)據(jù)庫對(duì)于一個(gè)游戲(一個(gè)應(yīng)用)來說是私有的,并且在一個(gè)游戲當(dāng)中,

  * 數(shù)據(jù)庫的名字也是的。

  * @注意2 apk中創(chuàng)建的數(shù)據(jù)庫外部的進(jìn)程是沒有權(quán)限去讀/寫的,

  * 我們需要把數(shù)據(jù)庫文件創(chuàng)建到sdcard上可以解決類似問題。

  * @注意3 當(dāng)你刪除id靠前的數(shù)據(jù)或者全部刪除數(shù)據(jù)的時(shí)候,SQLite不會(huì)自動(dòng)排序,

  * 也就是說再添加數(shù)據(jù)的時(shí)候你不指定id那么SQLite默認(rèn)還是在原有id添加一條新數(shù)據(jù)

  * @注意4 android 中 的SQLite 語法區(qū)分大小寫的?。。。?!這點(diǎn)要注意!

  * String UPDATA_DATA = “UPDATE himi SET text=‘通過SQL語句來修改數(shù)據(jù)’ WHERE id=1”;

  * 千萬 不能可以寫成

  * String UPDATA_DATA = “updata himi set text=‘通過SQL語句來修改數(shù)據(jù)’ where id=1”;

  */

  public class MainActivity extends Activity implements OnClickListener {

  private Button btn_addOne, btn_deleteone, btn_check, btn_deleteTable,

  btn_edit, btn_newTable;

  private TextView tv;

  private MySQLiteOpenHelper myOpenHelper;// 創(chuàng)建一個(gè)繼承SQLiteOpenHelper類實(shí)例

  private SQLiteDatabase mysql ;

  //---------------以下兩個(gè)成員變量是針對(duì)在SD卡中存儲(chǔ)數(shù)據(jù)庫文件使用

  // private File path = new File(“/sdcard/himi”);// 創(chuàng)建目錄

  // private File f = new File(“/sdcard/himi/himi.db”);// 創(chuàng)建文件

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  getWindow()。setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

  WindowManager.LayoutParams.FLAG_FULLSCREEN);

  this.requestWindowFeature(Window.FEATURE_NO_TITLE);

  setContentView(R.layout.main);

  tv = (TextView) findViewById(R.id.tv_title);

  btn_addOne = (Button) findViewById(R.id.sql_addOne);

  btn_check = (Button) findViewById(R.id.sql_check);

  btn_deleteone = (Button) findViewById(R.id.sql_deleteOne);

  btn_deleteTable = (Button) findViewById(R.id.sql_deleteTable);

  btn_newTable = (Button) findViewById(R.id.sql_newTable);

  btn_deleteTable.setOnClickListener(this);

  btn_newTable.setOnClickListener(this);

  myOpenHelper = new MySQLiteOpenHelper(this);// 實(shí)例一個(gè)數(shù)據(jù)庫輔助器

  //備注1 ----如果你使用的是將數(shù)據(jù)庫的文件創(chuàng)建在SD卡中,那么創(chuàng)建數(shù)據(jù)庫mysql如下操作:

  // if (!path.exists()) {// 目錄存在返回false

  // path.mkdirs();// 創(chuàng)建一個(gè)目錄

  // }

  // if (!f.exists()) {// 文件存在返回false

  // try {

  // f.createNewFile();//創(chuàng)建文件

  // } catch (IOException e) {

  // // TODO Auto-generated catch block

  // e.printStackTrace();

  // }

  // }

  }

  @Override

  public void onClick(View v) {

  try {

  //備注2----如果你使用的是將數(shù)據(jù)庫的文件創(chuàng)建在SD卡中,那么創(chuàng)建數(shù)據(jù)庫mysql如下操作:

  // mysql = SQLiteDatabase.openOrCreateDatabase(f, null);

  //備注3--- 如果想把數(shù)據(jù)庫文件默認(rèn)放在系統(tǒng)中,那么創(chuàng)建數(shù)據(jù)庫mysql如下操作:

  mysql = myOpenHelper.getWritableDatabase(); // 實(shí)例數(shù)據(jù)庫

  if (v == btn_addOne) {// 添加數(shù)據(jù)

  // ---------------------- 讀寫句柄來插入---------

  // ContentValues 其實(shí)就是一個(gè)哈希表HashMap, key值是字段名稱,

  //Value值是字段的值。然后 通過 ContentValues 的 put 方法就可以

  //把數(shù)據(jù)放到ContentValues中,然后插入到表中去!

  ContentValues cv = new ContentValues();

  cv.put(MySQLiteOpenHelper.TEXT, “測(cè)試新的數(shù)據(jù)”);

  mysql.insert(MySQLiteOpenHelper.TABLE_NAME, null, cv);

  // inser() 個(gè)參數(shù) 標(biāo)識(shí)需要插入操作的表名

  // 第二個(gè)參數(shù) :默認(rèn)傳null即可

  // 第三個(gè)是插入的數(shù)據(jù)

  // ---------------------- SQL語句插入--------------

  // String INSERT_DATA =

  // “INSERT INTO himi (id,text) values (1, ‘通過SQL語句插入’)”;

  // db.execSQL(INSERT_DATA);

  tv.setText(“添加數(shù)據(jù)成功!點(diǎn)擊查看數(shù)據(jù)庫查詢”);

  } else if (v == btn_deleteone) {// 刪除數(shù)據(jù)

  // ---------------------- 讀寫句柄來刪除

  mysql.delete(“himi”, MySQLiteOpenHelper.ID + “=1”, null);

  // 個(gè)參數(shù) 需要操作的表名

  // 第二個(gè)參數(shù)為 id+操作的下標(biāo) 如果這里我們傳入null,表示全部刪除

  // 第三個(gè)參數(shù)默認(rèn)傳null即可

  // ----------------------- SQL語句來刪除

  // String DELETE_DATA = “DELETE FROM himi WHERE id=1”;

  // db.execSQL(DELETE_DATA);

  tv.setText(“刪除數(shù)據(jù)成功!點(diǎn)擊查看數(shù)據(jù)庫查詢”);

  } else if (v == btn_check) {// 遍歷數(shù)據(jù)

  //備注4------

  Cursor cur = mysql.rawQuery(“SELECT * FROM ”

  + MySQLiteOpenHelper.TABLE_NAME, null);

  if (cur != null) {

  String temp = “”;

  int i = 0;

  while (cur.moveToNext()) {//直到返回false說明表中到了數(shù)據(jù)末尾

  temp += cur.getString(0);

  // 參數(shù)0 指的是列的下標(biāo),這里的0指的是id列

  temp += cur.getString(1);

  // 這里的0相對(duì)于當(dāng)前應(yīng)該是咱們的text列了

  i++;

  temp += “ ”; // 這里是我整理顯示格式 ,呵呵~

  if (i % 3 == 0) // 這里是我整理顯示格式 ,呵呵~

  temp += “\n”;// 這里是我整理顯示格式 ,呵呵~

  }

  tv.setText(temp);

  }

  } else if (v == btn_edit) {// 修改數(shù)據(jù)

  // ------------------------句柄方式來修改 -------------

  ContentValues cv = new ContentValues();

  cv.put(MySQLiteOpenHelper.TEXT, “修改后的數(shù)據(jù)”);

  mysql.update(“himi”, cv, “id ” + “=” + Integer.toString(3), null);

  // ------------------------SQL語句來修改 -------------

  // String UPDATA_DATA =

  // “UPDATE himi SET text=‘通過SQL語句來修改數(shù)據(jù)’ WHERE id=1”;

  // db.execSQL(UPDATA_DATA);

  tv.setText(“修改數(shù)據(jù)成功!點(diǎn)擊查看數(shù)據(jù)庫查詢”);

  } else if (v == btn_deleteTable) {// 刪除表

  mysql.execSQL(“DROP TABLE himi”);

  tv.setText(“刪除表成功!點(diǎn)擊查看數(shù)據(jù)庫查詢”);

  } else if (v == btn_newTable) {// 新建表

  String TABLE_NAME = “himi”;

  String ID = “id”;

  String TEXT = “text”;

  String str_sql2 = “CREATE TABLE ” + TABLE_NAME + “(” + ID

  + “ INTEGER PRIMARY KEY AUTOINCREMENT,” + TEXT

  + “ text );”;

  mysql.execSQL(str_sql2);

  tv.setText(“新建表成功!點(diǎn)擊查看數(shù)據(jù)庫查詢”);

  }

  // 刪除數(shù)據(jù)庫:

  // this.deleteDatabase(“himi.db”);

  } catch (Exception e) {

  tv.setText(“操作失敗!”);

  } finally {// 如果try中異常,也要對(duì)數(shù)據(jù)庫進(jìn)行關(guān)閉

  mysql.close();

  }

  }

  }

  以上代碼中我們實(shí)現(xiàn)了兩種存儲(chǔ)方式:

  一種存儲(chǔ)默認(rèn)系統(tǒng)路徑/data-data-com.himi-databases下,另外一種則是保存在了/sdcard-himi下,生成數(shù)據(jù)庫文件himi.db

  那么這里兩種實(shí)現(xiàn)方式大概步驟和區(qū)別說下:

  -----------如果我們使用默認(rèn)系統(tǒng)路徑存儲(chǔ)數(shù)據(jù)庫文件:

  步:新建一個(gè)類繼承SQLiteOpenHelper;寫一個(gè)構(gòu)造,重寫兩個(gè)函數(shù)!

  第二步:在新建的類中的onCreate(SQLiteDatabase db) 方法中創(chuàng)建一個(gè)表;

  第三步:在進(jìn)行刪除數(shù)據(jù)、添加數(shù)據(jù)等操作的之前我們要得到數(shù)據(jù)庫讀寫句柄得到一個(gè)數(shù)據(jù)庫實(shí)例;

  注意: 繼承寫這個(gè)輔助類,是為了在我們沒有數(shù)據(jù)庫的時(shí)候自動(dòng)為我們生成一個(gè)數(shù)據(jù)庫,并且生成數(shù)據(jù)庫文件,這里也同時(shí)創(chuàng)建了一張表,因?yàn)槲覀冊(cè)趏nCreate里是在數(shù)據(jù)庫中創(chuàng)建一張表的操作;這里還要注意在我們new 這個(gè)我們這個(gè)MySQLiteOpenHelper 類實(shí)例對(duì)象的時(shí)候并沒有創(chuàng)建數(shù)據(jù)庫喲~!而是在我們調(diào)用 (備注3)MySQLiteOpenHelper ……getWritableDatabase() 這個(gè)方法得到數(shù)據(jù)庫讀寫句柄的時(shí)候,android 會(huì)分析是否已經(jīng)有了數(shù)據(jù)庫,如果沒有會(huì)默認(rèn)為我們創(chuàng)建一個(gè)數(shù)據(jù)庫并且在系統(tǒng)路徑data-data-com.himi-databases下生成himi.db 文件!

 ?。ㄈ绻覀兪褂胹d卡存儲(chǔ)數(shù)據(jù)庫文件,就沒有必要寫這個(gè)類了,而是我們自己Open自己的文件得到一個(gè)數(shù)據(jù)庫,西西,反而方便~ )

  -----------如果我們需要把數(shù)據(jù)庫文件存儲(chǔ)到SD卡中:

  步:確認(rèn)模擬器存在SD卡,關(guān)于SD卡的兩種創(chuàng)建方法見我的博文:【Android 2D游戲開發(fā)之十】

  第二步:(備注1)先創(chuàng)建SD卡目錄和路徑已經(jīng)我們的數(shù)據(jù)庫文件!這里不像上面默認(rèn)路徑中的那樣,如果沒有數(shù)據(jù)庫會(huì)默認(rèn)系統(tǒng)路徑生成一個(gè)數(shù)據(jù)庫和一個(gè)數(shù)據(jù)庫文件!我們必須手動(dòng)創(chuàng)建數(shù)據(jù)庫文件!

  第三步:在進(jìn)行刪除數(shù)據(jù)、添加數(shù)據(jù)等操作的之前我們要得到數(shù)據(jù)庫讀寫句柄得到一個(gè)數(shù)據(jù)庫實(shí)例;(備注2)此時(shí)的創(chuàng)建也不是像系統(tǒng)默認(rèn)創(chuàng)建,而是我們通過打開步創(chuàng)建好的文件得到數(shù)據(jù)庫實(shí)例。這里僅僅是創(chuàng)建一個(gè)數(shù)據(jù)庫?。。?!

  第四步:在進(jìn)行刪除數(shù)據(jù)、添加數(shù)據(jù)等操作的之前我們還要?jiǎng)?chuàng)建一個(gè)表!

  第五步:在配置文件AndroidMainfest.xml 聲明寫入SD卡的權(quán)限,上一篇已經(jīng)介紹權(quán)限了,不知道的自己去看下吧。

  有些童鞋不理解什么默認(rèn)路徑方式中就有表?那是因?yàn)槲覀冊(cè)谒J(rèn)給我們創(chuàng)建數(shù)據(jù)庫的時(shí)候我們有創(chuàng)建表的操作,就是MySQLiteOpenHelper類中的onCreate()方法里的操作!所以我們?nèi)绻谶M(jìn)行刪除數(shù)據(jù)、添加數(shù)據(jù)等操作的之前還要?jiǎng)?chuàng)建一個(gè)表,創(chuàng)建表的方法都是一樣的。

  總結(jié):不管哪種方式我們都要-創(chuàng)建數(shù)據(jù)庫-創(chuàng)建表-然后進(jìn)行操作!

  在Android中查詢數(shù)據(jù)是通過Cursor類來實(shí)現(xiàn)的,當(dāng)我們使用SQLiteDatabase.query()方法時(shí),會(huì)得到一個(gè)Cursor對(duì)象,Cursor指向的就是每一條數(shù)據(jù)。它提供了很多有關(guān)查詢的方法,具體方法如下:

  以下是方法和說明:

  move 以當(dāng)前的位置為參考,將Cursor移動(dòng)到指定的位置,成功返回true, 失敗返回false

  moveToPosition 將Cursor移動(dòng)到指定的位置,成功返回true,失敗返回false

  moveToNext 將Cursor向前移動(dòng)一個(gè)位置,成功返回true,失敗返回false

  moveToLast 將Cursor向后移動(dòng)一個(gè)位置,成功返回true,失敗返回 false。

  movetoFirst 將Cursor移動(dòng)到行,成功返回true,失敗返回false

  isBeforeFirst 返回Cursor是否指向項(xiàng)數(shù)據(jù)之前

  isAfterLast 返回Cursor是否指向一項(xiàng)數(shù)據(jù)之后

  isClosed 返回Cursor是否關(guān)閉

  isFirst 返回Cursor是否指向項(xiàng)數(shù)據(jù)

  isLast 返回Cursor是否指向一項(xiàng)數(shù)據(jù)

  isNull 返回指定位置的值是否為null

  getCount 返回總的數(shù)據(jù)項(xiàng)數(shù)

  getInt 返回當(dāng)前行中指定的索引數(shù)據(jù)

  對(duì)于SQLite的很多童鞋有接觸過,但是就不知道怎么存儲(chǔ)在SD中,所以我也研究了下,這篇也寫了把sd卡中的方式也提供給大家,希望大家能用的上。

 


  
關(guān)鍵詞:Android存儲(chǔ)

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!