大家好,今天我给大家整理了一些关于Android本地数据库SQLite搭建的详细步骤!
SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。
首先,我们先建立一个Constant.java类来存放一些关于数据库的常量如下:
package com.example.boybaby.yicetong.SQLiteDatabase;
/**
* Created by Boy Baby on 2018/3/15.
*/
public class Constant {
public static final String DATABASE_NAME = "info.db"; // 数据库名称
public static final int DATABASE_VERSION = 1; //数据库版本
public static final String TABLE_NAME = "TH_Data"; //数据库表名
/**
*ID、TEMP、HUMIDITY、CO2、LAST_TIME、LAST_TIME 一下是数据库表中的字段
*/
public static final String ID = "id"; //id主键
public static final String TEMP = "temp"; //温度
public static final String HUMIDITY = "humidity"; //湿度
public static final String CO2 = "co2"; //二氧化碳
public static final String LAST_TIME = "lastUpdateTime";//更新时间
/**
* TP_DATA 第二个表
*/
public static final String TABLE1_NAME = "TP_DATA";
public static final String CITY = "city";
}
然后,我们创建一个类来写创建数据库的方法类,该类(MySqliteHelper)继承于SQLiteOpenHelper,该类封装了一系列关于数据库的增删改查的方法,如下:
package com.example.boybaby.yicetong.SQLiteDatabase;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Boy Baby on 2018/3/14.
*/
public class MySqliteHelper extends SQLiteOpenHelper {
/**
*
* @param context 上下文对象
* @param name 创建数据库名字
* @param factory 工厂
* @param version 版本
*/
//构造函数
public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
public MySqliteHelper(Context context){
super(context,Constant.DATABASE_NAME,null,Constant.DATABASE_VERSION);
}
/*
创建数据库时使用的函数
*/
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String sql = "create table "+Constant.TABLE_NAME+"("+
Constant.ID+" Integer primary key ,"+
Constant.TEMP+" Integer,"+
Constant.HUMIDITY+" Integer,"+
Constant.CO2+" Integer,"+
Constant.LAST_TIME+" varchar(50))";
sqLiteDatabase.execSQL(sql);
String sql1 = "create table "+Constant.TABLE1_NAME+" ("+
Constant.ID+" Integer primary key ,"+
Constant.CITY+" varchar(20)) ";
sqLiteDatabase.execSQL(sql1);
}
/**
* 更新数据库时调用
* @param sqLiteDatabase
* @param i
* @param i1
*/
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
数据库建好之后,我们再建立一个DbManger类,是写数据库操作的工具类如下:
package com.example.boybaby.yicetong.SQLiteDatabase;
/**
* Created by Boy Baby on 2018/3/14.
*/
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
/**
* Created by 11929 on 2018/3/11.
* 主要对数据库的操作工具类
*/
public class DbManger {
private static MySqliteHelper helper; //建立一个数据库对象
/**
*
* @param context 本类的上下文对象
* @return
*/
public static MySqliteHelper getIntance(Context context){
if (helper == null){
helper = new MySqliteHelper(context);
}
return helper;
}
/**
* 查找方法
* 返回的是一个Cursor对象
* selectionArgs 查询条件占位符
*/
public static Cursor selectSQL(SQLiteDatabase db, String sql, String[] selectionArgs){
Cursor cursor = null;
if (db != null){
cursor = db.rawQuery(sql,selectionArgs);
}
return cursor;
}
/**
* 删改数据库
* @param db 数据库对象
* @param sql 删改语句
*/
public static void execSQL(SQLiteDatabase db, String sql){
if (db!=null) {
if (sql != null && !"".equals(sql)) {
db.execSQL(sql);
}
}
}
/**
* 将Curcor对象转化成list集合
* @param cursor 游标
* @return 集合对象
*/
public static ArrayList cursorToList(Cursor cursor){
ArrayList list = new ArrayList<>();
while (cursor.moveToNext()){ //判断游标是否有下一个字段
//getColumnIndext作用是返回给定字符串的下标(指的是int类型)
int columnIndex = cursor.getColumnIndex(Constant.ID);
//通过下标找到指定value
int id = cursor.getInt(columnIndex); // 获取id
int temp = cursor.getInt( cursor.getColumnIndex(Constant.TEMP)); //获取温度
int humidity = cursor.getInt(cursor.getColumnIndex(Constant.HUMIDITY)); //获取湿度
int co2 = cursor.getInt(cursor.getColumnIndex(Constant.CO2)); //获取二氧化碳
String time = cursor.getString(cursor.getColumnIndex(com.example.boybaby.yicetong.SQLiteDatabase.Constant.LAST_TIME)); //获取时间
TH_Data th_data = new TH_Data(id,temp,humidity,co2,time);
list.add(th_data);
}
return list;
}
public static ArrayList cursor1ToList(Cursor cursor){
ArrayList list = new ArrayList();
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex(Constant.ID));
String city = cursor.getString(cursor.getColumnIndex(Constant.CITY));
TP_Data tp_data = new TP_Data(id, city);
list.add(tp_data);
}
return list;
}
}
再建立一个存放数据的类:
package com.example.boybaby.yicetong.SQLiteDatabase;
/**
* Created by Boy Baby on 2018/3/15.
*/
public class TH_Data {
private int ID;
private int TEMP;
private int HUMIDITY;
private int CO2;
private String time;
public String toTemp(){
return this.getTEMP()+" ";
}
public String toHumidity(){
return this.getHUMIDITY()+" ";
}
public String toCo2(){
return this.getCO2()+"";
}
public TH_Data(int ID, int TEMP, int HUMIDITY, int CO2, String TIME) {
this.ID = ID;
this.TEMP = TEMP;
this.HUMIDITY = HUMIDITY;
this.CO2 = CO2;
this.time = TIME;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
public int getTEMP() {
return TEMP;
}
public void setTEMP(int TEMP) {
this.TEMP = TEMP;
}
public int getHUMIDITY() {
return HUMIDITY;
}
public void setHUMIDITY(int HUMIDITY) {
this.HUMIDITY = HUMIDITY;
}
public int getCO2() {
return CO2;
}
public void setCO2(int CO2) {
this.CO2 = CO2;
}
}
在MainActivity.java中进行数据的插入,如下:
第一:创建数据库:
/*
点击按钮创建数据库
*/
public void createDB(){
SQLiteDatabase db = helper.getWritableDatabase(); //创建数据库
db.close();
}
第二:查询数据库:
//查询数据库
SQLiteDatabase db = helper.getWritableDatabase();
String selectSql = "select * from "+Constant.TABLE_NAME;
Cursor cursor = DbManger.selectSQL(db,selectSql,null);//查询结果用cursor类型数据存储
if(cursor.getCount()==0){
i=1;
}else{
i=cursor.getCount()+1;
}
//获取到数据插入数据库
String sql = "insert into " + Constant.TABLE_NAME +" values ("+i+","+temp_value+","+humidity_value+","+co2_value+",'"+time_temp+"')";
DbManger.execSQL(db,sql);//执行语句
db.close();
注意:查询完数据库要及时关闭!
db.close();//关闭数据库