android 数据之数据库操作

一、建立 SQLite数据库的方法

1、定义一个数据库帮助类 SQLiteOpenHelper 的子类,定义静态数据库变量名称和静态数据库版本

//数据库名称

private static String dataBaseName="myDb.db";

//数据库版本(若开始版本比较小,后来的版本变大,则该类对象只会执行onUpgrade方法)

private static int dataBaseVersion=2;

2、通过构造方法传递上下文

//构造函数传递上下文

public OpenHelper(Context context)

{

 super(context,dataBaseNamenulldataBaseVersion);

}

3、复写该子类的onCreate()方法,主要用于建表操作

public void onCreate(SQLiteDatabase db) {

//建表语句(主要是基本类型,)

String sql="create table student(stud_id integer primary key autoincrement,stud_name varchar(64) not null)";

//执行该建表语句

db.execSQL(sql);

}

4、复写该子类的onUpgrade更新方法(若是子类的数据库版本大于当前版本号直接执行该方法)

public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {

//更新表(alter table)加属性值

String sql="alter table student add sex varchar(8)";

db.execSQL(sql);

}

 

二、数据库的增加删除更新,查询操作

先定义一个数据库操作的接口,SQL语句中的占位符用Object[]Object[] params代替。Add,delete,update用这个作为方法的参数。查询用String[] selectinArgs作为参数,单条记录传入参数即可,多条记录可以为空。

数据库操作的接口类:

public boolean addStudent(Object[] params );

public boolean deleteStudent(Object[]params);

public boolean updateStudent(Object[] params);

public Map<String,String> viewStudent(String[] selectionArgs);

public List<Map<String,String>>listStudentMaps(String[] selectionArgs);

其具体实现类的命名规范是类名加Dao

获得自定义的一个数据库工具类的子类,用于创建数据库和获得数据库

private OpenHelper helper=null;//数据库助手类用于创建数据库(当调用getWritableDatabase()getReadableDatabase()则创建数据库)

public StudentDao(Context context)

{

//上下文传递即是创建当前应用可用的数据库工具类

helper=new OpenHelper(context);

}

注意:为了能使该应用能使用该数据库,其他应用不能使用,尽可能的在构造方法处传入上下文对象。

 

1、数据库的增加

1.1定义一个数据库工具类对象用于获得数据库。

//定义一个SQLiteDatabase 数据库对象

SQLiteDatabase dataBase=null;

//获取数据库对象

dataBase=helper.getWritableDatabase();

1.2定义数据库执行的SQL语句

//插入的SQL语句

String sql="insert into student(stud_name,sex) values(?,?)";

//执行SQL语句

dataBase.execSQL(sql, params);

1.3执行数据库的SQL语句,其中dataBase.execSQL(sql, params);有两个参数的该方法的第二个参数是用来代替SQL语句中的占位符?的。该参数一般由方法参数传入。

1.4关闭数据库

dataBase.close();

//

public boolean addStudent(Object[] params) {

boolean flag=false;

//定义一个SQLiteDatabase 数据库对象

SQLiteDatabase dataBase=null;

try{

//获取数据库对象

dataBase=helper.getWritableDatabase();

//插入的SQL语句

String sql="insert into student(stud_name,sex) values(?,?)";

//执行SQL语句

dataBase.execSQL(sql, params);

flag=true;

}catch(Exception e)

{

}finally{

//关闭数据库

if(dataBase!=null)

{

dataBase.close();

}

}

return flag;

}

//

 

 

 

2、数据库的删除

String sql="delete from student where stud_id=?";

dataBase.execSQL(sql, params);

 

public boolean deleteStudent(Object[] params) {

boolean flag=false;

SQLiteDatabase dataBase=null;

try{

dataBase=helper.getWritableDatabase();

String sql="delete from student where stud_id=?";

dataBase.execSQL(sql, params);

flag=true;

}catch(Exception e){

}finally{

if(dataBase!=null)

{

dataBase.close();

}

}

return flag;

}

 

 

 

 

3、数据库的修改更新

//SQLiteDatabase 数据库的SQL语句

String sql="update student set stud_name=?,sex=? where stud_id=?";

public boolean updateStudent(Object[] params) {

boolean flag=false;

//定义数据库

SQLiteDatabase dataBase=null;

try{

//获得数据库

dataBase=helper.getWritableDatabase();

//SQLiteDatabase 数据库的SQL语句

String sql="update student set stud_name=?,sex=? where stud_id=?";

dataBase.execSQL(sql, params);

flag=true;

}catch(Exception e)

{

Log.i("<<<<<<","更新修改数据库信息错误");

}finally{

//关闭数据库

if(dataBase!=null)

{

dataBase.close();

}

}

return flag;

}

 

 

 

 

///

 

