【Android 开发】:数据存储之 SQLite 数据库 *** 作(二)

【Android 开发】:数据存储之 SQLite 数据库 *** 作(二),第1张

概述    上一讲我们讲解了SQLite数据库的创建[数据存储之 SQLite 数据库 *** 作(一)],还有更新的 *** 作,这一讲我们来讲解一下数据库的增删改查,这边的程序是对上一个程序进行修改,建议结合上一讲内容进行学习。 1. SQLiteDatabase介绍 1. 在 SQLiteOpenHelper 类中,调用getWritableDatabase()方法也会完成创建或者打开数据库的 *** 作主要是用来读和 上一讲我们讲解了sqlite数据库的创建[数据存储之 SQLite 数据库 *** 作(一)],还有更新的 *** 作,这一讲我们来讲解一下数据库的增删改查,这边的程序是对上一个程序进行修改,建议结合上一讲内容进行学习。

1. sqliteDatabase介绍
1. 在 sqliteOpenHelper 类中,调用getWritableDatabase()方法也会完成创建或者打开数据库的 *** 作主要是用来读和写,它返回的类型是 :sqliteDatabase,下面我们就来看一下这个类的介绍
查看其 API介绍
这个类主要是用来管理数据库,它有一些方法来完成创建,删除,执行SQL语句,还有执行其他相同数据库管理的任务。 查看相关方法
可以发现这个类里面的方法很多都是用来维护数据库的,类似查询等。
查看这个 public voID execsql (String sql,Object[] bindArgs) 方法用来执行一个SQL语句,在这个方法说明中,AndroID建议我们使用以下这种方式来进行对数据库的增删改查的。 insert(String,String,ContentValues) insertOrThrow(String,ContentValues) insertWithOnConflict(String,ContentValues,int) 同理还有其他 *** 作数据库的 *** 作,详情请参考api文档
【备注】:这种对数据库的 *** 作方式是 AndroID 官方给我们建议的,我们会在下一讲中介绍这种方式,在这一讲中,下面的例子 *** 作数据库的方式主要是使用数据库的 SQL语句。

2. 程序实现

1. 布局文件 activity_main.xml 这里就不贴出来,主要几个按钮的定义

2. DBOpenHelper.java 用来对数据库进行创建和更新,上一讲对这个文件有详细讲解,如有不懂,建议查看上一讲内容。

