Sqltie数据库
SQLite数据库介绍
1.SQLite数据库介绍
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。
2.特点
(1)体积小:最低只需要几百K的内存就可以运行。
(2)性能高:对数据库的访问性能很高,其运行速度比Mysql等开源数据库要快很多。
(3)可移植性强:能支持各种32位和64位体系的硬件平台,也能在Windows、Linux、BSD、Mac OS、Solaries等软件平台中运行。
(4)SQL支持:SQLite支持ANSI SQL92中的大多数标准,提供了对子查询、视图、触发器等机制的支持。
(5)接口:SQLite为C、Java、PHP、Python等多种语言提供了API接口,所有的应用程序都必须通过接口访问SQLite数据库。
3.在程序的内部可以通过数据库的名称访问, 其他应用不能访问
4.路径: data/data/应用程序包名/database/ ****.db
5.存放的类型:
NULL 空值
INTEGER 整型(不用int)
VARCHAR 可变长度的字符数据
TEXT 文本字符串
BOOLEAN 布尔
DATE
SQL语句复习
1.创建表:
create table student(_id integer primary key autoincrement,name varchar(30),age integer,address varchar(30));
2.添加数据:
insert into student values(null,‘周’,17,‘北京市海淀区’);
3.修改数据:
update student set age=18,address=‘辽宁省’ where name=‘sgf’
4 查询数据:
select * from student where 字段 = ‘值’
模糊查询: select * from 表名 where name like ‘%小%’
select * from student order by age desc 降序查询
sum(列名) 求和
max(列名) 最大值
min(列名) 最小值
avg(列名) 求平均值
count(列名) 统计记录数
5.删除数据:
delete from student where id=1;
数据库使用及两个核心类
一, SQLiteOpenHelper
数据库的帮助类, “用于数据库的创建和版本更新”
使用方式:
(1)定义一个类, 继承SQLiteOpenHelper
(2)重写构造方法 :提供数据库的基本信息 : 上下文对象,数据库名称,Null,数据库的版本号
(3)重写父类的两个方法:
onCreate(): onUpgrade()
public class MySQLHelper extends SQLiteOpenHelper {
/**
* 构造
* @param context 上下文
* @param name 数据库名称
* @param factory 创建数据的工厂对象
* @param version 数据版本号
*/
public MySQLHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 注意:onCreate方法只会执行一次,如果想要修改表的字段,
* 修改oncreate方法的话是不行的,需要删除之前生成的数据库
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table user(_id integer primary key autoincrement,name varchar(20),age integer(10))");
}
/**
* 更新数据 --- 如果数据库的 版本号发生变化, 执行该方法 --- 执行多次
* @param db
* @param oldVersion 老版本号
* @param newVersion 新版本号
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
二. SQLiteDatabase
用于数据库的操作类, “操作数据库: 执行sql语句/增/删/改/查”
通过SQLiteOpenHelper获取SQLiteDatabase对象
public class MainActivity extends AppCompatActivity {
//通过构造创建一个db;
private SQLiteDatabase readableDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MySQLHelper mySQLHelper = new MySQLHelper(MainActivity.this, "mySQL.db", null, 1);
//可读可写.磁盘满了在尝试打开.(推荐使用)
readableDatabase= mySQLHelper.getReadableDatabase();
//可读可写.磁盘满了,打开报错.
// db = mySqlHelper.getWritableDatabase();
}
}
在Activity中执行命令,即可创建出来数据库:
操作数据中的值分下面两种.
(1)执行sql 语句(推荐使用)
void execSQL(String sql,String[] bindArgs); 执行增删改
Cusor rawQuery(String sql,String[] selectionArgs); 执行查询
(2)执行方法 – 封装好的方法 (适用于菜鸟级别的程序员)
insert() 插入数据
update() 修改数据
delete() 删除数据
query() 查询数据
在MainActivity中添加一个插入方法
insert.setOnClickListener(new View.OnClickListener() {
//方法1,占位符的形式
@Override
public void onClick(View v) {
String sql="insert into user(_id,name,age) values (?,?,?)";
// readableDatabase.execSQL(sql,new Object[]{user.getName(),user.getAge(),user.getAddress()});
// readableDatabase.execSQL(sql,new Object[]{null,"小明",19});
//方法2,系统的insert方法
ContentValues contentValues = new ContentValues();
contentValues.put("name",user.getName());
contentValues.put("age",user.getAge());
contentValues.put("address",user.getAddress());
readableDatabase.insert("user",null,contentValues);
}
});
封装一个User类
public class User {
private Integer id;
private String name;
private Integer age;
public User() {
}
public User(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
在MainActivityv中添加一个update()方法.
// 注意 参数不在是user,而是要跟新的字段和字段值
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//方法1
String sql = "update user set age = ? where _id=?";
// db.execSQL(sql,new Object[]{user.getAge(),user.get_id()});
//方式2
ContentValues contentValues = new ContentValues();
contentValues.put("age",age);
readableDatabase.update("user",contentValues,"_id = ?",new String[]{id+""});
}
});
在MainActivity中添加一个delete()方法.
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sql = "delete from user where _id = ?";
readableDatabase.execSQL(sql,new Object[]{"2"});
readableDatabase.delete("user","_id=?",new String[]{"2"});
}
});
在MainActivity中添加一个query()方法.
find.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// String sql = "select * from user where _id=?";
// Cursor cursor = readableDatabase.rawQuery(sql, new String[]{"1"});
// if (cursor!=null){
// while(cursor.moveToNext()){
// String name = cursor.getString(cursor.getColumnIndex("name"));
// Toast.makeText(MainActivity.this,name,Toast.LENGTH_SHORT).show();
// }
// }
// cursor.close();
Cursor cursor = readableDatabase.query("user", null, null, null, null, null, null);
if (cursor!=null){
while(cursor.moveToNext()){
String id = cursor.getString(cursor.getColumnIndex("id"));
String age = cursor.getString(cursor.getColumnIndex("age"));
String name = cursor.getString(cursor.getColumnIndex("name"));
// Toast.makeText(MainActivity.this,name,Toast.LENGTH_SHORT).show();
User user = new User();
user.setId(Integer.parseInt(id));
user.setName("name");
user.setAge(Integer.parseInt(age));
users.add(user);
Toast.makeText(MainActivity.this,users.size()+"",Toast.LENGTH_SHORT).show();
}
}
cursor.close();
}
});
xml文件的内容
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="INSERT"
android:id="@+id/insert"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="插入一条数据"
android:id="@+id/add"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="UPDATE"
android:id="@+id/update"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="DEL"
android:id="@+id/delete"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="find"
android:id="@+id/find"/>
</LinearLayout>