SQLite是一个轻量级的数据库,和C/S模式的数据库软件不同,他是进程内的数据库引擎,因此不存在数据库的客户端和服务器,而且Android系统自带了SQLite数据库。
首先我们科普一下数据库:数据库大概分为关系型数据库和非关系型数据库,这两种大概的就是存储的方式不同。
关系型数据库:是表格格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。例如:MySQL,Oracle数据库,SQL Server,Microsoft Access,还有我们要讲的SQLite也属于关系型数据库
非关系型数据库:不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。例如:NoSQL(我没怎么用过非关系型数据库)
起始随着物联网的兴起也经常会用到时序型数据库例如:InfluxDB,Informix TimeSeries,我理解这个数据库也属于关系型,因为他也是以表格的形式存储的,但是叫法不一样,其中:database 数据库;measurement 数据库中的表;point 表中的一行数据。主要用于传感器的数据的采集与记录,后期我们可以试着让SQLite具备一些时序数据库的功能。
关系型数据库简介
上面提到了数据库是表格形式的。数据库、表、字段他们的关系是下面这样的。好多地方说的数据库天花乱坠,其实经常用到的也就增、删、改、查。但是如果想高效查询数据其实还有很多需要了解的,每一种数据库为了提高效率都有好多的数据库命令,SQLilte也不例外。
创建一个数据库
创建数据库比较简单,因为系统自带SQLite所以使用数据库只需要继承SQLiteOpenHelper 并重写其他其中的两个方法就能创建一个数据库。注意:不是每次构造此类都调用onCreate的,只有在第一次创建数据库的时候才调用此方法。以后要想获得这个数据库使用getReadableDatabase()这个方法才能得到这个数据库。 所以我不计划在onCreate函数中创建表格的函数
public class DatabaseHelper extends SQLiteOpenHelper {
//构造函数
public DatabaseHelper(Context context, String name, int version) {
//context 数据库名字 游标位置 版本
super(context, name, null, version);
}
//当第一次创建数据库的时候调用这个方法
@Override
public void onCreate(SQLiteDatabase db) {
Log.e(TAG,"创建数据库");
}
//当更新数据库版本号的时候回执行该方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e(TAG,"数据库更新了版本");
}
}
在数据库中创建一个表
为了简化代码只做了一个创建表格的示例,其实有一些判断表是否存在,或者表里面的字段是否一致。如果不一致说明有人恶意搞了表格,你需要删除掉重新创建一个表格。
public void createTable(String tableName){
SQLiteDatabase m_DB=getReadableDatabase();
//在这里添加判断表名与
//判断字段是否一样
//创建一个表
// 用途 字段名称 数据类型
// ID id int
// 存入的值 value float
// 备注 note varchar(20)
// 时间戳 stamp long
String command="create table ";//命令头
String value="(id int,value float ,note varchar(20),stamp long)";
String sql=command+tableName+value;//命令=头+表名+值
m_DB.execSQL(sql);//执行SQL语句
Log.i(TAG,"创建表格"+tableName+"成功");
}
在表格里面添加点数据
注意如果表格不存在会报出错误;源码中已经进行了try{}catch()处理所以如果出错,则会返回-1。我们需要判断是否错误进行插入出错时处理,一般情况如果格式正常,就是表格没有建立,所以我这里重新建立一次表格。
public void saveData(String tableName, float value){
SQLiteDatabase m_DB=getReadableDatabase();
Calendar calendar = Calendar.getInstance();//内容
ContentValues values=new ContentValues();//内容值
values.put(FiledName.ID,12345);
values.put(FiledName.VALUE,value);
values.put(FiledName.STAMP,1583240063);//简化代码随便写一个
values.put(FiledName.NOTE,"111");
if(m_DB.insert(tableName,null,values)==-1){//插入一条数据
Log.e(TAG,"添加数据的时候发生错误,重新建立表格");
createTable(tableName);//如果发现错误重新建立这个表格
//如果等于-1则可能数据库中没有这个表格
}
}
把数据读取出来
public void takeOutAll(String tableName){
SQLiteDatabase m_DB=getReadableDatabase();
createTable(tableName);//创建一下表格如果有了表格则提取出来如果没有则重新创建并提取出来
String[] field={"id","value","note","stamp"};
Cursor cursor=m_DB.query(tableName,field,null,null,null,null,null);
Log.e(TAG,"获得结果个数:"+cursor.getCount());//获取结果的数量
while (cursor.moveToNext()){
// Log.e(TAG,"列计数"+cursor.getColumnCount());//获取列计数的方法
long id= cursor.getInt(0);
float value= cursor.getInt(1);
String note= cursor.getString(2);
int stamp= cursor.getInt(4);
Log.e(TAG,"提取数据id="+id +" value="+value+" note="+note+" 时间戳="+stamp);
}
cursor.close();
}
致此我们已经对数据库有了初步了解,后续我们可以继续完善代码。
来源:CSDN
作者:叫我腾飞
链接:https://blog.csdn.net/qq_33593411/article/details/104639760