package com.androID.sqlitedemo.db;import androID.content.Context;import androID.database.sqlite.sqliteDatabase;import androID.database.sqlite.sqliteOpenHelper;public class DBOpenHelper extends sqliteOpenHelper {    private static String name = "mydb.db"; // 表示数据库的名称    private static int version = 1; // 表示数据库的版本号    public DBOpenHelper(Context context) {        super(context,name,null,version);        // Todo auto-generated constructor stub    }    // 当数据库创建的时候,是第一次被执行,完成对数据库的表的创建    @OverrIDe    public voID onCreate(sqliteDatabase db) {        // Todo auto-generated method stub        // sqlite 数据创建支持的数据类型: 整型数据,字符串类型,日期类型,二进制的数据类型        // 数据库这边有一个特点,就是sqlite数据库中文本类型没有过多的约束,也就是可以把布尔类型的数据存储到文本类型中,这样也是可以的        String sql = "create table person(ID integer primary key autoincrement,name varchar(64),address varchar(64),sex varchar(8))";        db.execsql(sql); // 完成数据库的创建    }    @OverrIDe    public voID onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {        // Todo auto-generated method stub    }}
3. PersonService.java 定义增删改查接口
package com.androID.sqlitedemo.service;import java.util.List;import java.util.Map;/** * 定义好增删改查接口 * @author xukunhui * */public interface PersonService {    public boolean addPersion(Object[] params);         public boolean deletePerson(Object[] params);        public boolean updatePerson(Object[] params);        //使用 Map<String,String> 做一个封装,比如说查询数据库的时候返回的单条记录    public Map<String,String> vIEwPerson(String[] selectionArgs);        //使用 List<Map<String,String>> 做一个封装,比如说查询数据库的时候返回的多条记录    public List<Map<String,String>> ListPersonMaps(String[] selectionArgs);}
4. PersonDao.java 实现增删改查功能
package com.androID.sqlitedemo.dao;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import androID.content.Context;import androID.database.Cursor;import androID.database.sqlite.sqliteDatabase;import com.androID.sqlitedemo.db.DBOpenHelper;import com.androID.sqlitedemo.service.PersonService;/** * 数据库的访问工具类 * 实现定义好的增删改查接口 * @author xukunhui * */public class PersonDao implements PersonService {    //获得 helper对象用来 *** 纵数据库    private DBOpenHelper helper = null;    public PersonDao(Context context) {        helper = new DBOpenHelper(context);    }    /**     * 下面四个方法实现对数据库的增删改查功能      */        @OverrIDe    public boolean addPersion(Object[] params) {        boolean flag = false;        sqliteDatabase database = null;        try {            //这里面问好表示占位符,所以要需要传入所有的占位符的值,传入值有这个方法中的参数传递            String sql = "insert into person(name,address,sex) values(?,?,?)";            database = helper.getWritableDatabase(); //实现对数据库写的 *** 作            database.execsql(sql,params);            flag = true;        } catch (Exception e) {            e.printstacktrace();        } finally {            if(database != null) {                database.close();            }        }        return flag;    }    @OverrIDe    public boolean deletePerson(Object[] params) {        boolean flag = false;        sqliteDatabase database = null;        try {            String sql = "delete from person where ID = ? ";            database = helper.getWritableDatabase();            database.execsql(sql,params);            flag = true;                    } catch (Exception e) {            e.printstacktrace();        } finally {            if(database != null) {                database.close();            }        }        return flag;    }    @OverrIDe    public boolean updatePerson(Object[] params) {        boolean flag = false;        sqliteDatabase database = null;        try {            String sql = "update person set name = ?,address = ?,sex = ? where ID = ? ";            database = helper.getWritableDatabase();            database.execsql(sql,params);            flag = true;        } catch (Exception e) {            e.printstacktrace();        } finally {            if(database != null) {                database.close();            }        }        return flag;    }    //根据ID号来查询,查询的每一行数据返回用 Map 集合来存储    @OverrIDe    public Map<String,String> vIEwPerson(String[] selectionArgs) {        Map<String,String> map = new HashMap<String,String>();        sqliteDatabase database = null;        try {            String sql = "select * from person where ID = ? ";            database = helper.getReadableDatabase(); //查询读取数据,查询结果使用Map来存储            //声明一个游标,这个是行查询的 *** 作,支持原生SQL语句的查询            Cursor cursor = database.rawquery(sql,selectionArgs); //ID所在行查询                       int colums = cursor.getColumnCount();//获得数据库的列的个数            //cursor.movetoNext() 移动到下一条记录            while(cursor.movetoNext()){                for(int i = 0; i < colums; i++) {                    String cols_name = cursor.getColumnname(i); //提取列的名称                    String cols_value = cursor.getString(cursor.getColumnIndex(cols_name)); //根据列的名称提取列的值                    //数据库中有写记录是允许有空值的,所以这边需要做一个处理                    if(cols_value == null) {                        cols_value = "";                    }                    map.put(cols_name,cols_value);                }            }        } catch (Exception e) {            e.printstacktrace();        } finally {            if(database != null){                database.close();            }        }        return map;    }    //多条记录 用 List<Map<String,String>> 来封装,每一行产生一个 Map集合来装载这一行的数据    //这样就有多个Map值,然后放入List中.    @OverrIDe    public List<Map<String,String>> ListPersonMaps(String[] selectionArgs) {        List<Map<String,String>> List = new ArrayList<Map<String,String>>();        sqliteDatabase database = null;        try {            String sql = "select * from person "; //这个是查询表中所有的内容,所以就不需要传入的这个参数值了            database = helper.getReadableDatabase();            Cursor cursor = database.rawquery(sql,selectionArgs);            int colums = cursor.getColumnCount();            while(cursor.movetoNext()) {                Map<String,String>();                for(int i = 0; i < colums; i++) {                    String cols_name = cursor.getColumnname(i);                    String cols_value = cursor.getString(cursor.getColumnIndex(cols_name));                    if(cols_name == null) {                        cols_value = "";                      }                    map.put(cols_name,cols_value);                }                List.add(map);            }        } catch (Exception e) {            // Todo: handle exception        } finally {            if(database != null){                database.close();            }        }        return List;    }  }
5. 主程序文件 MainActivity.java 文件
package com.androID.sqlitedemo;import java.util.List;import java.util.Map;import com.androID.sqlitedemo.dao.PersonDao;import com.androID.sqlitedemo.db.DBOpenHelper;import com.androID.sqlitedemo.service.PersonService;import androID.os.Bundle;import androID.app.Activity;import androID.util.Log;import androID.vIEw.Menu;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.button;public class MainActivity extends Activity {    private button button1;    private button button2;    private button button3;    private button button4;    private button button5;    private button button6;        private static final String TAG = "MainActivity";    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        initComponent();        button1.setonClickListener(new OnClickListener() {                        @OverrIDe            public voID onClick(VIEw v) {                // Todo auto-generated method stub                DBOpenHelper helper = new DBOpenHelper(MainActivity.this);                //调用 getWritableDatabase()或者 getReadableDatabase()其中一个方法将数据库建立                helper.getWritableDatabase();            }        });        button2.setonClickListener(new OnClickListener() {                        @OverrIDe            public voID onClick(VIEw v) {                // Todo auto-generated method stub                PersonService service = new PersonDao(MainActivity.this);                //Object[] params = {"张三","北京","男"};                Object[] params = {"李四","上海","男"}; //新增加一条记录                boolean flag = service.addPersion(params);                Log.i(TAG,"--->" + flag);            }        });        button3.setonClickListener(new OnClickListener() {                       @OverrIDe            public voID onClick(VIEw v) {                PersonService service = new PersonDao(MainActivity.this);                Object[] params = {1};                //将ID为1的记录删除                boolean flag = service.deletePerson(params);                Log.i(TAG,"---->" + flag);            }        });        button4.setonClickListener(new OnClickListener() {                        @OverrIDe            public voID onClick(VIEw v) {                // Todo auto-generated method stub                //将ID为3的这一条记录修改                PersonService service = new PersonDao(MainActivity.this);                Object[] params = {"AHuIEr","厦门","男","3"};                boolean flag = service.updatePerson(params);                Log.i(TAG,"--->" + flag);            }        });        button5.setonClickListener(new OnClickListener() {                        @OverrIDe            public voID onClick(VIEw v) {                //查询ID为3的单条记录                PersonService service = new PersonDao(MainActivity.this);                String[] seleStrings = {"3"};                Map<String,String> map = service.vIEwPerson(seleStrings);                Log.i(TAG,"------查询单条记录--> " + map.toString());            }        });        button6.setonClickListener(new OnClickListener() {                        @OverrIDe            public voID onClick(VIEw v) {                //查询多条记录,这里我们不需要传递参数,所以可以参数可以置为null                PersonService service = new PersonDao(MainActivity.this);                List<Map<String,String>> List = service.ListPersonMaps(null);                Log.i(TAG,"---查询所有记录--->> " + List.toString());            }        });    }    @OverrIDe    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main,menu);        return true;    }        private voID initComponent(){        button1 = (button)findVIEwByID(R.ID.button1);        button2 = (button)findVIEwByID(R.ID.button2);        button3 = (button)findVIEwByID(R.ID.button3);        button4 = (button)findVIEwByID(R.ID.button4);        button5 = (button)findVIEwByID(R.ID.button5);        button6 = (button)findVIEwByID(R.ID.button6);    }}

3. 程序执行结果如下:

1. 界面如下


2. 点击"建立数据库"按钮后执行"插入数据"按钮


3. 点击"删除数据"按钮


4. 点击"修改数据"按钮


5. 点击"查询单条记录"按钮 和 点击"查询多条记录"按钮返回结果




敬请关注我们下一讲(数据库讲解内容)

总结

以上是内存溢出为你收集整理的【Android 开发】:数据存储之 SQLite 数据库 *** 作(二)全部内容,希望文章能够帮你解决【Android 开发】:数据存储之 SQLite 数据库 *** 作(二)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1173624.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存