首页 > 程序开发 > 移动开发 > Android > 正文
Android SQLite使用
2017-06-19 09:36:57       个评论    来源:nirean的博客  
收藏    我要投稿

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 getAllAea() {
        List list = new ArrayList();
        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());

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

点击复制链接 与好友分享!回本站首页
上一篇:Android 通用网络框架封装
下一篇:十一、Android设计模式
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 |
版权所有: 88bifa.com--致力于做实用的IT技术学习网站