第一步
定义类继承SQLiteOpenHelper 重写几个方法
public class SQLiteTool extends SQLiteOpenHelper{
/**
* 自己写个构造方法 创建这个类是只要使用自己的即可
* @param context
*/
public SQLiteTool(Context context){
super(context,Constant.DATABASE_NAME,null,Constant.DATABASE_VERSION);
}
/**
*
* @param context 上下文对象
* @param name 数据库名称
* @param factory 工厂 null
* @param version 当前版本 要求大于等于1
*/
public SQLiteTool(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 当数据库创建回调的函数
* @param db 数据库对象
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.i("zy","crete");
String sql="create table "+Constant.TABLE_NAME+"("+Constant._ID+" Integer primary key,"+Constant.NAME+" varchar(10),"+Constant.AGE+" Integer)";
db.execSQL(sql);//执行语句
}
/**
* 更新
* @param db 数据库对象
* @param oldVersion 旧版本
* @param newVersion 新版本
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
/**
* 数据库打开回调
*
* @param db
*/
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
Log.i("zy","open");
}
第二步
自定义一个关于数据库字段的常量类
/**
* 数据库常量
*/
public class Constant {
public static final String DATABASE_NAME="info.db";//数据库名称
public static final int DATABASE_VERSION=1;//数据库版本
public static final String TABLE_NAME="person";//表名
public static final String _ID="_id";
public static final String NAME="name";
public static final String AGE="age";
}
第三步
定义一个数据库工具类 使用单例模式 自定义两个方法
public class DbManager {
private static SQLiteTool helper;
/**
* 建立数据表
* @param context
* @return
*/
public static SQLiteTool getIntance(Context context){
if (helper==null){
helper=new SQLiteTool(context);//获取对象
}
return helper;
}
/**
* 执行数据
* @param db SQLiteDatabase db=helper.getWritableDatabase() 是否为空
* @param sql 数据库语句
*/
public static void execSql(SQLiteDatabase db,String sql){
if (db!=null){
if (sql!=null &&!"".equals(sql)){
db.execSQL(sql);
}
}
}
}
第四步 — 使用两种方式操作数据库
布局 写数据库代码
exxcSQL(SQL) 操作数据库
/**
* 使用 exxcSQL(SQL) 操作数据库
* @param view
*/
public void click(View view){
switch (view.getId()){
case R.id.insert:
/**
*创建数据或打开数据库 已创建会直接打开
*/
SQLiteDatabase db=helper.getWritableDatabase();
String sql="insert into "+Constant.TABLE_NAME+" values(1,'张三',20)";
DbManager.execSql(db,sql);
String sql2="insert into "+Constant.TABLE_NAME+" values(2,'李四',25)";
DbManager.execSql(db,sql2);
break;
case R.id.update:
db=helper.getWritableDatabase();
String updateSql="update"+Constant.TABLE_NAME+" set "+Constant.NAME+"='小明' where"+Constant._ID+"=1";
DbManager.execSql(db,updateSql);
db.close();
break;
case R.id.delete:
db=helper.getWritableDatabase();
String delsql="delete from "+Constant.TABLE_NAME+" where "+Constant._ID+"=2";
DbManager.execSql(db,delsql);
db.close();
break;
}
}
方法二 - - - - - 使用api进行sqlite数据库操作
/**
* 使用api进行sqlite数据库操作 江布局按钮onClick设置 onclick
* @param view
*/
public void onclick(View view){
switch (view.getId()){
case R.id.apiInsertdate:
SQLiteDatabase db=helper.getWritableDatabase();
/**
* insert(String table, String nullColumnHack, ContentValues values)
* String table 表名
* String nullColumnHack 为空nul
* ContentValues values HashMap的集合
* 返回值 long 表示插入数据的列表
*/
ContentValues contentValues=new ContentValues();
//put 参数 参数名 数据
contentValues.put(Constant._ID,3);
contentValues.put(Constant.NAME,"王五");
contentValues.put(Constant.AGE,30);
long result=db.insert(Constant.TABLE_NAME,null,contentValues);
if (result>0){
Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_SHORT).show();
}
db.close();
break;
case R.id.apiUpdate:
db=helper.getWritableDatabase();
/**
* String table, ContentValues values, String whereClause, String[] whereArgs
* table 表名
*
* values hashmap
*
* whereClause 修改条件
*
* whereArgs 表示条件的占位符
*
* return int 判断修改条数
*/
ContentValues values=new ContentValues();
/**
* 修改的字段 修改值
*/
values.put(Constant.NAME,"王八");
/**
* 第一种是将要改的字段直接赋值
*/
// int count=db.update(Constant.TABLE_NAME,values,Constant._ID+"=3",null);
/**
* 第二种是先给字段占位,然后在 whereArgs中传入要修的值
*/
int count=db.update(Constant.TABLE_NAME,values,Constant._ID+"=?",new String[]{"3"});//修改 id 为 3的值
if (count>0){
Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_SHORT).show();
}
db.close();
break;
case R.id.apidelete:
db=helper.getWritableDatabase();
/**
* String table, String whereClause, String[] whereArgs
*
* table 表名
*
* whereClause 删除条件
*
*
* whereArgs 占位符
*/
int count2=db.delete(Constant.TABLE_NAME,Constant._ID+"=?",new String[]{"3"});
if (count2>0){
Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(MainActivity.this, "删除失败", Toast.LENGTH_SHORT).show();
}
db.close();
break;
}
}