Android-数据库Sqlite-一个数据库两张表

实现对数据库info.db的表signalinfo,resultsinfo的操作。


提示:这里可以添加本文要记录的大概内容:

编程参考:
https://blog.csdn.net/sinat_38184748/article/details/88532631
https://blog.csdn.net/qq_19343089/article/details/72985675


提示:以下是本篇文章正文内容,下面案例可供参考

1.Dbhelper

代码如下(示例):


/*
 *定义:SQLiteOpenHelper是一个辅助类
 *作用:管理数据库(创建、增、修、删) & 版本的控制。
 *使用过程:通过创建子类继承SQLiteOpenHelper类,实现它的一些方法来对数据库DataBase进行操作。
 *在实际开发中,为了能够更好的管理和维护数据库,
 *我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,
 *然后以这个类为基础,再封装我们的业务逻辑方法。
 *
 * SQLite数据库打开助手DbHelper作为抽象类SQLiteOpenHelper的子类
 * 需要重写2个抽象方法onCreate()和onUpgrade()
 */
public class SignalDbHelper extends SQLiteOpenHelper {
    public static final String DataBase_name = "info.db";//数据库名.db


    public static final String SignalTable_name = "signalinfo";//信号数据库表1名
    public static final String ResultsTable_name = "resultsinfo";//结果数据库表2名
    public static final int DataBase_version = 1;//数据库版本号
    public static final String longitude = "longitude", latgitude = "latgitude",distance="distance",sign="sign";//数据库主要内容,经度,纬度,当前点与信号源距离(Rssi计算得出)
    public static final String wname = "wname", wlongitude = "wlongitude",wlatgitude = "wlatgitude",wsign="wsign";//ap源经度,纬度,名字

    //构造方法:第1参数为上下文,第2参数库库名,第3参数为游标工厂,第4参数为版本
    public SignalDbHelper( Context context) {
        super(context, DataBase_name, null, DataBase_version);//name数据库名.db  仅一个数据库.db
    }

    //创建数据库自动执行
    @Override
    public void onCreate(SQLiteDatabase db) {

        //不存在时建表,第一字段为自增长类型
        db.execSQL("create table if not exists "+ SignalTable_name +"(_id INTEGER PRIMARY KEY AUTOINCREMENT,longitude DOUBLE NOT NULL,latgitude DOUBLE NOT NULL,distance DOUBLE NOT NULL,sign TEXT);");
        db.execSQL("create table if not exists "+ ResultsTable_name +"(_id INTEGER PRIMARY KEY AUTOINCREMENT,wname TEXT NOT NULL, wlongitude DOUBLE NOT NULL,wlatgitude DOUBLE NOT NULL,wsign TEXT);");
    }

    //数据库版本升级自动执行
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists "+ SignalTable_name);//表存在删除
        db.execSQL("drop table if exists "+ ResultsTable_name);//表存在删除
        onCreate(db);//重建数据库
    }

}

2.DAO 编写对两个表的CURD方法

代码如下(示例):


/*
  本类DAO调用了打开数据库的助手类DbHelper
  本类DAO提供的CRUD接口针对数据库info.db的表signalinfo,resultsinfo

DAO (Data Access Object) 数据库操作对象设计模式,对数据库的CRUD的封装,简化代码中数据库的操作
数据库使用完关闭
DAO(数据访问对象)是一种API(应用程序编程接口)
 */
public class SignalDAO {
    private SQLiteDatabase sch_db;
    private SignalDbHelper sch_helper;//类的对象

    public  String DataBase_name = "info.db";//数据库名.db


    //构造函数,初始化数据库info.db
    public SignalDAO(Context contsxt) {
        //初始变量
        //第1参数为上下文,第2参数为数据库名(无,在dbhelper中)
        this.sch_helper = new SignalDbHelper(contsxt);
    }
    //关闭数据库
    public void closeDatabase() {
        sch_db.close();
    }

    //表一操作
    /*
     *新增Signal插入记录
     */
    public void insertSignalInfo(double lon, double lat,double dis,String sign) {
        // 通过DBHelper类获取一个读写的SQLiteDatabase对象
        sch_db = sch_helper.getWritableDatabase();
        // 创建ContentValue设置参数
        ContentValues contentValues = new ContentValues();
        contentValues.put(SignalDbHelper.longitude, lon);
        contentValues.put(SignalDbHelper.latgitude, lat);
        contentValues.put(SignalDbHelper.distance, dis);
        contentValues.put(SignalDbHelper.sign, sign);
        // 插入数据
        // insert方法参数1:要插入的表名
        // insert方法参数2:如果发现将要插入的行为空时,会将这个列名的值设为null
        // insert方法参数3:contentValue
        long i = sch_db.insert(SignalDbHelper.SignalTable_name, null, contentValues);//成功id,失败-1
        Log.v("signal数据库测试", "插入");

        // 释放连接
//        sch_db.close();//一般来说不要随便close(),我认为在在Activity执行onDestory的时候调用close()比较合理,或者整个App退出的时候再close()。
    }

