SQLite数据库
创建数据库
MyOpenHelper.java这个类必须继承SQLiteOpenHelper这个类
1
2
3public class MyopenHelper extends SQLiteOpenHelper {
}添加三个为实现的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public MyopenHelper(Context context) {
// (上下文,数据库的名字(null表示在内存中创建存储),游标工厂(系统默认传null),数据库版本号)
super(context,"SQLite", null, 1);
}
public void onCreate(SQLiteDatabase db) {
//当数据库第一次被创建的时候会调用这个方法
//用于表结构的创建和数据的初始化操作,甚至操作SOLite数据库
//SQLite都是数据库,都是String类型的
db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(20))");
System.out.println("SQLite被调用!");
}在MainActivity中去创建MyopenHelper类对象,去调用getReadableDatabase();
1
2
3
4
5
6
7
8
9
10
11
12
13public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyopenHelper myopenHelper = new MyopenHelper(this);
// 创建或打开一个数据库,获得的都是可读可写的数据库
// 返回的是一个SQLLIteDatabase
// getReadableDatabase()在磁盘满返回一个只读数据库
SQLiteDatabase database =myopenHelper.getReadableDatabase();
}
}数据库升级
数据库升降级其实就是表结构的变化
当数据升级的时候MyopenHelper中的onUpgrade()会被调用,也就是当数据库的版本号发生变化的时候。
作用:
- 表结构的修改(增加字段)
- 添加新的表格
参数: - db:通过它我们就能去执行SQL语句
- oldVersion:旧的版本号
- newVersion:新的版本号
1
2
3
4
5
6
7
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//添加新的字段
db.execSQL("alter table info add age integer");
}
- 数据库降级
当数据库降级的时候会走一个叫onDowngrade这个方法1
2
3
4
5
6
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 数据库降级
// 默认是不允许降级的,如果需要需要重写这个onDowngrade
super.onDowngrade(db, oldVersion, newVersion);
}执行SQL语句操作数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32//查询
public void query(View view) {
SQLiteDatabase database = myopenHelper.getReadableDatabase();
String sql ="select * from info ";
database.rawQuery(sql,null);
}
//插入
public void insert(View view) {
//执行SQL语句要先获得SQLitedatabase对象
SQLiteDatabase database = myopenHelper.getReadableDatabase();
String sql = "insert into info(name,phone,age) values('张三','1327038647','19')";
database.execSQL(sql);
String sql1 = "insert into info(name,phone,age) values('李四','19278086754','20')";
database.execSQL(sql1);
database.close();
}
//删除
public void delete(View view) {
SQLiteDatabase database = myopenHelper.getReadableDatabase();
// 删除语句
String sql = "delete from info where name = '李四'";
database.execSQL(sql);
database.close();
}
//更新
public void update(View view) {
SQLiteDatabase database = myopenHelper.getReadableDatabase();
// 更新语句
String sql = "update info set phone='139999999'where name='王五';";
database.execSQL(sql);
database.close();
}用谷歌封装APL的方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52// 查询
public void insert1(View view) {
// String sql = "insert into info(name,phone,age) values('张三','1327038647','19')";
SQLiteDatabase database = myopenHelper.getReadableDatabase();
String nullConlumnHack="name";
ContentValues values = new ContentValues();
// values.put("列名","添加的内容")
values.put("name","赵四");
values.put("phone","1782002324");
values.put("age",25);
long id = database.insert("info",nullConlumnHack,values);
if (id != -1){
Toast.makeText(this,"当前插入到"+id+"行",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(this,"插入失败!",Toast.LENGTH_LONG).show();
}
database.close();
}
// 插入
public void delete1(View view) {
SQLiteDatabase database = myopenHelper.getReadableDatabase();
// 表名
String table = "info";
// where的条件 注意:不能包含where关键字,=后面的条件用?代替,在这里传1代表删除所有
String whereClause = "name = ?";
// 具体满足条件的值来替换"?"
String[] whereArgs = {"李四"};
int id = database.delete(table,whereClause,whereArgs);
if (id !=-1){
Toast.makeText(this,"第"+id+"删除成功!",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(this,"删除失败!",Toast.LENGTH_LONG).show();
}
}
// 删除
public void update1(View view) {
SQLiteDatabase database =myopenHelper.getReadableDatabase();
ContentValues values = new ContentValues();
values.put("phone",110);
// 返回值是究竟更新了几行
int update = database.update("info", values, "name = ?", new String[]{"张三"});
database.close();
}
// 更新
public void query1(View view) {
SQLiteDatabase database =myopenHelper.getReadableDatabase();
Cursor info = database.query("info", new String[]{"name", "phone"}, "name = ?", null, null, null, null);
}两种方法的区别:
方法 有没有返回值 操作大量数据的效率 SQL是否灵活 SQL写错率 execsql,rawqurey 只有查询有 效率高 任意写 概率高 封装好的api 全都有 效率低 提供出来API 概率低