android数据库的创建
/**
* 数据库的工具类
* 一般:用单例模式
* 把构造方法私有化 ,对外要提供一个方法 获取其他实例
* @author apple
*
*/
public class MySqliteOpenHelper extends SQLiteOpenHelper {
private static SQLiteOpenHelper mInstance;
/**
*
* @param context 上下文 打开或者创建数据库
* @param name 数据库的名字 要以.db结尾
* @param factory 游标工厂:创建游标对象
* @param version 数据库的版本号 如果版本号不同 执行onUpgrade()方法:数据库的升级
*/
private MySqliteOpenHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
//对外提供的方法
public static synchronized SQLiteOpenHelper getInstance(Context context){
if(mInstance == null){
mInstance = new MySqliteOpenHelper(context, "wuhan06.db", null, 1);
}
return mInstance;
}
/**
* 创建数据库里面的表 或者对表里面的数据执行初始化
* 创建一张表:person 字段:id(不标准) 最好是使用_id 唯一标示 主键 自增
* name
*/
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table person(_id integer primary key autoincrement,name text)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
创建表的语句
CREATE TABLE person (_id integer primary key autoincrement, name varchar(20))
package com.chengzis.day2_datastorage;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
/**
* SqlitDatebase的工具类 单利模式:1.构造方法私有化,对外提供一个方法获取实例
* 作用:打开或者创建数据库 管理数据库的版本
*/
public class MySqliteOpenHelper extends SQLiteOpenHelper {
private static SQLiteOpenHelper mInstance;
public static synchronized SQLiteOpenHelper getmInstace(Context context) {
if (mInstance == null) {
mInstance = new MySqliteOpenHelper(context, "itcast.db", null, 1);
}
return mInstance;
}
private MySqliteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//首次创建数据库时候创建,表的创建和表的初始化
@Override
public void onCreate(SQLiteDatabase db) {
//创建表:persons表 _id 主键 name
String sql = "create table persons(_id integer primary key autoincrement ,name text)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
利用sql语句对数据库增删改查
SQLite可以解析大部分标准SQL语句,如:
查询语句:select * from表名where条件子句group by分组字句having ... order by排序子句
如:select * from person
select * from person order by id desc
select name from person group by name having count(*)>1
分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录
select * from Account limit 5 offset 3或者select * from Account limit 3,5
插入语句:insert into表名(字段列表) values(值列表)。如:insert into person(name, age) values(‘传智’,3)
更新语句:update表名set字段名=值where条件子句。如:update person set name=‘传智‘where_id=10
删除语句:delete from表名where条件子句。如:delete from person where_id=10
package com.chengzis.day2_datastorage;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class SQliterActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "SQliterActivity";
private SQLiteOpenHelper helper;
private Button bt_inset;
private Button bt_delete;
private Button bt_update;
private Button bt_query;
private Button bt_sq;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sqliter);
bt_sq = findViewById(R.id.bt_sq);
bt_sq.setOnClickListener(this);
bt_query = findViewById(R.id.bt_query);
bt_query.setOnClickListener(this);
bt_update = findViewById(R.id.bt_update);
bt_update.setOnClickListener(this);
bt_delete = findViewById(R.id.bt_delete);
bt_delete.setOnClickListener(this);
bt_inset = findViewById(R.id.bt_inset);
bt_inset.setOnClickListener(this);
//获取数据库的帮助类
helper = MySqliteOpenHelper.getmInstace(this);
helper.getReadableDatabase(); //问SQLiteOpenHelper要数据库 判断:数据库是否存在,如果存在就打开,否则就创建
// //初始化的数据
// helper.getWritableDatabase().execSQL("insert into persons(name) values('图图')");
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_inset:
//获取可写的数据库
SQLiteDatabase db = helper.getWritableDatabase();
//判断数据是否打开
if (db.isOpen()) {
//执行数据库
db.execSQL("insert into persons(name) values('小王')");
//关闭数据库
db.close();
}
break;
case R.id.bt_query:
SQLiteDatabase db2 = helper.getReadableDatabase();
if (db2.isOpen()) {
//查询获取游标
Cursor cursor = db2.rawQuery("select*from persons", null);
while (cursor.moveToNext()) {
//获取数据
//cursor.getColumnIndex("_id") 获取id在cursor 里面的下标
@SuppressLint("Range") int _id = cursor.getInt(cursor.getColumnIndex("_id"));
@SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex("name"));
Log.i(TAG, "_id" + _id + "name" + name);
}
cursor.close(); //关闭游标
db2.close();
}
break;
case R.id.bt_update:
//获取可写的数据库
SQLiteDatabase db3 = helper.getWritableDatabase();
//判断数据是否打开
if (db3.isOpen()) {
//执行数据库
db3.execSQL("update persons set name = ? where _id = ?",new Object[]{"小红",1});
//关闭数据库
db3.close();
}
break;
case R.id.bt_delete:
//获取可写的数据库
SQLiteDatabase db4= helper.getWritableDatabase();
//判断数据是否打开
if (db4.isOpen()) {
//执行数据库
db4.execSQL("delete from persons where _id =?" ,new Object[]{1});
//关闭数据库
db4.close();
}
break;
}
}
}