    /*
     *查询
     * 返回全部Signal
     */
    public Cursor allQuerySignalInfo() {
        // 通过DBHelper类获取一个读写的SQLiteDatabase对象
        sch_db = sch_helper.getWritableDatabase();
        Cursor cursor=sch_db.rawQuery("select * from "+ SignalDbHelper.SignalTable_name, null);
        //sch_db.close();
        Log.d("signal数据库查询所有结果", String.valueOf(cursor.getCount()));

        return cursor;
    }

    /*
  查询数据表记录数Signal
    */
    public  int getSignalRecordsNumber(){  //返回数据表记录数
        sch_db = sch_helper.getReadableDatabase();
        Cursor cursor= sch_db.rawQuery("select * from "+SignalDbHelper.SignalTable_name,null);
        return cursor.getCount();
    }

    /*
    清空表Signal
     */
    public void clearSignalTable() {
        sch_db = sch_helper.getWritableDatabase();
        sch_db.execSQL("delete from " + SignalDbHelper.SignalTable_name);
        Log.d("signal清空数据表","....");

    }

    //表二操作
    /*
     *新增插入记录Wifi
     */
    public void insertWifiInfo(String wname,double lon, double lat,String wsign) {
        // 通过DBHelper类获取一个读写的SQLiteDatabase对象
        sch_db = sch_helper.getWritableDatabase();
        // 创建ContentValue设置参数
        ContentValues contentValues = new ContentValues();
        contentValues.put(SignalDbHelper.wname, wname);
        contentValues.put(SignalDbHelper.longitude, lon);
        contentValues.put(SignalDbHelper.latgitude, lat);
        contentValues.put(SignalDbHelper.wsign,wsign);
        // 插入数据
        // insert方法参数1:要插入的表名
        // insert方法参数2:如果发现将要插入的行为空时,会将这个列名的值设为null
        // insert方法参数3:contentValue
        long i = sch_db.insert(SignalDbHelper.ResultsTable_name, null, contentValues);//成功id,失败-1
        Log.v("wifi数据库测试", "插入");

        // 释放连接
//        sch_db.close();//一般来说不要随便close(),我认为在在Activity执行onDestory的时候调用close()比较合理,或者整个App退出的时候再close()。
    }


    /*
     *查询
     * 返回全部Wifi
     */
    public Cursor allQueryWifiInfo() {
        // 通过DBHelper类获取一个读写的SQLiteDatabase对象
        sch_db = sch_helper.getWritableDatabase();
        Cursor cursor=sch_db.rawQuery("select * from "+ SignalDbHelper.ResultsTable_name, null);
        //sch_db.close();
        Log.d("wifi数据库查询所有结果", String.valueOf(cursor.getCount()));

        return cursor;
    }
    /*通过wifi标志更新记录

     */
    private void updateWifiInfo(String wname,double lon, double lat,String wsign) {
        sch_db = sch_helper.getReadableDatabase();
        // 创建ContentValue设置参数
        ContentValues contentValues = new ContentValues();
        contentValues.put(SignalDbHelper.wname, wname);
        contentValues.put(SignalDbHelper.longitude, lon);
        contentValues.put(SignalDbHelper.latgitude, lat);
        contentValues.put(SignalDbHelper.wsign,wsign);
        // 修改数据
        // 参数1:tablename
        // 参数2:修改的值
        // 参数3:修改的条件(SQL where语句)
        // 参数4:表示whereClause语句中的表达式的占位符参数列表,这些字符串会替换where条件中?
        int i = sch_db.update(SignalDbHelper.ResultsTable_name, contentValues, SignalDbHelper.wsign + "=?", new String[]{wsign});
        if (i < 1)
            Log.v("wifi数据库测试", "更新失败");

//        sch_db.close();
    }

    /*通过id查找对应记录wifi,id-wsign
     */
    public Cursor idWifiQuery(String id) {
        sch_db = sch_helper.getReadableDatabase();
        // 调用SQLiteDatabase对象的query方法进行查询
        // 返回一个Cursor对象:由数据库查询返回的结果集对象
        Cursor cursor = sch_db.query(SignalDbHelper.ResultsTable_name, null, SignalDbHelper.wsign + "=?", new String[]{String.valueOf(id)}, null, null, null);
        // 第一个参数String:表名
        // 第二个参数String[]:要查询的列名
        // 第三个参数String:查询条件
        // 第四个参数String[]:查询条件的参数
        // 第五个参数String:对查询的结果进行分组
        // 第六个参数String:对分组的结果进行限制
        // 第七个参数String:对查询的结果进行排序
//        sch_db.close();
        Log.d("wifi数据库查询结果(是否存在)", String.valueOf(cursor.getCount()));
        return cursor;
    }


}


3.使用DAO对象进行数据库操作

省略......


  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值