在安卓中,使用比较多并且比较重要的数据库编程就是sqlite数据库了。sqlite数据库类似与MysqL数据库编程,底层也是sql语言实现。
首先,sqlite存储有两种方式实现,一种是完全使用sql语句来实现数据的增删改查操作,一种是使用谷歌官方提供的API来进行增删改查操作。下面就一一介绍这两种方式。
无论使用那种方式进行数据存储,建议使用sqliteOpenHelper帮助类来创建数据库,不要使用sqliteDatabase创建数据库。因为使用sqliteDataBase来操作就显得笨重麻烦。sqliteDatabase用来对已有数据库进行必要的操作。
使用sql语句实现数据库操作
一、新建一个类继续自sqliteOpenHelper
示例代码
public class MysqLitehelper extends sqliteOpenHelper {
public MysqLitehelper(Context context) {
super(context,"contactinfo1.db",null,2);
//null 表示使用默认游标工厂
}
@Override//数据库第一次创建时调用
public void onCreate(sqliteDatabase db) {
String sql="create table number1 (id integer primary key autoincrement,name varchar(20),phone int)";
db.execsql(sql );
Log.e("数据库表","创建表成功");
}
/** * @param oldVersion 就得数据库版本 * @param newVersion 更新后的数据库版本 * @param db 数据库对象,用来对数据进行增删改查等操作 */
@Override//数据库更新时调用,数据库一旦创建成功,需要修改数据库表或者增加表的时候就在此方法实现
public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
}
}
MysqLitehelper my=new MysqLitehelper(this);
my.getWritableDatabase();
接下来就是对数据库数据进行操作:
package com.example.util;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
import android.widget.Toast;
public class Contacts {
/** * 实现联系人的增删改查 */
private MysqLitehelper helper;
public Contacts(Context context){
helper=new MysqLitehelper(context);
}
/** * 增加一条联系人记录 * * @param name * 联系人名字 * @param number * 联系人号码 */
public void add(String name,int phone) {
sqliteDatabase db=helper.getWritableDatabase();
String sql="insert into number1 (name,phone) values(?,?)";
db.execsql(sql,new Object[]{name,phone});
db.close();
}
/** * 删除一条联系人记录 * * @param name * 联系人名字 */
public void delete(String name) {
sqliteDatabase db=helper.getWritableDatabase();
String sql="delete from number1 where name=?";
db.execsql(sql,new String[]{name});
db.close();
}
/** * 修改记录 * @param name 修改的用户名 * @param phone 修改的号码 */
public void update(String name,int phone) {
String sql="update number1 set phone=? where name=?";
sqliteDatabase db=helper.getWritableDatabase();
db.execsql(sql,new Object[]{phone,name});
db.close();
}
/** * 查询记录 * @param name 需要查询的用户 */
public int query(String name) {
int query_phone =0;
sqliteDatabase db=helper.getReadableDatabase();
String sql="select * from number1 where name=?";
Cursor cursor=db.rawQuery(sql,new String[]{name});
if(cursor.moveToNext()){//一定要判断游标是否可以移动到下一行
query_phone=cursor.getInt(2);//Cursor是从0开始
}
cursor.close();
db.close();
return query_phone;
}
public void deleteAll(){
String sql="delete from number1";
sqliteDatabase db=helper.getWritableDatabase();
db.execsql(sql);
db.close();
}
}
到此,基本数据操作已经实现,剩下的就是根据具体业务逻辑来使用封装好的方法。
使用谷歌提供的API
同样创建一个帮助类:
## 示例代码 ##
package com.wnl.dao;
import com.example.studentinfo.MainActivity;
import com.example.studentinfo.R;
import android.content.Context;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteOpenHelper;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
public class DataBaseHelper extends sqliteOpenHelper {
public DataBaseHelper(Context context) {
super(context,"students.db",1);
}
@Override
public void onCreate(sqliteDatabase db) {
Log.e("DataBaseHelper","onCreate");
String sql="create table students1(_id integer primary key autoincrement,"+
" id varchar(20),number varchar(20) )";
db.execsql(sql);
Log.e("DataBaseHelper-->onCreate","成功创建了表");
}
@Override
public void onUpgrade(sqliteDatabase db,int newVersion) {
Log.e("DataBaseHelper","onUpgrade");
}
接下来就是使用此类来进行数据操作:
package com.wnl.dao;
import java.util.HashMap;
import java.util.Map;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.sqliteDatabase;
public class StudentsIpl {
/** * 实现学生信息的增删改查 */
private DataBaseHelper dh;
public StudentsIpl(Context context) {
dh = new DataBaseHelper(context);
}
/** * 增加一条学生记录 * * @param id * 学生ID * @param name * 学生姓名 * @param number * 学生号码 */
public long addStudent(String id,String name,String number) {
sqliteDatabase db = dh.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("id",id);
cv.put("name",name);
cv.put("number",number);
long rowid = db.insert("students1",cv);
db.close();
return rowid;
}
/** * 删除全部数据 */
public void deleteAll(){
sqliteDatabase db=dh.getWritableDatabase();
db.delete("students1",null);
db.close();
}
/** * 删除指定数据 */
public void delete(String name){
sqliteDatabase db=dh.getWritableDatabase();
db.delete("students1","name=?",new String[]{name});
db.close();
}
/**查询数据库一共有多少条记录 * */
public int getTotalInfo(){
sqliteDatabase db=dh.getReadableDatabase();
Cursor cursor=db.query("students1",null);
int count=cursor.getCount();
return count;
}
/** * 查询指定学生记录,并把记录封装到HashMap中 * @param position 需要查询记录的位置 * @return */
public Map<String,String> queryStudent(int position) {
Map<String,String> map = new HashMap<String,String>();
sqliteDatabase db = dh.getReadableDatabase();
Cursor cursor = db.query("students1",null);// 实现全部查询
cursor.moveToPosition(position);
String id=cursor.getString(1);// 取得学生ID
String name=cursor.getString(2);// 取得学生姓名
String number=cursor.getString(3);// 取得学生号码
map.put("id",id);
map.put("name",name);
map.put("number",number);
cursor.close();
dh.close();
return map;
}
}
至此,两种方式来进行sqlite编程介绍好了。