Android SQLite使用

SQLite
1、首先创建一个类继承SQLiteOpenHelper
在构造函数中调用 super(context, DATABASENAME,null, 2);来创建数据库,
参数具体为 容器,数据库名,数据库版本号。
这里我的String DATABASENAME = “test.db”,
接着在构造函数中就可以创建需要的表了。

package com.example.mac.agriculturemanagement;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by mac on 2017/6/11.
 */

public class AllData extends SQLiteOpenHelper {

    private static final String DATABASENAME = "test.db";

    public AllData(Context context) {
        super(context, DATABASENAME,null, 2);

    }
    //创建表
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table agriculture (" +
                "id integer primary key," +
                "kind varchar(20)," +
                "land_area varchar(10),land_area_mark varchar(10),land_area_key integer," +
                "plant_date varchar(20)," +
                "on_market_time varchar(20),off_market_time varchar(20)," +
                " weight integer,square integer)");

        db.execSQL("create table allarea (" +
                "id integer primary key," +
                "myarea varchar(20)," +
                "mysquare integer)");

        db.execSQL("create table market (" +
                "id integer primary key, mymark varchar(20),myarea varchar(20),square integer"+
                ")");

    }

    public boolean deleteDatabase(Context context)
    {
        return context.deleteDatabase(DATABASENAME);
    }



    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //db.execSQL("alter table agriculture add acount varchar(20)");
        System.out.println("onUpgrade");
    }
}

2、可以创建一个类来放置所有的查询,修改操作
这里为创建了一个Agriculture类来存放所有对数据库的操作。

3、增加一条数据

public long insert(Agriculture agriculture) {
        Area area =new Area(agriculture.getLand_area(),agriculture.getLand_mark());
        HaveSquare haveSquare = this.getMarkSquare(area);
        SQLiteDatabase db = allData.getWritableDatabase();
        long result;
        if(agriculture.getSquare()>haveSquare.getAllSquare()-haveSquare.getRestSquare())
        {
            result = 0;
        }
        else
        {

            ContentValues values = new ContentValues();
//        System.out.println(agriculture.getKind());
            values.put("kind", agriculture.getKind());
            values.put("land_area", agriculture.getLand_area());
            values.put("land_area_mark", agriculture.getLand_mark());
            values.put("land_area_key", agriculture.getLand_area_key());
            values.put("plant_date", agriculture.getPlant_date());
            values.put("on_market_time", agriculture.getOn_market_time());
            values.put("off_market_time", agriculture.getOff_market_time());
            values.put("weight", agriculture.getWeight());
            values.put("square", agriculture.getSquare());

            result = db.insert("agriculture", null, values);
            /*db.execSQL("insert into agriculture (kind,land_area,land_area_mark," +
                    "plant_date,on_market_time,off_market_time,weight,square)" +
                    "values (?,?,?,?,?,?,?,?)",new Object[]{agriculture.getKind(),
            agriculture.getLand_area(), agriculture.getLand_mark(), agriculture.getPlant_date(),
            agriculture.getOn_market_time(), agriculture.getOff_market_time(), agriculture.getWeight(),
            agriculture.getSquare()});*/

        }
        db.close();
        return result;
    }

这里有两种方法,
第一种:将列名和值添加到ConventionValues对象中,通db.insert(“agriculture”, null, values);来完成插入操作。
第二种:直接使用SQL查询语句,这里就不仔细说明了。

db.execSQL("insert into agriculture (kind,land_area,land_area_mark," +
                    "plant_date,on_market_time,off_market_time,weight,square)" +
                    "values (?,?,?,?,?,?,?,?)",new Object[]{agriculture.getKind(),
            agriculture.getLand_area(), agriculture.getLand_mark(), agriculture.getPlant_date(),
            agriculture.getOn_market_time(), agriculture.getOff_market_time(), agriculture.getWeight(),
            agriculture.getSquare()});

4、删除操作

public int deleteMark(String rightMark) {

        SQLiteDatabase db = allData.getWritableDatabase();
        Cursor c = db.rawQuery("select id from agriculture where land_area_mark = ?",
                new String[]{rightMark});
        if(c.moveToNext())
        {
            return 0 ;
        }
        db.execSQL("delete FROM market where mymark = ?",new String[]{rightMark});
        return 1;

    }

这里需要注意的是
getWritableDatabase(); 和 getReadableDatabase()顾名思义一个是用来进行读操作(select)和写操作(insert,delete)。

execSQL()和rawQuery 前者用于没有返回值的查询,后者用于有返回值。

db.execSQL(“delete FROM market where mymark = ?”,new String[]{rightMark});
db.rawQuery(“select myarea from allarea group by myarea “, null);
第二个参数里就是查询条件的具体值,按顺序调用。

5、查询操作

public List<String> getAllAea() {
        List<String> list = new ArrayList<String>();
        SQLiteDatabase db = allData.getReadableDatabase();
        Cursor cd = db.rawQuery("select myarea from allarea group by myarea ", null);
        while (cd.moveToNext()) {
            String area = cd.getString(0);
            list.add(area);
        }
        cd.close();
        db.close();
        return list;
    }

对查询结果的读取

 while (cd.moveToNext()) {
            String area = cd.getString(0);
            list.add(area);
        }

通过cd.moveToNext(),一个个读取结果。
cd.getString(0) 获取查询结果中的第一个值 从0开始。

注意!

数据库查询方法都是在开始的时候获取SQLiteDatabase对象,在结束的时候关闭 SQLiteDabse对象,结果内部的数据库查询方法在结束的时候直接关闭了 SQLiteDatabase对象,导致外面的数据库查询操作报错。解决方法就是先执行该类中 的其他方法,再建立该方法中对数据库的连接。

6、数据库可视化

首先需要下载as中的SQLite Explorer工具
这里写图片描述

打开需要调试的工程,在整个工程的 build.gradle 文件中 添加:

allprojects {
      repositories {
          jcenter()
          maven {
              url 'http://www.idescout.com/maven/repo/'
          }
      }
  }

在module 中的 build.gradle 中添加依赖:

compile 'com.idescout.sql:sqlscout-server:1.0'

这里写图片描述

在相应的Activity的 oncreate 方法中,加入下面一行代码:

SqlScoutServer.create(this, getPackageName());

就可以使用啦 破解方法网上有,只需要替换相关文件就好了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值