数据库介绍:
数据库指的是以一定方式储存在起、能为多个用户共享、具 有尽可能小的冗余度、与应用程序彼此独立的数据集合。 简单 来说可视为电子化的文件柜——存储电子文件的处所,用户可 以对文件中的数据运行新增、截取、更新、删除等操作
数据库分类:
关系型数据库(主流)、对象型数据库、层次式数据库
常用关系型数据库
PC端:Oracle、MySQL、SQL Server、Access、DB2、Sybase
嵌入式\移动客户端:SQLite
SQLite数据库:
SQLite是一个轻量级的关系数据库。SQLite最初的设计目标 是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只 需要几百K的内存就够了,目前应用于Android、iOS、Windows Phone等智能手机。
结构化查询语言(英语:Structured Query Language,缩写: SQL),是一种特殊目的之编程语言,用于数据库中的标准数据查询语言。
基本SQL语句:
1、选择:select * from student where 范围
2、插入:insert into student(列名, 列名) values(列值, 列值)
3、删除:delete from student where 范围
4、更新:update student set 列名=列值 where 范围
5、查找:select * from student where 列名 like “%列值%”
6、排序:select * from student order by 列名, 列名
7、总数:select count as total count from student
8、求和:select sum(列名) as sum value from student
9、平均:select avg(列名) as avgvalue from student
10、最大:select max(列名) as maxvalue from student
11、最小:select min(列名) as misvalue from student
SQLiteDatabase:
Android 提供了SQLiteDatabase代表一个数据库, 一旦应用程 序获得了指定数据库的对象, 接下来可以通过SQLiteDatabase 对象来管理,操作数据库。
使用SQLiteDatabase进行数据操作的步骤如下 :
1.获取SQLiteDatabase的对象,它代表了与数据库连接
3.操作SQL语句的执行结果,比如用SimpleCursorAdapter封装cursor
4.关闭SQLiteDatabase,回收资源
SQLiteDatabase使用:
DataHelper类:
public class DataHelper extends SQLiteOpenHelper{
//设置数据库的名字
private static final String NAME = "demo.db";
//设置版本号
private static final int VERSION = 1;
public DataHelper(Context context) {
//参数二 数据库文件的名字
//参数四 数据库版本
super(context, NAME, null, VERSION);
}
//创建该数据库文件时会被调用
//如果数据库文件存在的情况向不会执行该方法
//一般再次方法中创建表
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String sqlCreateTable = "create table person (_id integer primary key autoincrement," +
"name text,age integer,height integer);";
//方法参数中填入SQL语句
sqLiteDatabase.execSQL(sqlCreateTable);
}
//版本更新执行的方法
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
Person类(数据类):
public class Person {
private String name;
private int age;
private int height;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", height=" + height +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}
DataTool类:
public class DataTool {
private DataHelper helper;
public DataTool(Context context) {
//构造方法里初始化数据库的类
helper = new DataHelper(context);
}
//用来插入一条数据
//如果插入的数据是text类型,则需要加上"",使用转义符\添加
public void insert(Person p) {
String sqInsert = "insert into person (name,age,height) values (\"" +
p.getName() + "\"," + p.getAge() + "," + p.getHeight() + ");";
//通过帮助类获取到可写的数据库对象
SQLiteDatabase db = helper.getWritableDatabase();
//执行SQL语句
db.execSQL(sqInsert);
//数据库使用完需要关闭
db.close();
}
//第二种插入数据的方式
public void _insert(Person p) {
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
//将数据存入到values里面
//以KV的形式
//K 为对应的列名 V为对应的值
values.put("name", p.getName());
values.put("age", p.getAge());
values.put("height", p.getHeight());
//调用db的插入方法
db.insert("person", null, values);
//关闭数据库
db.close();
}
public void insert(List<Person> persons) {
//增强for循环,for 循环的另一种形式
for (Person person : persons) {
_insert(person);
}
}
public void delete() {
String sqlDelete = "delete from person ;";
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL(sqlDelete);
db.close();
}
public void _delete() {
SQLiteDatabase db = helper.getWritableDatabase();
//参数一 表名 参数二 条件
String whereClouse = "age > ? and height < ? ";
String[] whereArgs = {"20", "190"};
db.delete("person", whereClouse, whereArgs);
db.close();
}
public void update(){
String sqlUpdate = "update set person(name = \"孙悟饭\") where (age = 20)";
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL(sqlUpdate);
db.close();
}
public void _update(){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
//要修改什么, 就把什么值放到values里面
values.put("name","贝吉塔");
values.put("height",175);
String whereClause = "age = ?";
String[] whereArgs = {"25"};
db.update("person",values,whereClause,whereArgs);
db.close();
}
//查询
public Cursor query(){
String sqlQuery = "select * from person;";
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.rawQuery(sqlQuery,null);
return cursor;
}
public List<Person> _query(){
//设置数据库库可写
SQLiteDatabase db = helper.getWritableDatabase();
/*
参数一:表名
参数二:想要查找出列的数组
参数三/四:查询条件
参数五/六:填null
参数七:根据哪列排序的列名,如果按正序排列直接填列名,按倒序在列名后面加上**空格**desc
*/
String [] columns = {"name"+"age"};
List<Person> persons = new ArrayList<>();
Cursor c = db.query("person",null,null,null,null,null,null);
if (c != null && c.moveToFirst()){
int indexName = c.getColumnIndex("name");
int indexAge = c.getColumnIndex("age");
int indexHeight = c.getColumnIndex("height");
do {
String name = c.getString(indexName);
int age = c.getInt(indexAge);
int height = c.getInt(indexHeight);
Person p = new Person();
p.setName(name);
p.setAge(age);
p.setHeight(height);
persons.add(p);
}while (c.moveToNext());
c.close();
}
return persons;
}
}
MainActivity:
public class MainActivity extends AppCompatActivity {
private List<Person> personList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
personList = new ArrayList<>();
//创建DataTool对象
DataTool tool = new DataTool(this);
for (int i = 0; i < 10; i++) {
Person p = new Person();
p.setName("Tom" + i);
p.setAge(25 + i);
p.setHeight(180 + i);
//向数据库插入数据
tool.insert(p);
}
Cursor cursor = tool.query();
if (cursor == null) {
//如果为空做一些操作
log.d("MainActivity","数据库为空");
} else if (!cursor.moveToFirst()) {
//如果不能移动到首行,做一些操作
//说明读出来的Cursor不是null,但是是空
log.d("MainActivity","数据库的游标不在首行");
} else {
//说明可以读出来数据,确定某一列是第几列
int indexName = cursor.getColumnIndex("name");
int indexAge = cursor.getColumnIndex("age");
int indexHeight = cursor.getColumnIndex("height");
do {
//开始读数据
String name = cursor.getString(indexName);
int age = cursor.getInt(indexAge);
int height = cursor.getInt(indexHeight);
Person p = new Person();
p.setName(name);
p.setAge(age);
p.setHeight(height);
personList.add(p);
//游标移动到下一行
}while (cursor.moveToNext());
}
//游标也需要关闭
cursor.close();
//查看数据库中有多少条
Log.d("MainActivity", "personList.size():" + personList.size());
//获取数据库中有多少条
personList = tool._query();
Log.d("MainActivity", "personList:" + personList.size());
}
}
我们可以看到控制台输出:
以上就是对SQLite数据库的简单使用,后面我们还会介绍更为简洁的、更为好用的数据库框架,
本人菜鸟一个,有什么不对的地方,希望大家指出评论,大神勿喷!希望大家一起学习进步!