1.SQLite是什么?
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置,轻量型的数据库,这意味着与其他数据库一样,不需要在系统中配置,就像其他数据库,SQLite引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接,SQLite 直接访问其存储文件。
2.为什么要使用SQLite?
- 不需要一个单独的服务器进程或操作的系统(无服务器的)。
- SQLite 不需要配置,这意味着不需要安装或管理。
- 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
- SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
- SQLite 是自给自足的,这意味着不需要任何外部的依赖。
- SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
- SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
- SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
- SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。
3.使用方法
1.新建一个类继承SQLiteOpenHelper 并实现其中的方法
- 构造方法
- SQLiteOpenHelper类的常用方法:onCreate方法 onUpgrade方法
2.重写onCreate方法
此方法只会在第一次创建时执行,只会执行一次
在此方法中使用标准的SQL语句创建数据表
onCreate方法有一个SQLiteDatabase对象参数,通过调用execSQL方法执行建表SQL语句3
.重写onUpgrade方法
此方法用来升级数据库表结构时触发
当需要增加表字段或增加表时,传递进来一个新的数据库版本号,就会触发此方法
4.实例化SQLiteOpenHelper的子类对象,例如本例的DBHelp类
- 创建数据表
create table 表名(
列名 数据类型 主键(primary key) 依次递增(autoincrement) 不为空(not null),
列名 数据类型 ,
列名 数据类型
);
每条数据一定要用英文逗号隔开
常见数据类型:
- NULL–空值
- REAL–浮点型
- TEXT–文本
- INTEGER–整型
6.调用getReadableDatabase方法或getWritableDatabase方法。
例子:
package com.example.fpl.killerapplication;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MySqliteHelper extends SQLiteOpenHelper {
private String sql="create table student(" +
"id integer primary key autoincrement not null ," +
"name text ," +
"age integer " +
")";
public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
新建好了数据库就可以使用了
package com.example.fpl.killerapplication;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class StudentActivity extends AppCompatActivity implements View.OnClickListener {
private EditText nameTV;
private EditText ageTV;
private Button button;
private Button findbtn;
private StudentAdapter studentAdapter;
private Button changebtn;
private Button delbtn;
private String TAG="List";
private ListView listView;
private List<Student_bean> student_beanList=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_student);
bindID();
button.setOnClickListener(this);
findbtn.setOnClickListener(this);
changebtn.setOnClickListener(this);
delbtn.setOnClickListener(this);
}
private void bindID() {
nameTV=findViewById(R.id.name_ET);
ageTV=findViewById(R.id.age_ET);
button=findViewById(R.id.confirm_btn);
findbtn=findViewById(R.id.find_btn);
changebtn=findViewById(R.id.change_btn);
delbtn=findViewById(R.id.delete_btn);
listView=findViewById(R.id.StudentDATA_lv);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.confirm_btn:
addStudent();
break;
case R.id.find_btn:
findstudent();
break;
case R.id.change_btn:
changestudent();
break;
case R.id.delete_btn:
deletestudent();
break;
default:
break;
}
}
//删除学生表数据
private void deletestudent() {
String name=nameTV.getText().toString();
String age=ageTV.getText().toString();
MySqliteHelper mySqliteHelper=new MySqliteHelper(this,"student-tables",null,1);
SQLiteDatabase sqLiteDatabase=mySqliteHelper.getWritableDatabase();
sqLiteDatabase.delete("student","name=? and age=?",new String[]{name,age});
}
//修改表中数据
private void changestudent() {
}
//查询表中数据
private void findstudent() {
student_beanList.clear();
MySqliteHelper mySqliteHelper=new MySqliteHelper(this,"student-tables",null,1);
SQLiteDatabase sqLiteDatabase=mySqliteHelper.getWritableDatabase();
//获取游标
Cursor cursor=sqLiteDatabase.query("student",null,null,null,null,null,null);
//游标置顶
cursor.moveToFirst();
do {
String name=cursor.getString(1);
int age=cursor.getInt(2);
Student_bean student_bean=new Student_bean(name,age);
student_beanList.add(student_bean);
studentAdapter=new StudentAdapter(this,student_beanList );
Log.e(TAG,"Liststudent: "+name+" ,age: "+age);
}while (cursor.moveToNext());
listView.setAdapter(studentAdapter);
}
//添加数据
private void addStudent() {
String name=nameTV.getText().toString();
int age= Integer.parseInt(ageTV.getText().toString());
ContentValues values=new ContentValues();
//以键值对的方式
values.put("name",name);
values.put("age",age);
//使用前面创建好的类,实例化出对象,后面分别是数据库名和版本号
MySqliteHelper mySqliteHelper=new MySqliteHelper(this,"student-tables",null,1);
SQLiteDatabase sqLiteDatabase=mySqliteHelper.getWritableDatabase();
//使用insert方法传入表中
sqLiteDatabase.insert("student",null,values);
}
}