对于数据库的增删改只要执行数据库的execSQL(sql, params)方法即可。并通过自定义方法的参数Object[] params传入该方法代替params(即是SQL语句的占位符)且参数都用双引号。

4、数据库的查询

获得数据库,获得游标,获得列数,遍历查询(获得列名,获得列名对应的数据)

4.1单条记录查询

 

public Map<String, String> viewStudent(String[] selectionArgs) {

//定义存储查询结果的集合及用于查询操作的SQLiteDatabase数据库

Map<String,String> map=new HashMap<String,String>();

SQLiteDatabase dataBase=null;

try{

//获得数据库 

dataBase=helper.getReadableDatabase();

//sql执行语句

String sql="select *from student where stud_id=?";

//获得查询游标

Cursor cursor=dataBase.rawQuery(sql, selectionArgs);

//获得数据库的列个数

int colums=cursor.getColumnCount();

while(cursor.moveToNext())

{//遍历每一列

for(int i=0;i<colums;i++)

{

//获得列名

String colsName=cursor.getColumnName(i);

//获得列名对应的索引的游标的数据

String colsValue=cursor.getString(cursor.getColumnIndex(colsName));

//数据库的某些属性可以为空

if(colsValue==null)

{

colsValue=" ";

}

//按列名,数据对放入集合HashMap

map.put(colsName, colsValue);

}

}

}catch(Exception e)

{

Log.i("<<<<<<viewStuent","数据库单条查询失败!!!");

}finally{

if(dataBase!=null)

{

dataBase.close();

}

}

return map;

}

 

 

4.2多条记录查询

 

public List<Map<String, String>> listStudentMaps(String[] selectionArgs) {

//多条记录定义一个集合嵌套来保存

List<Map<String,String>> list=new ArrayList<Map<String,String>>();

//定义一个数据库

SQLiteDatabase dataBase=null;

try{

dataBase=helper.getReadableDatabase();

String sql="select * from student";

//获得查询游标

Cursor cursor=dataBase.rawQuery(sql, selectionArgs);

//获得记录的列数

int colums=cursor.getColumnCount();

//遍历查询

while(cursor.moveToNext())

{

Map<String,String> map=new HashMap<String,String>();

for(int i=0;i<colums;i++)

{

//获得列名

String colsName=cursor.getColumnName(i);

//获得该列名对应的数据

String colsValue=cursor.getString(cursor.getColumnIndex(colsName));

//判断是否有记录的属性值是否为空,为空则用空格代替

if(colsValue==null)

{

colsValue=" ";

}

map.put(colsName, colsValue);

}

list.add(map);

}

}catch(Exception e){

Log.i("数据库查询listStudentMaps""数据库多条记录查询失败!!!");

}

return list;

}

测试类:

public class Test extends AndroidTestCase {

public void testCreateDb()

{

OpenHelper helper=new OpenHelper(getContext());

helper.getWritableDatabase();

}

public void  testInsertDB()

{

StudentService stuDao=new StudentDao(getContext());

Object[] params={"李华",""};

boolean flag =stuDao.addStudent(params);

Log.i("<<<<<<<<<<<<","zzzzzz插入数据"+flag);

}

public void testDeleteDB()

{

StudentService stuDao=new StudentDao(getContext());

Object[] params={1};

boolean flag =stuDao.deleteStudent(params);

Log.i("<<<<<<<<<<<<","zzzzzzzzzzzz11111111111"+flag);

}

public void testUpdataStudent()

{

StudentService stuDao=new StudentDao(getContext());

Object[] params={"程序猿","","3"};

boolean flag=stuDao.updateStudent(params);

Log.i("<<<<<update<<<<<","<<<<<<<<<<<<<<"+flag);

}

//单条记录

public void testViewStudent()

{

StudentService stuDao=new StudentDao(getContext());

String[] selectionArgs={"3"};

Map<String,String> map=stuDao.viewStudent(selectionArgs);

Log.i("单条记录查询测试<<<<<<", map.toString());

}

public void testListStudent()

{

StudentService stuDao=new StudentDao(getContext());

//String[] selectionArgs={"3"};

List<Map<String,String>> list= stuDao.listStudentMaps(null);

Log.i("多条条记录查询测试<<<<<<", list.toString());

}

 

}

///

利用封装好的方法操作数据库

抽象接口

public interface  StudentService2 {

public boolean addStudent(Object[] params );

public boolean deleteStudent(String whereClause, String[] whereArgs);

public boolean updateStudent( ContentValues values, String whereClause, String[] whereArgs);

public Map<String,String> viewStudent(String selection ,String[] selectionArgs);

public List<Map<String,String>>listStudentMaps(String selection,String[] selectionArgs);

 

}

 

接口实现

