Android SQLite详解及示例代码
什么是Android SQLite
SQLite是一个轻型的数据库库,它存储在设备的内部存储上,并提供了一些SQL接口用于读写数据。在Android开发中,SQLite是非常重要的一部分,它被广泛应用于Android应用的本地数据存储。
如何使用Android SQLite
1. 创建一个SQLite数据库
第一步是创建一个SQLite数据库。创建SQLite数据库的方法非常简单,只需继承SQLiteOpenHelper
类并实现其中的onCreate()
和onUpgrade()
方法即可。
public class MyDatabase extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "my_database.db";
private static final int DATABASE_VERSION = 1;
public MyDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS my_table (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS my_table");
onCreate(db);
}
}
在onCreate()
方法中,我们定义了一个名为my_table
的表,并定义了三个字段:_id
、name
和age
。其中_id
字段定义为自增主键,在每次插入新数据的时候会自动递增。
在onUpgrade()
方法中,我们实现了数据库的升级逻辑,当DATABASE_VERSION
升级时,会被调用这个方法,我们可以在这里删除、修改或添加表和字段,以及进行其他的操作。
2. 插入数据
第二步是插入数据。在Android SQLite中插入数据非常简单,我们可以使用SQLiteDatabase
中的insert()
方法插入数据。
SQLiteDatabase db = myDatabase.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", "John");
cv.put("age", 25);
long rowId = db.insert("my_table", null, cv);
db.close();
在这个示例中,我们创建了一个ContentValues
对象,用于存放要插入数据库的数据。然后调用insert()
方法将数据插入到my_table
表中。最后,我们需要关闭数据库连接,以避免内存泄漏。
3. 查询数据
第三步是查询数据。在Android SQLite中查询数据也非常简单,我们使用SQLiteDatabase
中的rawQuery()
方法查询数据。
SQLiteDatabase db = myDatabase.getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM my_table", null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
Log.d("MyDatabase", "id: " + id + ", name: " + name + ", age: " + age);
}
cursor.close();
db.close();
在这个示例中,我们查询了my_table
表中的所有数据,并使用Cursor
对象遍历结果集。在每次循环中,我们获取了数据集中的三个字段:_id
、name
和age
,然后打印到了日志中。
示例说明
示例一:使用SQLite数据库存储用户信息
在这个示例中,我们使用SQLite数据库存储用户信息。当用户在应用中输入用户名和密码时,将数据插入到SQLite数据库中,在用户下次登录时,从SQLite数据库中查询用户信息以验证用户身份。
public class UserDatabase extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "user_database.db";
private static final int DATABASE_VERSION = 1;
public UserDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS user_table (_id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, password TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS user_table");
onCreate(db);
}
public void addUser(String username, String password) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("username", username);
cv.put("password", password);
db.insert("user_table", null, cv);
db.close();
}
public boolean verifyUser(String username, String password) {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM user_table WHERE username=? AND password=?", new String[]{username, password});
int count = cursor.getCount();
cursor.close();
db.close();
return count > 0;
}
}
在这个示例中,我们定义了一个UserDatabase
类,用于存储用户信息。在onCreate()
方法中,我们定义了一个名为user_table
的表,并定义了三个字段:_id
、username
和password
。在addUser()
方法中,我们使用insert()
方法将用户信息插入到user_table
表中。在verifyUser()
方法中,我们使用rawQuery()
方法从user_table
表中查询用户名和密码是否匹配。如果匹配成功,则返回true
,否则返回false
。
示例二:使用SQLite数据库存储任务清单
在这个示例中,我们使用SQLite数据库存储任务清单。用户可以在应用中添加、删除和修改任务,并在应用中查看任务列表。当用户退出应用后,任务清单数据将保存在SQLite数据库中,并在下次打开应用时加载。
public class TaskDatabase extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "task_database.db";
private static final int DATABASE_VERSION = 1;
public TaskDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS task_table (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, description TEXT, date TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS task_table");
onCreate(db);
}
public void addTask(String name, String description, String date) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("description", description);
cv.put("date", date);
db.insert("task_table", null, cv);
db.close();
}
public void deleteTask(int id) {
SQLiteDatabase db = getWritableDatabase();
db.delete("task_table", "_id=?", new String[]{String.valueOf(id)});
db.close();
}
public void updateTask(int id, String name, String description, String date) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("description", description);
cv.put("date", date);
db.update("task_table", cv, "_id=?", new String[]{String.valueOf(id)});
db.close();
}
public List<Task> getAllTasks() {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM task_table", null);
List<Task> tasks = new ArrayList<>();
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String description = cursor.getString(cursor.getColumnIndex("description"));
String date = cursor.getString(cursor.getColumnIndex("date"));
Task task = new Task(id, name, description, date);
tasks.add(task);
}
cursor.close();
db.close();
return tasks;
}
}
在这个示例中,我们定义了一个TaskDatabase
类,用于存储任务清单信息。在onCreate()
方法中,我们定义了一个名为task_table
的表,并定义了四个字段:_id
、name
、description
和date
。在addTask()
方法中,我们使用insert()
方法将任务信息插入到task_table
表中。在deleteTask()
方法中,我们使用delete()
方法删除任务清单中的某一条任务。在updateTask()
方法中,我们使用update()
方法修改任务清单中的某一条任务。在getAllTasks()
方法中,我们使用rawQuery()
方法查询task_table
表中的所有任务,并返回一个任务列表。在任务列表中,每个任务包括id
、name
、description
和date
四个字段。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android SQLite详解及示例代码 - Python技术站