1、轻量级 ,可移植性好,它是进程内的数据库引擎,使用SQLite一般只需要带上它的一个动态库。
2、绿色软件 –它的核心引擎本身不依赖第三方的软件,Android系统集成的。
3、单一文件 –就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。
4、内存数据库
1、比较耗电
2、并发访问的锁机制,SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错
3、SQL标准支持不全
想要使用SQLite我们首先要创建一个数据库,这里需要创建一个class继承SQLiteOpenHelper。
Android为了让我们更方便的管理数据库,专门给提供了一个QLiteOpenHelper帮助类。它是一个抽象类有两个抽象方法,具体如下:
package com.example.mysqlitedemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class Mydbsqlite extends SQLiteOpenHelper{
//创建数据库
public Mydbsqlite(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
public Mydbsqlite(Context context, String name){
this(context, name, null, 1);
//反调上面的构造器
}
//创建table表,只要有表存在的时候不会再执行这个方法
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists logtable(id integer not null primary key autoincrement,name verchar(20),password verchar(20) )");
}
//用于版本升级,需要更新版本时只需要将新的版本号数值比以前的大
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public class MainActivity extends AppCompatActivity {
private Mydbsqlite helper;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helper=new MyOpenHelper(getApplication(),TableConfig.TABLE_WORK_DAILY);
db=helper.getWritableDatabase();
}
}
}
DDMS——File Explorer——data——data——包名加类名——database
db.insert(table, nullColumnHack, values)
table:表名
nullColumnHack:代表强行插入null值得数据列的列名。当values参数为null或不包含KEY—values对时该参数有效。
values:ContentValues值(类似于MAP),这里需要创建一个ContentValues值。通过put方法填入要出入的内容。
private void insertdb() {
ContentValues values=new ContentValues();
values.put("name", met_username.getText().toString());
values.put("password",met_password.getText().toString());
db.insert("logtable", null, values);
}
db.delete(table, whereClause, whereArgs)
whereClause:满足该whereClause子句的记录将会被删除
whereArgs:用于为whereClause子句传入参数
private void deletedb() {
db.delete("logtable", "name=?", new String[]{"zhangsan"});
Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG).show();
}
db.update(table, values, whereClause, whereArgs);
whereClause:满足该whereClause子句的记录将会被更新
whereArgs:用于为whereClause子句传入参数
private void updatedb() {
ContentValues values=new ContentValues();
values.put("password", "123455abc");
db.update("logtable", values, "name=?", new String[]{"zhangsan"});
Toast.makeText(getApplicationContext(), "修改成功", Toast.LENGTH_LONG).show();
}
方式一
db.rawQuery(sql, selectionArgs)
方式二:
db.query(distinct,table, columns, selection, selectionArgs, groupBy, having, orderBy)
columns:要查询出来的列名
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:用于控制分组
having:用于对分组进行过滤
orderBy:排序方式(ASC升序 DESC 降序)
limit:用于进行分页
private void selectdb() {
Cursor cursor=db.query("logtable", null, null, null, null, null, "id DESC limit 2 offset 3");
//offset抛弃最后两条,显示这两条上面那三条,offset主要用于分页显示的时候
//orderBy id DESC 按照id列进行降序排列
//db.rawQuery("select *from logtable", null);
cursor.moveToFirst();
while(!cursor.isAfterLast()){
String name=cursor.getString(cursor.getColumnIndex("name"));
String password=cursor.getString(cursor.getColumnIndex("password"));
Log.d("用户名", name);
Log.d("密码", password);
cursor.moveToNext();
}
}
注:
Cursor cursor=db.query("logtable", null, null, null, null, null, "id DESC ","2,3");
//2:偏移量
//3:显示数量