Android数据库DAO
1. 简介
在Android应用程序开发中,数据库是一个非常重要的组件。数据库DAO(Data Access Object)是一种设计模式,用于封装对数据库的访问操作。它提供了一种简单的方式来管理数据的创建、更新、读取和删除。
2. 数据库的创建
在使用数据库DAO之前,我们首先需要创建一个数据库。下面是一个示例代码,展示了如何创建一个名为"students.db"的数据库,并创建一个名为"students"的表格。
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "students.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_STUDENTS = "students";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_AGE = "age";
private static final String CREATE_TABLE_STUDENTS = "CREATE TABLE " +
TABLE_STUDENTS + "(" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_NAME + " TEXT, " +
COLUMN_AGE + " INTEGER" +
")";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_STUDENTS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_STUDENTS);
onCreate(db);
}
}
3. DAO的实现
接下来,我们需要实现一个DAO类来管理数据库中表格的操作。下面是一个示例代码,展示了如何实现一个名为"StudentDAO"的DAO类。
public class StudentDAO {
private SQLiteDatabase database;
private DatabaseHelper dbHelper;
public StudentDAO(Context context) {
dbHelper = new DatabaseHelper(context);
}
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
public void close() {
dbHelper.close();
}
public void insert(Student student) {
ContentValues values = new ContentValues();
values.put(DatabaseHelper.COLUMN_NAME, student.getName());
values.put(DatabaseHelper.COLUMN_AGE, student.getAge());
database.insert(DatabaseHelper.TABLE_STUDENTS, null, values);
}
public void update(Student student) {
ContentValues values = new ContentValues();
values.put(DatabaseHelper.COLUMN_NAME, student.getName());
values.put(DatabaseHelper.COLUMN_AGE, student.getAge());
database.update(DatabaseHelper.TABLE_STUDENTS, values, DatabaseHelper.COLUMN_ID + " = " + student.getId(), null);
}
public void delete(Student student) {
database.delete(DatabaseHelper.TABLE_STUDENTS, DatabaseHelper.COLUMN_ID + " = " + student.getId(), null);
}
public List<Student> getAllStudents() {
List<Student> students = new ArrayList<>();
Cursor cursor = database.query(DatabaseHelper.TABLE_STUDENTS, null, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Student student = new Student();
student.setId(cursor.getInt(cursor.getColumnIndex(DatabaseHelper.COLUMN_ID)));
student.setName(cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_NAME)));
student.setAge(cursor.getInt(cursor.getColumnIndex(DatabaseHelper.COLUMN_AGE)));
students.add(student);
cursor.moveToNext();
}
cursor.close();
return students;
}
}
4. 使用DAO进行数据库操作
现在我们可以使用StudentDAO类来执行数据库操作了。下面是一个示例代码,展示了如何使用StudentDAO类来插入、更新、删除和查询学生数据。
public class MainActivity extends AppCompatActivity {
private StudentDAO studentDAO;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
studentDAO = new StudentDAO(this);
studentDAO.open();
// 插入学生数据
Student student1 = new Student("John", 20);
Student student2 = new Student("Alice", 22);
studentDAO.insert(student1);
studentDAO.insert(student2);
// 更新学生数据
student2.setAge(23);
studentDAO.update(student2);
// 删除学生数据
studentDAO.delete(student1);
// 查询所有学生数据
List<Student> students = studentDAO.getAllStudents();
for (Student student : students) {
Log.d("Student", "ID: " + student.getId() + ", Name: " + student.getName() + ", Age: " + student.getAge());
}
studentDAO.close();
}
}
上述代码示例中,我们首先创建了一个StudentDAO对象,并调用open()方法打开数据库连接。然后,我们插入了两个学生数据,并对其中一个学生进行了更新操作。接着,我们