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());
就可以使用啦 破解方法网上有,只需要替换相关文件就好了