安卓
SQLite入门
轻量级的、0配置的、适用于嵌入式设备的数据库。
遵循SQL语句。
App内部的数据库文件位于:/data/data/程序包名/databases/*.db
Demo演示:
//MyHelper.java
//继承数据库助手类
public class MyHelper extends SQLiteOpenHelper {
private static final String TAG = "MyHelper";
/**
*
* @param context 上下文,看到这个在外部调用的时候就传入 当前类名.this
* @param name 数据库的名字
* @param version 数据的版本(必须是正整数,且新版本要大于老版本)
*/
public MyHelper(Context context, String name, int version) {
super(context, name, null, version);
Log.d(TAG, "MyHelper->Constructor");
}
/**
* 数据库创建的回调
*
* @param db 新创建的数据库对象
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate");
// 创建一张表
db.execSQL("CREATE TABLE student(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL)");
}
/**
* 数据库升级的回调
*
* @param db 升级的数据库对象
* @param oldVersion 数据库的老版本
* @param newVersion 数据库的新版本
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(TAG, "onUpgrade:" + oldVersion + "->" + newVersion);
}
}
增删改查:
public class MainActivity extends Activity implements OnClickListener {
private Button mBtnCreate, mBtnVersion, mBtnInsert, mBtnDelete, mBtnUpdate, mBtnSelect;
// 自定义数据库助手类对象
private MyHelper mHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtnCreate = (Button) findViewById(R.id.btn_create_table);
mBtnVersion = (Button) findViewById(R.id.btn_version);
mBtnInsert = (Button) findViewById(R.id.btn_insert);
mBtnDelete = (Button) findViewById(R.id.btn_delete);
mBtnUpdate = (Button) findViewById(R.id.btn_update);
mBtnSelect = (Button) findViewById(R.id.btn_select);
mBtnCreate.setOnClickListener(this);
mBtnVersion.setOnClickListener(this);
mBtnInsert.setOnClickListener(this);
mBtnDelete.setOnClickListener(this);
mBtnUpdate.setOnClickListener(this);
mBtnSelect.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_create_table:
createDatabase();
break;
case R.id.btn_version:
upgradeVersion(4);
break;
case R.id.btn_insert:
insertData();
break;
case R.id.btn_delete:
deleteData();
break;
case R.id.btn_update:
updateData();
break;
case R.id.btn_select:
selectData();
break;
}
}
/**
* 创建数据库和表
*/
private void createDatabase() {
// SQLite数据库会生成一个数据库文件,扩展名是.db或.db3
mHelper = new MyHelper(MainActivity.this, "school_info.db", 1);
// 目的只是为了创建出数据库文件和表,所以获得一个只读的数据库对象后立刻关闭
mHelper.getReadableDatabase().close();
// 展示消息
showToast("数据库创建成功!");
}
private void upgradeVersion(int version) {
// SQLite数据库会生成一个数据库文件,扩展名是.db或.db3
mHelper = new MyHelper(MainActivity.this, "school_info.db", version);
// 目的只是为了创建出数据库文件和表,所以获得一个只读的数据库对象后立刻关闭
mHelper.getReadableDatabase().close();
// 展示消息
showToast("数据库已经执行升级操作!");
}
private void insertData() {
mHelper = new MyHelper(MainActivity.this, "school_info.db", 4);
//获得一个可写的数据库对象
SQLiteDatabase db = mHelper.getWritableDatabase();
//准备一个要插入的数据对象
ContentValues cv = new ContentValues();
//添加要插入的数据(如果有多列就多次添加)
//参数一:列名;参数二:数值
cv.put("name", "Tom");
//参数一:要插入的表名
//参数三:要插入的数据
db.insert("student", null, cv);
//关闭数据库
db.close();
// 展示消息
showToast("已执行插入操作!");
}
private void deleteData() {
mHelper = new MyHelper(MainActivity.this, "school_info.db", 4);
//获得一个可写的数据库对象
SQLiteDatabase db = mHelper.getWritableDatabase();
//删除数据
//参数一:要从哪个表中删除
//参数二:Where子句,即删除的条件
//参数三:如果参数二中有?,那么替换的值
db.delete("student", "id=1", null);
//关闭数据库
db.close();
// 展示消息
showToast("已执行删除操作!");
}
private void updateData() {
mHelper = new MyHelper(MainActivity.this, "school_info.db", 4);
//获得一个可写的数据库对象
SQLiteDatabase db = mHelper.getWritableDatabase();
//准备一个要更新的数据对象
ContentValues cv = new ContentValues();
//添加要插入的数据(如果有多列就多次添加)
//参数一:列名;参数二:数值
cv.put("name", "Petter");
//更新数据
//参数一:要更新的表名
//参数二:要更新的值
//参数三:Where子句,即更新的条件
//参数四:如果参数三中有?,那么替换的值
db.update("student", cv, "id=?", new String[] {"2"});
//关闭数据库
db.close();
// 展示消息
showToast("已执行更新操作!");
}
private void selectData() {
mHelper = new MyHelper(MainActivity.this, "school_info.db", 4);
//获得可读的数据库对象
SQLiteDatabase db = mHelper.getReadableDatabase();
//调用查询的方法
//参数一:要查询的表,相当于FROM子句
//参数二:要查询的列,相当于SELECT子句
//参数三:查询的条件,相当于WHERE子句
//参数四:如果参数三种有?,表示参数三中的?数据
//参数五:相当于GROUP BY子句
//参数六:相当于HAVING子句
//参数七:相当于ORDER BY子句
Cursor cursor = db.query("student", new String[] {"id","name"}, "id>=4", null, null, null, null);
//循环取出所有数据
while(cursor.moveToNext() != false) {
//先把列名转换为列序号
int indexId = cursor.getColumnIndex("id");
int indexName = cursor.getColumnIndex("name");
//通过序号获得值
int id = cursor.getInt(indexId);
String name = cursor.getString(indexName);
Log.d("MainActivity", id+"-"+name);
}
//关闭游标
cursor.close();
//关闭数据库
db.close();
// 展示消息
showToast("已执行查询操作!结果请看Log");
}
/**
* 弹个Toast,为了方便后续调用
*
* @param message Toast展示出的消息
*/
private void showToast(String message) {
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
}
}