編輯:關於Android編程
SQLite是一款開源的、嵌入式關系型數據庫,第一個版本Alpha發布於2000年。SQLite在便攜性、易用性、緊湊性、高效性和可靠性方面有著突出的表現。
在Android中創建的SQLite數據庫存儲在:/data/data/<包名>/databases/目錄下。
主要特點:
-輕量級
-獨立性,沒有不依賴,無需安裝
-跨平台,支持眾多操作系統
-支持高達2TB大小的數據庫
-每個數據庫以單個文件的形式存在
-以B-Tree的數據結構形式存儲在硬盤
SQLite的數據類型:
SQLite支持NULL、INTEGER、REAL、TEXT和BLOB數據類型
分別代表:空值、整型值、浮點值、字符串值、二進制對象。
動態數據類型(弱引用):
當某個值插入到數據庫中時,SQLite將會檢測它的數據類型,如果該類型與關聯的列不匹配,SQLite則會嘗試將該值轉換成該列的類型,如果不能轉換,則該值將作為本身的類型存儲。
在Android中使用SQLite主要涉及兩個類:
SQLiteDatabase和SQLiteOpenHelper,下面對這兩個類進行主要的分析。
SQLiteDatabase
這個類提供了一些管理SQLite數據庫的方法,比如創建、刪除、執行SQL命令,和執行其他常見的數據庫管理任務的方法。每個程序的數據庫名字是唯一的。
常用方法:
db.execSQL(String sql) //執行任何的SQL語句
db.insert(String table,String nullColumnHack,ContentValues values) //插入記錄
db.delete(String table,String whereClause,String[] whereArgs)//刪除記錄
db.update(String table,ContentValues values,String whereClause,String[] whereArgs)//更新記錄
db.query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)//查詢記錄
db.rawQuery(String sql,String[] selectionArgs)//通過sql語句查詢記錄
下面是一個簡單操作SQLite數據庫的示例:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //每個程序都有自己的數據庫 //通過openOrCreateDatabase來打開或創建一個數據庫,返回SQLiteDatabase對象 /** * openOrCreateDatabase(String name,int mode,SQLiteDatabase.CursorFactory factory) * name: 數據庫名 * mode: 數據庫權限,MODE_PRIVATE為本應用程序私有,MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE分別為全局可讀和可寫。 * factory: 可以用來實例化一個cusor對象的工廠類 */ SQLiteDatabase db = openOrCreateDatabase("user.db",MODE_PRIVATE,null); //創建一個表 db.execSQL("create table if not exists userTb (" + "_id integer primary key," + "name text not null,age integer not null," + "sex text not null)"); //向表中插入記錄 db.execSQL("insert into userTb (name,age,sex) values ('張三',18,'女')"); db.execSQL("insert into userTb (name,age,sex) values ('李四',19,'男')"); db.execSQL("insert into userTb (name,age,sex) values ('王五',20,'女')"); //Cursor為查詢結果對象,類似於JDBC中的ResultSet Cursor queryResult = db.rawQuery("select * from userTb", null); if (queryResult != null) { while (queryResult.moveToNext()) { Log.i("info", "id: " + queryResult.getInt(queryResult.getColumnIndex("_id")) + " 姓名: " + queryResult.getString(queryResult.getColumnIndex("name")) + " 年齡: " + queryResult.getInt(queryResult.getColumnIndex("age")) + " 性別: " + queryResult.getString(queryResult.getColumnIndex("sex"))); } //關閉游標對象 queryResult.close(); } //關閉數據庫 db.close(); } }
當執行完openOrCreateDatabase("user.db",MODE_PRIVATE,null)後,會在/data/data/<包名>/databases/目錄下創建一個數據庫文件,打開DDMS可以查看。也可以將其導出,使用navigate等工具打開查看裡面的數據。
另外,上述示例對記錄的操作是使用execSQL()方法通過原生的SQL語句進行的,當然也可以使用上面介紹的SQLiteDatabase常用的方法來操作,如insert()、delete()、update()、query()等方法。但是需要注意的是,以插入記錄舉例,當數據量不大時,通過execSQL()使用SQL語句進行插入與使用insert()方法插入記錄的效率是差不多的,但是如果數據量比較大,那麼使用前者比使用後者的效率明顯高出很多。
SQLiteOpenHelper
這個類為SQLiteDatabase的幫助類,主要用於管理數據庫的創建與版本更新。SQLiteHelper是一個抽象類,一般通過創建一個繼承自它的子類並重寫onCreat()和onUpgrade()方法進行使用。
-onCreat(SQLiteDatabase db) //首次創建數據庫時調用,一般用於建表等操作。
-onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)//當升級數據庫版本時調用
下面是使用SQLiteOpenHelper的一個簡單示例:
創建一個繼承自SQLiteOpenHelper的子類
public class SQLiteHelper extends SQLiteOpenHelper { /** * context:上下文對象 * name:數據庫名 */ public SQLiteHelper(Context context, String name) { super(context, name, null, 1); } //首次創建數據庫的時候調用,一般進行建表或某些初始化的操作 @Override public void onCreate(SQLiteDatabase db) { //建表 db.execSQL("create table if not exists userTb (" + "_id integer primary key," + "name text not null,age integer not null," + "sex text not null)"); } //當數據庫版本升級時自動調用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
然後就可以通過SQLiteHelper的實例獲取一個SQLiteDatabase對象,進而對數據庫進行一系列的操作了。
public class MainActivity2 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); //創建一個SQLiteHelper對象 SQLiteHelper helper = new SQLiteHelper(MainActivity2.this,"stu.db"); //使用getWritableDatabase()或getReadableDatabase()方法獲得SQLiteDatabase對象 SQLiteDatabase db = helper.getWritableDatabase(); //插入記錄 db.execSQL("insert into userTb (name,age,sex) values ('張三',18,'女')"); db.execSQL("insert into userTb (name,age,sex) values ('李四',19,'男')"); db.execSQL("insert into userTb (name,age,sex) values ('王五',20,'女')"); //獲取游標對象 Cursor queryResult = db.rawQuery("select * from userTb", null); if (queryResult != null) { //打印所有記錄 while (queryResult.moveToNext()) { Log.i("info", "id: " + queryResult.getInt(queryResult.getColumnIndex("_id")) + " 姓名: " + queryResult.getString(queryResult.getColumnIndex("name")) + " 年齡: " + queryResult.getInt(queryResult.getColumnIndex("age")) + " 性別: " + queryResult.getString(queryResult.getColumnIndex("sex"))); } //關閉游標對象 queryResult.close(); } //關閉數據庫 db.close(); } }
如何在ES文件浏覽器內使用網盤。是一款多功能的手機文件/程序/進程管理器,可以在手機、電腦、遠程和藍牙間浏覽管理文件,是一個功能強大的免費的本地和網絡文件管
前言:前面幾篇總結一些TV上的小Sample,開源到GitHub:https://github.com/hejunlin2013/TVSample, 點擊鏈接,可以持續關
之前關於如何實現屏幕頁面切換,寫過一篇博文《Android中使用ViewFlipper實現屏幕切換》,相比ViewFlipper,ViewPager更適用復雜的視圖切換,
如果你按照上一課創建了你的Android項目,那麼它包含默認的 Hello World 的源文件,能夠讓你的項目馬上運行起來。 你如何運行你的應用以來與兩件事:你是否