1.数据库的管理类
package com.biyu6.creatdb;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyOpenHelper extends SQLiteOpenHelper {
/**
* context:上下文
* name:数据库名字
* factory:目的是创建游标(游动光标)对象,默认用null
* version:数据库版本,从1开始递增,不能减
* */
public MyOpenHelper(Context context) {
super(context, "i01.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {//数据库第一次创建的时候调用
/**适合初始化表结构,用sql语句创建表
* 示例:创建一个两列的表,第一列为id,第二列为name
* id 一般以下划线开头“_id”
* interger 是数据类型
* primary key 指定id为主键
* autoincrement 自增长
* varchar(20) name不超过20个字符
* 注意:sqlite底层都将类型转化为string类型,但为了严谨,这里还是指定类型
*/
// db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20))");
//初始化一个三列的表
db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//当数据库版本升级时调用
/**适合更新表结构
* 示例:给表增加一列phone
* varchar(20) phone 不超过20个字符
* */
db.execSQL("alter table info add phone varchar(20)");
System.out.println("新版本数据库:"+newVersion+"旧版本:"+oldVersion);
}
}
2.增删改查操作
public class MainActivity extends Activity {
private MyOpenHelper myOpenHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myOpenHelper = new MyOpenHelper(getApplicationContext());
// //打开一个数据库(如果不存在就创建)
// SQLiteDatabase writableDatabase = myOpenHelper.getWritableDatabase();
// //打开一个数据库(如果不存在就创建),跟上面的区别是,如果磁盘满了,返回一个只读的数据库
//// SQLiteDatabase readableDatabase = myOpenHelper.getReadableDatabase();
//
}
public void click1(View v) {//点击按钮增加一条记录
//获取数据库对象
SQLiteDatabase db = myOpenHelper.getWritableDatabase();
//要增加的列及其对应的值
ContentValues values = new ContentValues();
values.put("name", "李思思");
values.put("phone", "13811112222");
/**执行增加一条的sql语句
* table 表名
* values 是一个map(key为列的名字,value是这一列的值)
* 返回值为 插入新行的id
* */
long insert = db.insert("info", null, values);
if (insert > 0) {
Toast.makeText(getApplicationContext(), "添加成功",1).show();
}else {
Toast.makeText(getApplicationContext(), "添加失败",1).show();
}
//数据库用完需要关闭
db.close();
}
public void click2(View v) {//删除一条记录
//获取数据库对象
SQLiteDatabase db = myOpenHelper.getWritableDatabase();
/**执行删除一条的sql语句
* whereClause 删除的条件
* whereArgs 删除的数据值
* 返回值 表示删除的行数
* */
int delete = db.delete("info", "name=?", new String[]{"李思思"});
Toast.makeText(getApplicationContext(), "删除了"+delete+"行",1).show();
//数据库用完需要关闭
db.close();
}
public void click3(View v) {//修改一条记录
//获取数据库对象
SQLiteDatabase db = myOpenHelper.getWritableDatabase();
//要更新的列及其对应的值
ContentValues values = new ContentValues();
values.put("phone", "15566668888");
/**执行修改一条的sql语句
* 返回值代表更新的行数
* */
int update = db.update("info", values, "name=?", new String[]{"李思思"});
Toast.makeText(getApplicationContext(), "更新了"+update+"行",1).show();
//数据库用完需要关闭
db.close();
}
public void click4(View v) {//查询一条记录
//获取数据库对象
SQLiteDatabase db = myOpenHelper.getWritableDatabase();
/**执行查询一条的sql语句
* columns 要查询的列 查询所有的列就写null,数组中填你查的列名
* selection 查询的条件
* selectionArgs 要查询的条件的值
* groupBy 是否分组 null不分组
* having 过滤条件
* orderBy 是否排序 null不排序
*
* 返回结果集
* */
Cursor cursor = db.query("info", new String[]{"phone"}, "name=?", new String[]{"李思思"}, null, null, null);
if (cursor!=null && cursor.getCount()>0) {//查询结果不为空,且个数大于0
while (cursor.moveToNext()) {//循环,每次都取下一个,取不到则结束
//取值,参数为列的索引,如果只查phone这一列,那么phone的索引就是0
String phone = cursor.getString(0);
System.out.println("phone:"+phone);
}
}
//数据库用完需要关闭
db.close();
}
}