使用dos查看数据库:
1)创建数据库:
//创建一个类继承SQLiteOpenHelper
public class MyOpenHelper extends SQLiteOpenHelper {
//父类中没有空参的构造方法 必须重写 第一个参数上下文 第二个数据库名 第三个默认用null就可以 第四个为数据库版本 必须大于一
public MyOpenHelper(Context context) {
super(context,"tlb.db", null,1);
}
//实例化 继承了SQLiteOpenHelper的MyOpenHelper
MyOpenHelper myOpenHelper=new MyOpenHelper(getApplicationContext());//getApplicationContext()快速拿到上下文
//获取数据库 创建或者打开数据库 第一次是创建
SQLiteDatabase sqLiteDatabase1=myOpenHelper.getWritableDatabase();
// 获取数据库 创建或者打开数据库 第一次是创建 和getWritableDatabase()的区别为磁盘满时返回的数据库为只读
SQLiteDatabase sqLiteDatabase=myOpenHelper.getReadableDatabase();
2)类创建时继承SQLiteOpenHelper类的onCreate(SQLiteDatabase db)方法和onUpgrade(SQLiteDatabase db, int i, int i1)方法
//第一次创建数据库时调用此方法 因此适合做数据表结构的初始化
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//.execSQL() 执行sql语句()内些sql语句
sqLiteDatabase.execSQL("create table info(_id integer primary key autoincrement,name varchar(20))");
}
//数据库升级调用此方法 适合做表结构的更新
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("alter table info add phone varchar(20)");
}
2)用代谷歌api和码执行sql语句的增删查改
//增
public void click1(View v){
//获取数据库
SQLiteDatabase sqLiteDatabase=myOpenHelper.getWritableDatabase();
//执行增加的sql语句
//sqLiteDatabase.execSQL("insert into info (name,phone) values(?,?)",new Object[]{"张三","137777"});
/*
*第一个参数table 为表名 第二个写null 第三个参数为 ContentValues内部封装了一个Map key为对应列的名字values为对应值
* */
//使用谷歌api
ContentValues contentValues=new ContentValues();
contentValues.put("name","张三");
contentValues.put("phone","110");
//返回值为新行的id
Long l=sqLiteDatabase.insert("info",null,contentValues);
if (l>0){
Toast.makeText(getApplicationContext(),"添加成功",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),"添加失败",Toast.LENGTH_LONG).show();
}
sqLiteDatabase.close();
}
//删
public void click2(View v){
//获取数据库
SQLiteDatabase sqLiteDatabase=myOpenHelper.getWritableDatabase();
//执行删除的sql语句
//sqLiteDatabase.execSQL("delete from info where name='张三'");
//使用谷歌api
//第一个参数 table 表名 第二个whereClause 为条件相当于where 第三个为条件的值
int del=sqLiteDatabase.delete("info","name=?",new String[]{"张三"});
Toast.makeText(getApplicationContext(),"删除了"+del+"行",Toast.LENGTH_LONG).show();
sqLiteDatabase.close();
}
//查
public void click3(View v){
//获取数据库
SQLiteDatabase sqLiteDatabase=myOpenHelper.getWritableDatabase();
//执行查找的sql语句 返回值为结果集 不需要占位 写null
//Cursor cursor=sqLiteDatabase.rawQuery("select * from info",null);
/*
* 第一个表名 第二个columns为要查询的列要查询所有可以填null相当于*
* 第三个selection查询条件 相当于where 第四个selectionAgs为条件的值
* 第四个是否分组 第五个过滤条件 第六个排序方式
* */
//使用谷歌api
Cursor cursor=sqLiteDatabase.query("info",new String[]{"phone"},"name=?",new String[]{"张三"},null,null,null);
if (cursor!=null && cursor.getCount()>0){
while (cursor.moveToNext()){
//参数为 列的索引 从零开始
//String name=cursor.getString(1);
String phone=cursor.getString(0);
System.out.println("phone"+phone);
}
}
sqLiteDatabase.close();
}
//改
public void click4(View v){
//获取数据库
SQLiteDatabase sqLiteDatabase=myOpenHelper.getWritableDatabase();
//执行修改的sql语句
//sqLiteDatabase.execSQL("update info set phone='1355555' where name='张三'");
ContentValues contentValues=new ContentValues();
contentValues.put("phone","155");
//第一个表名 第二个ContentValues内部封装了一个Map key为对应列的名字values为对应值 输入要修改的列和数据
//第三个条件 第四个条件的值
//使用谷歌api
int update=sqLiteDatabase.update("info",contentValues,"name=?",new String[]{"张三"});
Toast.makeText(getApplicationContext(),"更新了"+update+"行",Toast.LENGTH_LONG).show();
sqLiteDatabase.close();
}
3)数据库的事务 实务失败自动回滚