【Android】程序创建SQLite数据库

正文索引 [隐藏]

Android因为内嵌了SQLite数据库,所有使用起来还是比较简单的,Android为了方便我们使用,有一个SQLiteOpenHelper的抽象类,其中有非常重要的两个方法getReadableDatabase()和getWriteableDatabase()。这两个方法都是打开或者创建(如果没有就创建,如果有就直接打开)的方法,并返回一个可对数据库进行读写的对象。
不同的是,当数据库不可写入时(例如磁盘爆满时),getReadableDatabase()方法返回对象以只读方式打开数据库,而getWriteableDatabase()则会出现异常。

新建一个类继承SQLiteOpenHelper

具体方法如下:

class MyDatabasesHelper extends SQLiteOpenHelper{
MyDatabasesHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version); //依次为上下文,数据库名字,构造自定义的Cursor子类对象,版本号
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table book(id integer primary key autoincrement,author varchar(20),price double,pages int,name varchar(20))"); //可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句,rawQuery方法用于执行select语句
Log.i("create", "book表创建成功!");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//当数据库版本有更新时会调用这个方法,我们一般会在这执行数据库更新的操作,例如字段更新、表的增加与删除等
Log.i("update", "这里是升级");
}
}

注释我已经写的比较清楚了。

使用MyDatabasesHelper的对象

然后到第二步,然后我们回到xml界面,我们依旧从简出发,就写五个按钮吧。
FiveButton

public class MainActivity extends AppCompatActivity {
private SQLiteDatabase db;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyDatabasesHelper myHelper = new MyDatabasesHelper(this,"BookStore.db",null,1);
this.db = myHelper.getWritableDatabase();
//创建表,其实这段不用也是OK的
Button createTable = (Button)findViewById(R.id.create_database);
createTable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("create", "数据表创建成功");
}
});
//添加数据
Button addDate = (Button)findViewById(R.id.addDate);
addDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.this.db.execSQL("insert into book values(null,'姚姚',666,666,'论姚姚是怎么变傻冒的')");
//传统做法
ContentValues values = new ContentValues();
values.put("name","二货");
values.put("author","傻冒");
values.put("pages",6666);
values.put("price",444);
db.insert("book",null,values);
Toast.makeText(MainActivity.this,"添加数据成功",Toast.LENGTH_LONG).show();
}
});
//删除数据
Button deleteDate = (Button)findViewById(R.id.deleteDate);
deleteDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
db.execSQL("delete from book where pages > 5000");
Toast.makeText(MainActivity.this,"删除数据成功",Toast.LENGTH_LONG).show();
}
});
//更新数据
Button upDate = (Button)findViewById(R.id.upDate);
upDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
db.execSQL("update book set name='二货二货二货' where author='傻冒'");
Toast.makeText(MainActivity.this,"更新数据成功",Toast.LENGTH_LONG).show();
}
});
//查询数据
Button query = (Button)findViewById(R.id.query);
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Cursor cursor = db.query("book",null,null,null,null,null,null); 传统用法
Cursor cursor = db.rawQuery("select * from book",null);
if(cursor.moveToFirst()){
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
Log.d("look", "book name+"+name);
Log.d("look", "book author"+author);
Log.d("look", "book pages"+pages);
Log.d("look", "book price"+price);
}while(cursor.moveToNext());
}
cursor.close();
}
});
}
@Override
protected void onDestroy() {
db.close(); //关闭数据库
super.onDestroy();
}
}

怎么查看呢,在真机中,现在都0202年了,起码Android10以上了吧,Android自从7以后就不支持Android Studio里面的adb shell使用超级管理员权限打开包了,所有我们把数据库从真机放的本地上面,需要cmd到数据库的目录下面,使用下面这个指令
sqlite3 BookStore.db

1
然后就可以看到表了,简单吧,一个生态的总归不算太复杂。

blank