当程序需要存储许多的数据的时候,或者需要把数据共享给其他应用程序的时候,我们就需要使用到数据库。
Android采用SQLite数据库,好处很多。占用资源小,跨平台,操作方便等众多优势。
下面以一个简单的数据库的读写操作来描述。
SQLite 的数据库的结构如下:
SQLite DataBaseName 由N个TableName构成,每个Table相当于一个Excel表格,也就是说每个表格的数据由行和列组成。一般我们的一组数据,构成一行。例如通讯录的一个记录:名字,地址,邮件,电话,手机等列构成一个完成的信息,这条信息在数据库里面就是一列。
每一列都是有标识的,就像我们做的Excel一样。例如姓名:则这一列下面全部都是姓名。这样,整个数据库的结构就很简单了。
1:操作数据库:创建、打开
SQLiteDatabase.openDatabase(string path,SQLiteDatabase.CursorFactory factory ,int flags).
或者
Context.openOrCreateDatabase(String name,int mode,SQLiteDatabase.CursorFactory factory)
Android还支持内存数据库。
2:一般的情况下,我们不支持对数据库进行创建打开操作,而是由一个继承自SQLiteOpenHelper的类来帮助我们创建或者是打开数据库
例如下面:
public static final String DB_NAME="code.db";
public static final int VERSION=1;
MyHelper m_Helper;
SQLiteDatabase db;
Button m_Button;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
m_Helper=new MyHelper(this,DB_NAME,null,VERSION);
db=m_Helper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(MyHelper.COUNTRY, "China");
values.put(MyHelper.CODE, 86);
db.insert(MyHelper.TB_NAME, MyHelper.ID, values);
values.clear();
values.put(MyHelper.COUNTRY, "American");
values.put(MyHelper.CODE, 911);
db.insert(MyHelper.TB_NAME, MyHelper.ID, values);
db.insert(MyHelper.TB_NAME, MyHelper.ID, null);
values.clear();
values.put(MyHelper.COUNTRY, "意大利");
values.put(MyHelper.CODE, 39);
db.update(MyHelper.TB_NAME, values, MyHelper.ID + " = 3", null);
db.execSQL("INSERT INTO "+MyHelper.TB_NAME+"("+MyHelper.COUNTRY+","+MyHelper.CODE+") VALUES"+"('洪都拉斯',504)");
m_Button=(Button)this.findViewById(R.id.Button01);
m_Button.setOnClickListener(m_BtnClicker);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
db.delete(MyHelper.TB_NAME, null, null);
super.onDestroy();
}
private OnClickListener m_BtnClicker=new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
GetValue();
}
};
private void GetValue()
{
Cursor c;
c=db.query(MyHelper.TB_NAME, null, null, null, null, null, MyHelper.CODE+" DESC");
final int codeIndex =c.getColumnIndexOrThrow(MyHelper.CODE);
final int countryIndex =c.getColumnIndexOrThrow(MyHelper.COUNTRY);
for(c.moveToFirst();!c.isAfterLast();c.moveToNext())
{
String country =c.getString(countryIndex);
int code=c.getInt(codeIndex);
Toast.makeText(this, country+code, Toast.LENGTH_SHORT).show();
}
}
}
class MyHelper extends SQLiteOpenHelper
{
public static final String TB_NAME="countrycod";
public static final String ID="_id";
public static final String COUNTRY="country";
public static final String CODE="code";
public MyHelper(Context context,String name,CursorFactory factory, int version)
{
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase arg0) {
// TODO Auto-generated method stub
//Attention:注意SQL语法,每个变量后需要有空格,否则不认识。
arg0.execSQL("CREATE TABLE IF NOT EXISTS "+TB_NAME+" ("+ID+" INTEGER PRIMARY KEY,"+COUNTRY+" VARCHAR,"+CODE+" INTEGR )");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS "+TB_NAME);
onCreate(db);
}
}
这段代码,需要注意的就是执行SQL语句的时候需要严格注意语法。