PS:最近一陣子都在為考試復習...坑爹的計算機網絡,復習了3天,最后該不會的還是不會...明天還考英語...真蛋疼...
學習內容:
1.使用SQLite數據庫來保存數據...
SQLite:
SQLite一個輕量級的數據庫,數據庫這東西就是為了保存大量數據而存在的一個工具,SQLite支持SQL語言,其實和Mysql差不多,語句基本都是一樣的,增刪改查也非常的方便...SQLite獨立性非常的好,使用SQLite不需要安裝...不依賴與任何的引擎就可以獨立的去執行...感覺這一點還是非常強悍的...安全性也比較好...
Android集成了SQLite數據庫,因此每個Android中直接就可以使用SQLite數據庫,通過引用一些必要的包,我們就可以在Android程序中去使用...使用時需要引入這四個包...
i.android.database.sqlite.SQLiteDataBase //完成數據增刪改查的操作...
ii.android.database.sqlite.SQLiteOpenHelper //完成數據庫的創建及更新操作...
iii.android.database.Cursor //對查詢的結果進行保存...
iv.android.database.ContentValues //對傳遞的數據進行封裝...
引入了這四個包后,我們就可以在Android應用程序當中去使用SQLite了...我直接通過一個例子來說明一下,一個Android中如何使用SQLite,並且數據的信息保存的位置,如何對數據進行增刪改查操作...基本的SQL語句也就沒必要介紹了,學過數據庫的一定知道SQL標准化語句...
首先我們在使用數據庫的時候,我們需要對數據庫進行創建...
package com.example.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DataBaseHelp extends SQLiteOpenHelper{ private static final String DataBaseName="java.db"; private static final int DataBaseVersion=1; private static final String TableName="person"; public DataBaseHelp(Context context) { /** * Create a helper object to create, open, and/or manage a database. * This method always returns very quickly. The database is not actually * created or opened until one of {@link #getWritableDatabase} or * {@link #getReadableDatabase} is called. * * @param context to use to open or create the database * @param name of the database file, or null for an in-memory database * @param factory to use for creating cursor objects, or null for the default * @param version number of the database (starting at 1); if the database is older, * {@link #onUpgrade} will be used to upgrade the database; if the database is * newer, {@link #onDowngrade} will be used to downgrade the database */ super(context, DataBaseName, null, DataBaseVersion); // TODO Auto-generated constructor stub } //執行數據庫的創建操作... @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub String sql="Create table "+TableName+"( id int primary key,name varchar(50) not null,sex varchar(20) not null,DateofBorth date not null,email varchar(50) not null)"; //書寫完的SQL語句,需要使用execSQL(sql)執行... db.execSQL(sql); } //當數據庫的版本需要升級的時候調用這個方法...這個方法中可以將數據表進行刪除... @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub String sql="Drop table if exists"+TableName; db.execSQL(sql); this.onCreate(db); } }
在這里我們需要定義一個類去繼承SQLiteOpenHelper類,並重寫其中的方法,通過這個類來創建數據庫對象,繼承這個類是必須的,因為這個類是個輔助類,通過這個類我們才能夠完成對數據庫的操作...為什么?因為這個類中定義了對數據庫的創建,更新,規定以什么方式去打開數據庫的種種方法,只有通過繼承這個類,然后定義對象我們次才能夠調用其中的方法來完成對數據庫的操作...這就是繼承這個類的目的,java中有很多類中都為你寫好了實現的方法,我們不需要自己去書寫實現過程,只需要繼承調用就可以了,這就是java類庫的強大之處.
有了這個類,我們就需要去調用這個類中的方法了....下面就是實現調用的過程...然后通過調用getWritableDataBase方法我們才能夠進行相應的操作,當數據庫不存在的時候,會調用onCreate()方法去創建一個數據庫,這里建立了一個java.db數據庫...這個數據庫就成功的被建立了...這個數據庫的存放位置是模擬器的sd卡中data/data/項目/databases目錄下...
package com.example.sqlite; /* android.database.sqlite.SQLiteDatabase...完成對數據的增刪改查... * android.database.sqlite.SQLiteOpenHelper...完成數據庫的創建及更新操作... * android.database.Cursor...在使用查詢語句進行數據查詢后,保存所有的查詢結果... * android.database.ContentValues...在對數據庫進行操作之前...對傳遞的數據必須進行封裝... * Context 識別調用者的實例... * Android集成了SQLite數據庫...無需進行安裝就可以使用... * 首先創建數據庫: * 繼承SQLiteOpenHelper類...重寫其內部的方法.... * * */ import android.os.Bundle; import android.app.Activity; import android.database.sqlite.SQLiteOpenHelper; import android.view.Menu; import android.view.View; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.ListView; public class MainActivity extends Activity implements View.OnClickListener { private DataBaseHelp help; private OperatorTable mytable; private LinearLayout layout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // findViewById(R.id.insert).setOnClickListener(this); // findViewById(R.id.drop).setOnClickListener(this); // findViewById(R.id.update).setOnClickListener(this); // findViewById(R.id.select).setOnClickListener(this); help=new DataBaseHelp(this); layout=(LinearLayout) findViewById(R.id.layout); mytable=new OperatorTable(help.getWritableDatabase()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
這樣完成了數據庫的建立是沒有什么意思的...我們需要進行增刪改查操作...定義了一個類來實現增刪改操作...查詢操作在下面來完成...
package com.example.sqlite; import android.database.sqlite.SQLiteDatabase; public class OperatorTable { private SQLiteDatabase db=null; public OperatorTable(SQLiteDatabase db){ this.db=db; } public void insert(String sql){ this.db.execSQL(sql); this.db.close(); } public void drop(String sql_1){ this.db.execSQL(sql_1); this.db.close(); } public void update(String sql_2){ this.db.execSQL(sql_2);
this.db.close(); } }
定義了一個查詢類...查詢類需要使用到Cursor這個接口...通過實現這個接口來完成數據的查詢操作,然后把查詢后的結果以集合的方式進行返回...通過調用rawquery()方法,去調用另一個 public Cursor rawQueryWithFactory( CursorFactory cursorFactory, String sql, String[] selectionArgs,String editTable) {}方法,然后執行其中的SQL語句,最后使用一個字符串數組將查詢的結果按行保存...這里遍歷這個Cursor需要使用到下面的三個方法進行遍歷..然后我把這個結果保存在了一個List<String>集合中,最后進行返回...
package com.example.sqlite; import java.util.ArrayList; import java.util.List; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class SearchTable { private String name="person"; private SQLiteDatabase db; public SearchTable(SQLiteDatabase db) { // TODO Auto-generated constructor stub this.db=db; } public List<String>find(){ List<String>all=new ArrayList<String>(); String sql="select name,sex,email from person"; Cursor cursor=this.db.rawQuery(sql, null); for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){ //使用List保存查詢到的數據信息... all.add(cursor.getString(0)+" "+cursor.getString(1)+" "+cursor.getString(2)); System.out.println(cursor.getString(0).toString()+" "+cursor.getString(1).toString()+" "+cursor.getString(2).toString()); } db.close(); return all; } }
我把這個結果返回到了一個ListView中,然后顯示在屏幕上...這就是最終的主函數...下面有一個地方需要注意..就是使用getWritableDataBase()方法時需要注意的地方...只有在對數據庫進行操作的時候,我們才能夠使用這個方法來打開數據庫...在任何一個模塊中都需要使用這個語句,當然也可以定義一個DAO層來實現這個方法,然后調用,但是無論怎樣這個方法時隨開隨用的...無法定義一個全局屬性...這是一個需要注意的地方...
package com.example.sqlite; /* android.database.sqlite.SQLiteDatabase...完成對數據的增刪改查... * android.database.sqlite.SQLiteOpenHelper...完成數據庫的創建及更新操作... * android.database.Cursor...在使用查詢語句進行數據查詢后,保存所有的查詢結果... * android.database.ContentValues...在對數據庫進行操作之前...對傳遞的數據必須進行封裝... * Context 識別調用者的實例... * Android集成了SQLite數據庫...無需進行安裝就可以使用... * 首先創建數據庫: * 繼承SQLiteOpenHelper類...重寫其內部的方法.... * * */ import android.os.Bundle; import android.app.Activity; import android.database.sqlite.SQLiteOpenHelper; import android.view.Menu; import android.view.View; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.ListView; public class MainActivity extends Activity implements View.OnClickListener { private DataBaseHelp help; private OperatorTable mytable; private LinearLayout layout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.insert).setOnClickListener(this); findViewById(R.id.drop).setOnClickListener(this); findViewById(R.id.update).setOnClickListener(this); findViewById(R.id.select).setOnClickListener(this); help=new DataBaseHelp(this); layout=(LinearLayout) findViewById(R.id.layout); // mytable=new OperatorTable(help.getWritableDatabase()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { // TODO Auto-generated method stub // MainActivity.this.mytable=new OperatorTable(MainActivity.this.help.getWritableDatabase()); switch(v.getId()){ case R.id.insert: /* getWritableDatabase通過寫的方式打開數據庫...由於每次都對數據庫進行關閉操作,因此每次都要執行這個函數來打開數據庫... * 這句話是無法使用在其他函數當中的,更不能定義為全局變量,原因就是,當我們真正對數據庫進行操作的時候,我們才能夠使用 * 這個函數來打開數據庫...隨開隨用... * */ MainActivity.this.mytable=new OperatorTable(MainActivity.this.help.getWritableDatabase()); String sql_insert="insert into person values(2,'c','f','1995-01-11','976864@qq.com')"; MainActivity.this.mytable.insert(sql_insert); break; case R.id.drop: MainActivity.this.mytable=new OperatorTable(MainActivity.this.help.getWritableDatabase()); String sql_drop="delete from person where id='2'"; MainActivity.this.mytable.drop(sql_drop); break; case R.id.update: MainActivity.this.mytable=new OperatorTable(MainActivity.this.help.getWritableDatabase()); String sql_update="update person set name='android' where id='1'"; MainActivity.this.mytable.update(sql_update); break; case R.id.select: // SearchTable search=new SearchTable(MainActivity.this.help.getWritableDatabase()); ListView listview=new ListView(MainActivity.this); listview.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.activity_list_item,new SearchTable(MainActivity.this.help.getWritableDatabase()).find())); MainActivity.this.layout.addView(listview); // search.find(); } } }
這樣就實現了在Android應用程序中使用SQLite,並對其進行增刪改查操作...非常的簡單..最后推薦給大家一個SQLite Expert Personal是用來可視化SQLite的一個工具,個人感覺還是很好用的...