public class StudentDao2 implements  StudentService2 {

 

private OpenHelper helper=null;

public StudentDao2(Context context) {

helper=new OpenHelper(context);

}

 

@Override

public boolean addStudent(Object[] params) {

boolean flag=false;

//获得数据库

SQLiteDatabase database=null;

try{

database=helper.getWritableDatabase();

//类似集合Map

ContentValues values=new ContentValues();

values.put("stud_name""湖南");

values.put("sex""");

database.insert("student",null, values);

}catch(Exception e){

Log.i("insert方法测试<<<<<<","插入数据失败!!!");

}finally{

if(database!=null)

{

database.close();

}

}

return flag;

}

 

@Override

public boolean deleteStudent(String whereClause, String[] whereArgs) {

boolean flag=false;

//获得数据库

SQLiteDatabase database=null;

int i=0;

try{

database=helper.getWritableDatabase();

i=database.delete("student", whereClause, whereArgs);

Log.i("删除数据","返回值"+i);//返回值为1

flag=(i>0?true:false);

}catch(Exception e){

Log.i("数据库删除操作","删除错误!!!");

}finally{

if(database!=null)

{

database.close();

}

}

return flag;

}

 

@Override

public boolean updateStudent( ContentValues values, String whereClause, String[] whereArgs) {

boolean flag=false;

int i=0;

//获得SQLiteDatabase数据库

SQLiteDatabase database=null;

try{

database=helper.getWritableDatabase();

i=database.update("student", values, whereClause, whereArgs);

flag=(i>0?true:false);

}catch(Exception e){

}finally{

if(database!=null)

{

database.close();

}

}

return flag;

}

 

@Override

public Map<String, String> viewStudent(String selection, String[] selectionArgs) {

//String selection过滤条件不包含where

//String[] selectionArgs过滤条件对应的值

SQLiteDatabase database=null;

Map<String, String> map=new HashMap<String, String>();

Cursor cursor=null;

try{

database=helper.getReadableDatabase();

cursor=database.query(true"student"null, selection, selectionArgs, null,nullnullnull);

int colums=cursor.getColumnCount();

while(cursor.moveToNext())

{

for(int i=0;i<colums;i++)

{

String colsName=cursor.getColumnName(i);

String colsValue=cursor.getString(cursor.getColumnIndex(colsName));

if(colsValue==null)

{

colsValue=" ";

}

map.put(colsName,colsValue);

}

}

}catch(Exception e){

Log.i("查询<<<<<<""查询失败!!!");

}

return map;

}

 

@Override

public List<Map<String, String>> listStudentMaps(String selection,String[] selectionArgs) {

List<Map<String, String>> list=new ArrayList<Map<String, String>>();

Cursor cursor=null;

SQLiteDatabase database=null;

try{

//获得数据库

database=helper.getReadableDatabase();

cursor=database.query("student"null, selection, selectionArgs, nullnullnullnull);

int columns=cursor.getColumnCount();

while(cursor.moveToNext())

{

Map<String,String> map=new HashMap<String,String>();

for(int i=0;i<columns;i++)

{

String columnName=cursor.getColumnName(i);

String columnValue=cursor.getString(cursor.getColumnIndex(columnName));

if(columnValue==null)

{

columnValue=" ";

}

map.put(columnName, columnValue);

}

list.add(map);

}

}catch(Exception e){

Log.i("数据库查询2","查询失败!!!");

}finally{

if(database!=null)

{

database.close();

}

}

return list;

}

 

}

 

测试:

public class Test2 extends AndroidTestCase {

public void testInsert()

{

StudentService2 service=new StudentDao2(getContext());

boolean flag=service.addStudent(null);

Log.i("插入数据成功","<<<<<<<<<<<<<<<<<<<<<<"+flag);

}

public void testDelete()

{

StudentService2 service=new StudentDao2(getContext());

String whereClause="stud_id=?";//过滤条件

String []whereArgs={"11"};//过滤条件对应的值

boolean flag=service.deleteStudent(whereClause, whereArgs);

Log.i("删除数据成功","<<<<<<<<<<<<<<<<<<<<<<<<<<"+flag);

}

public void testUpdate()

{

StudentService2 service=new StudentDao2(getContext());

ContentValues values=new ContentValues();

values.put("stud_name""益阳");

values.put("sex""");//与属性是对应的不能写成stud_sex

//不包含where关键字

String whereClause="stud_id=?";

String[] whereArgs={"8"};

boolean flag=service.updateStudent(values, whereClause, whereArgs);

Log.i("更新数据","<<<<<<<<<<"+flag );

}

public void testViewStudent()

{

StudentService2 service=new StudentDao2(getContext());

Map<String,String>map=null;

map=service.viewStudent("stud_id=?",new String[]{"8"});

Log.i("单条记录查询",map.toString());

}

 

public void testListStudentMaps()

{

StudentService2 service=new StudentDao2(getContext());

List<Map<String,String>>list=null;

list=service.listStudentMaps(null,null);

Log.i("多条记录查询",list.toString());

}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值