以下是一个基于Android SQLite数据库的封装示例:
1. 创建DatabaseHelper类
```java
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 创建表格
String createTable = "CREATE TABLE IF NOT EXISTS mytable" +
" (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)";
db.execSQL(createTable);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 升级数据库
db.execSQL("DROP TABLE IF EXISTS mytable");
onCreate(db);
}
}
```
2. 创建DatabaseManager类
```java
public class DatabaseManager {
private static DatabaseManager instance;
private SQLiteDatabase database;
private DatabaseHelper dbHelper;
public static synchronized void initialize(Context context) {
if (instance == null) {
instance = new DatabaseManager();
instance.dbHelper = new DatabaseHelper(context);
}
}
public static synchronized DatabaseManager getInstance() {
if (instance == null) {
throw new IllegalStateException(DatabaseManager.class.getSimpleName() +
" is not initialized, call initialize(..) method first.");
}
return instance;
}
public synchronized SQLiteDatabase openDatabase() {
if (database == null) {
database = dbHelper.getWritableDatabase();
}
return database;
}
public synchronized void closeDatabase() {
if (database != null) {
database.close();
database = null;
}
}
}
```
3. 创建实体类
```java
public class MyEntity {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
```
4. 创建DAO类
```java
public class MyEntityDao {
private SQLiteDatabase database;
public void open() {
database = DatabaseManager.getInstance().openDatabase();
}
public void close() {
DatabaseManager.getInstance().closeDatabase();
}
public void insert(MyEntity entity) {
ContentValues values = new ContentValues();
values.put("name", entity.getName());
values.put("age", entity.getAge());
database.insert("mytable", null, values);
}
public void update(MyEntity entity) {
ContentValues values = new ContentValues();
values.put("name", entity.getName());
values.put("age", entity.getAge());
database.update("mytable", values, "id=?", new String[]{String.valueOf(entity.getId())});
}
public void delete(int id) {
database.delete("mytable", "id=?", new String[]{String.valueOf(id)});
}
public MyEntity findById(int id) {
Cursor cursor = database.query("mytable", null, "id=?", new String[]{String.valueOf(id)}, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
MyEntity entity = new MyEntity();
entity.setId(cursor.getInt(cursor.getColumnIndex("id")));
entity.setName(cursor.getString(cursor.getColumnIndex("name")));
entity.setAge(cursor.getInt(cursor.getColumnIndex("age")));
cursor.close();
return entity;
}
return null;
}
public List<MyEntity> findAll() {
List<MyEntity> entities = new ArrayList<>();
Cursor cursor = database.query("mytable", null, null, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
MyEntity entity = new MyEntity();
entity.setId(cursor.getInt(cursor.getColumnIndex("id")));
entity.setName(cursor.getString(cursor.getColumnIndex("name")));
entity.setAge(cursor.getInt(cursor.getColumnIndex("age")));
entities.add(entity);
} while (cursor.moveToNext());
cursor.close();
}
return entities;
}
}
```
5. 在Activity中使用
```java
public class MainActivity extends AppCompatActivity {
private MyEntityDao dao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseManager.initialize(getApplicationContext());
dao = new MyEntityDao();
dao.open();
// 插入数据
MyEntity entity = new MyEntity();
entity.setName("Tom");
entity.setAge(20);
dao.insert(entity);
// 更新数据
entity.setName("Jerry");
dao.update(entity);
// 删除数据
dao.delete(entity.getId());
// 查询数据
MyEntity e = dao.findById(1);
List<MyEntity> entities = dao.findAll();
dao.close();
}
@Override
protected void onDestroy() {
super.onDestroy();
DatabaseManager.getInstance().closeDatabase();
}
}
```
这样就完成了基于Android SQLite数据库的封装,使得操作更加简单方便,同时也提高了代码的可维护性。