本来通过简单的实例来实现安卓对SQLite的操作。
package mars.sqlite3;
import mars.sqlite3.db.DatabaseHelper;
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.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SQliteActivity extends Activity {
/** Called when the activity is first created. */
private Button createDBButton ;
private Button insertDBButton ;
private Button updateDBButton ;
private Button queryDBButton ;
private Button deleteDBButton ;
private EditText input_id ;
private EditText input_name ;
private TextView test ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//此处为创建数据库, 通过按钮监听器来实现
createDBButton = (Button) findViewById(R.id.creatDB) ;
createDBButton.setOnClickListener(new CreateDBListener()) ;
//此处为插入数据到数据库中
insertDBButton = (Button) findViewById(R.id.insert) ;
insertDBButton.setOnClickListener(new InsertListener()) ;
//此处为更新数据表
updateDBButton = (Button) findViewById(R.id.update) ;
updateDBButton.setOnClickListener(new updateListener()) ;
//此处为更新数据表
queryDBButton = (Button) findViewById(R.id.query) ;
queryDBButton.setOnClickListener(new queryListener()) ;
//此处为删除数据内容
deleteDBButton = (Button) findViewById(R.id.delete) ;
deleteDBButton.setOnClickListener(new deleteListener()) ;
//此处为显示查询结果
test = (TextView) findViewById(R.id.result) ;
test.setText("name") ;
//此处为添加数据的选项
input_id = (EditText) findViewById(R.id.input_id) ;
input_name = (EditText) findViewById(R.id.input_name) ;
}
class CreateDBListener implements OnClickListener{
@Override
public void onClick(View v) {
// 此处为调用另外一个类中的方法来创建数据库, 或者直接来创建数据库
String db_name = "test_mars_db_one" ;
SQLiteDatabase db = dbHelper.getReadableDatabase() ;
}
}
class InsertListener implements OnClickListener{
public void onClick(View v){
//生成一个ContentValues对象
ContentValues values = new ContentValues() ;
values.put("id", input_id.getText().toString()) ;
values.put("name", input_name.getText().toString()) ;
DatabaseHelper dbHelper = new DatabaseHelper(SQliteActivity.this, "test_mars_db_one") ;
SQLiteDatabase db = dbHelper.getWritableDatabase() ;
//调用insert方法, 就可以将数据插入到数据库中
db.insert("user", null, values) ;
}
}
class updateListener implements OnClickListener{
@Override
public void onClick(View v) {
// 此处为更新数据内容
DatabaseHelper dbHelper = new DatabaseHelper(SQliteActivity.this, "test_mars_db_one") ;
SQLiteDatabase db = dbHelper.getWritableDatabase() ;
ContentValues values = new ContentValues() ;
values.put("name", "Two china") ;
//第一个参数为要更新的表名
//第二个参数为一个ContentValues对象
//第三个参数是where语句
db.update("user", values, "id=?", new String[]{"2"}) ;
}
}
class queryListener implements OnClickListener{
@Override
public void onClick(View v) {
// 此处为查询数据内容, 并用到cursor来实现
DatabaseHelper dbHelper = new DatabaseHelper(SQliteActivity.this, "test_mars_db_one") ;
SQLiteDatabase db = dbHelper.getWritableDatabase() ;
Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"2"},null,null,null,null) ;
while( cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name")) ;
System.out.print("query---> " + name) ;
//name += name ;
test.setText(name) ;
}
}
}
class deleteListener implements OnClickListener{
public void onClick(View v) {
//此处为实现删除数据
SQLiteDatabase db = dbHelper.getWritableDatabase() ;
//删除特定条件的数据
//删除所有数据
db.delete("user",null,null);
}}
}
DatabaseHelper.class , 将其独立出来, 便于管理
package mars.sqlite3.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper{
private static final int VERSION = 1 ;
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
//必须通过super调用父类当中的构造函数
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
public DatabaseHelper(Context context, String name){
this(context, name, VERSION) ;
}
public DatabaseHelper(Context context, String name, int version){
this(context, name,null, version) ;
}
//该函数是在第一次创建数据库的时候执行, 实际上是在第一次得到SQLiteDatabase对象的时候执行
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.print("Create a Database. ") ;
//execSQL方法用于执行SQL语句
db.execSQL("create table user(id int,name varchar(20))") ;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
System.out.print("Update a Database. ") ;
}
}
PS:
1. SQLiteDatabase(android.database.sqlite.SQLiteDatabase)
关于操作数据库的工作(增、删、查、改)都在这个类里
execSQL(sql): 执行SQL语句,用这个方法+SQL语句可以非常方便的执行增、删、查、改
除此之外,Android还提供了功过方法实现增、删、查、改
long insert(TABLE_NAME, null, contentValues)添加记录
int delete(TABLE_NAME, where, whereValue)删除记录
int update(TABLE_NAME, contentValues, where, whereValue) 更新记录
Cursor query(TABLE_NAME, null, null, null, null, null, null) 查询记录
除此之外,还有很多方法,如:beginTransaction()开始事务、endTransaction()结束事务...有兴趣的可以自己看api,这里就不多赘述了
2. Cursor(android.database.Cursor)
游标(接口),这个很熟悉了吧,Cursor里的方法非常多,常用的有:
boolean moveToPosition(position)将指针移动到某记录
getColumnIndex(Contacts.People.NAME)按列名获取id
int getCount()获取记录总数
boolean requery()重新查询
boolean isAfterLast()指针是否在末尾
boolean isBeforeFirst()时候是开始位置
boolean isFirst()是否是第一条记录
boolean isLast()是否是最后一条记录
boolean moveToFirst()、 boolean moveToLast()、 boolean moveToNext()同moveToPosition(position)
3. db.query(
tbname,
new String[]{"_id","tname","tage","ttel","taddr"},
null,
null, null, null, "_id desc");
}
关于db.query方法的参数,有很多,为了防止大家弄乱,我简单说一下
参数1:表名
参数2:返回数据包含的列信息,String数组里放的都是列名
参数3:相当于sql里的where,sql里where后写的内容放到这就行了,例如:tage>?
参数4:如果你在参数3里写了?(知道我为什么写tage>?了吧),那个这里就是代替?的值 接上例:new String[]{"30"}
参数5:分组,不解释了,不想分组就传null
参数6:having,想不起来的看看SQL
参数7:orderBy排序
可以参考: http://android.tgbus.com/Android/tutorial/201103/346179.shtml