Android之SQLite数据库使用
SQLite介绍
SQLite是一款轻量级的数据库;SQLite支持标准的SQL语法遵循数据库的ACID事务;它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,只需要几百K的内存。SQLite不需要安装,不需要用户名密码就可以使用。
SQLite使用
- 创建数据库和数据表
- 添加数据
- 查询数据
- 修改数据
- 删除数据
创建数据库和数据表步骤
- 新建类继承SQLiteOpenHelper(抽象类,子类需要重写onCreate 和 onUpgrade方法);
SQLiteOpenHelper构造方法参数
/**
* @param context 上下文环境
* @param name 数据库名字
* @param factory 数据库进行查询的时候会返回一个cursor,这个cursor就是在上面的factory中产生的。
如果有需求,可以自定义factory,这样返回的cursor就会符合自己的需求!
* @param version 数据库版本号,可用于对数据库进行升级操作
*/
- 实现构造方法;
- 重写onCreate方法;
- 重写onUpgrade方法;
- 实例化SQLiteOpenHelper的子类对象;
- 调用getReadableDatabase方法 或 getWritableDatabase方法;
SQLiteDatabase对象方法
SQLiteDatabase对象:
数据库操作对象,用来连接数据库,并可以对数据表进行增删改查。
getReadableDatabase方法:
以只读方式打开数据库,返回只读的SQLiteDatabase对象,一般在查询时使用。
SQLiteDatabase sqldb = dbhelper.getReadableDatabase();
getWritableDatabase方法:
以可读写方式打开数据库,返回可读写的SQLiteDatabase对象,一般在时使用。
SQLiteDatabase sqldb = dbhelper.getWritableDatabase();
SQL建表语句
- 空格问题,列表和列类型中间需要有空格
- 逗号问题,列与列之间应添加逗号
代码展示
DBHelper类代码
package com.example.administrator.sharedapplication;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Administrator on 2018/3/20.
*/
//创建自定义类继承SQLiteOpenHelper,实现两个方法,和一个构造方法
public class DBHelper extends SQLiteOpenHelper {
private String createSQL = "create table student("
+ "id integer primary key autoincrement not null,"
+ "name text not null,"
+ "age integer not null,"
+ "gender text not null)";
public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//重写onCreate()方法,执行建表语句
@Override
public void onCreate( SQLiteDatabase db) {
//创建数据库
db.execSQL(createSQL);
}
//重写onUpgrade()此方法在更新数据表用到
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE student ADD COLUMN other TEXT");
}
}
xml文件
<?xml version="1.0" encoding="utf-8"?>
<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"
android:orientation="vertical"
tools:context="com.example.administrator.sharedapplication.Main2Activity">
<EditText
android:id="@+id/nameEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入学生姓名"
/>
<EditText
android:id="@+id/modify_name_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入学生姓名"
/>
<Button
android:id="@+id/insertBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="插入"
/>
<Button
android:id="@+id/searchBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询"
/>
<Button
android:id="@+id/modifyBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改"
/>
<Button
android:id="@+id/deleteBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除"
/>
</LinearLayout>
Activity文件
package com.example.administrator.sharedapplication;
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;
public class Main2Activity extends AppCompatActivity implements View.OnClickListener{
private Button insertBtn;
private Button searchBtn;
private Button deleteBtn;
private Button modifyBtn;
private EditText nameEdit;
private EditText modifynameEdit;
private DBHelper dbhelper;
private SQLiteDatabase sqldb;
private static final String TABLE_NAME = "student";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
bindID();
dbhelper = new DBHelper(this, "mydb", null, 1);
}
private void bindID() {
insertBtn = (Button) findViewById(R.id.insertBtn);
searchBtn = (Button) findViewById(R.id.searchBtn);
deleteBtn = (Button) findViewById(R.id.deleteBtn);
modifyBtn = (Button) findViewById(R.id.modifyBtn);
nameEdit = (EditText) findViewById(R.id.nameEdit);
modifynameEdit = (EditText) findViewById(R.id.modify_name_et);
insertBtn.setOnClickListener(this);
searchBtn.setOnClickListener(this);
deleteBtn.setOnClickListener(this);
modifyBtn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.insertBtn:
//创建SQLiteDatabase的对象
SQLiteDatabase sqLiteDatabase=dbhelper.getWritableDatabase();
//创建ContentValues对象,又来添加数据
ContentValues values=new ContentValues();
values.put("name",nameEdit.getText().toString());
sqLiteDatabase.insert("student",null,values);
break;
case R.id.searchBtn:
SQLiteDatabase sqLiteDatabase1=dbhelper.getReadableDatabase();
//使用游标,游历表中所有数据(params1:表名,params2:指定查询的列名,param3:指定where约束条件;params4:占位符具体值;下面的参数与分组,排序有关)
Cursor cursor=sqLiteDatabase1.query("student",null,null,null,null,null,null);
cursor.moveToFirst();
do {
//取出数据
String name=cursor.getString(cursor.getColumnIndex("name"));
Log.e("NAME",name);
}while (cursor.moveToNext());
break;
case R.id.modifyBtn:
String name = nameEdit.getText().toString();
String newName = modifynameEdit.getText().toString();
SQLiteDatabase sqLiteDatabase2=dbhelper.getWritableDatabase();
ContentValues values1=new ContentValues();
values1.put("name","lu");
sqLiteDatabase2.update("student",values1,"name=? and id>?",new String[]{name,"6"});
break;
case R.id.deleteBtn:
SQLiteDatabase sqLiteDatabase3=dbhelper.getWritableDatabase();
String name1 = nameEdit.getText().toString();
sqLiteDatabase3.delete("student","name=?",new String[]{name1});
break;
}
}
}