今天写一下关于Android中数据库Sqlite的一些基本操作吧。
首先创建一个类继承SqliteOpenHelper并重写其方法,另外需要另外加一个构造函数,如下:
public MyOpenHelper(Context context, String name){
super(context, name, null, 1);
}
这样我们就可以很方便的创建MyOpenHelper的对象了。
类MyOpenHelper:
package com.example.test_02;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class MyOpenHelper extends SQLiteOpenHelper {
private String sql = "create table person(_id integer primary key autoincrement,name text,phone text, salary text)";
public MyOpenHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
public MyOpenHelper(Context context, String name){
super(context, name, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
下面是我们通过插入数据得到的数据库的内容:
package com.example.test_02;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
private MyOpenHelper helper;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper = new MyOpenHelper(this, "person.db");
db = helper.getWritableDatabase();
insert();
// delete();
// update();
// select();
}
/**
* 向数据库中插入数据
*/
public void insert(){
ContentValues values = new ContentValues();
values.put("name", "小智");
values.put("phone", "1836381");
values.put("salary", "12000");
db.insert("person", null, values);
values.clear();
values.put("name", "小智的儿子");
values.put("phone", "1836382");
values.put("salary", "14000");
db.insert("person", null, values);
values.clear();
values.put("name", "小智的儿子");
values.put("phone", "1836382");
values.put("salary", "14000");
db.insert("person", null, values);
values.clear();
values.put("name", "小智的老婆");
values.put("phone", "1836383");
values.put("salary", "13000");
db.insert("person", null, values);
values.clear();
}
/**
* 删除数据
* db.delete(table, whereClause, whereArgs);
* table:表名
* whereClause:删除的where条件
* whereArgs:填充where条件的占位符
*/
public void delete(){
//删除_id为3,姓名为"小智的儿子"的数据
db.delete("person", "name = ? and _id = ?", new String[]{"小智的儿子","3"});
}
/**
* 更改数据
* db.update(table, values, whereClause, whereArgs);
* table:表名
* values:把要更改的数据存放到values中
* whereClause:更改的where条件
* whereArgs:填充where条件的占位符
*/
public void update(){
//这是是把_id为4的人的salary更改为23000
ContentValues values = new ContentValues();
values.put("salary", "23000");
db.update("person", values, "_id = ?", new String[]{"4"});
}
/**
* 查询数据
* db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)
* table:表名
* columns:要查询的列名,是一个字符串数组
* selection:查询的where语句
* selectionArgs:填充where语句的占位符
* limit:设置数据分页显示,"1,10"代表显示从第一行到第10行,"10,10"代表从第10行到第20行
*
*
*/
public void select(){
//这里我们查询的内容是:查询的列:_id,name,salary;查询的名字为:小智的儿子
//所以这里我们得到的数据是"小智的儿子"那一行中的_id,name,salary
//这里如果我们查询的列中没有_id的话呢,是不能得到_id的值的,会报一个空指针异常
//所以我们所能得到的值就是我们所查询的列的条目所包含的内容,一句话,你查询什么内容就会得到相对应的内容
Cursor cursor = db.query("person", new String[]{"_id","name","salary"}, "name = ?", new String[]{"小智的儿子"}, null, null, null, null);
while(cursor.moveToNext()){
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String salary = cursor.getString(cursor.getColumnIndex("salary"));
Log.i("main","id=" + _id);//2
Log.i("main", "name=" + name);//小智的儿子
Log.i("main", "salary=" + salary);//14000
}
}
}