Android SQLite 数据库基础教程

在本文中,将探讨如何在Android平台上使用SQLite数据库。尽管网络上有许多关于此主题的文章和演示,但它们往往对初学者来说过于复杂,或者假设读者已经对Android和SQL有深入的了解。本文假设读者已经具备Android的基础知识和基本的SQL命令知识。将通过一个简单的学生管理系统示例,展示如何在Android中对SQLite表执行基本的数据操作语言(DML)和查询操作。

本文创建的示例应用程序是一个简单的学生管理系统,它允许用户添加、删除、修改和查看学生详细信息。应用程序接受学生的学号、姓名和成绩,并将这些信息添加到一个名为student的表中。为了简化,创建了所有字段的数据类型为VARCHAR,这是一个可变长度的字符字符串。

使用代码

Android中,SQLiteDatabase类来自android.database.sqlite包,而Cursor类来自android.database包,它们提供了执行SQLite表上DML和查询操作所需的所有功能。

以下是创建SQLite数据库和表的代码示例:

db = openOrCreateDatabase("StudentDB", Context.MODE_PRIVATE, null); db.execSQL("CREATE TABLE IF NOT EXISTS student(rollno VARCHAR, name VARCHAR, marks VARCHAR);");

在上面的代码中,openOrCreateDatabase()函数用于打开StudentDB数据库(如果存在)或创建一个新数据库(如果不存在)。此函数的第一个参数指定要打开或创建的数据库的名称。第二个参数Context.MODE_PRIVATE指示数据库文件只能由调用应用程序或具有相同用户ID的所有应用程序访问。第三个参数是Cursor工厂对象,如果不要求,可以留空。

db.execSQL()函数执行任何SQL命令。在这里,它用于创建student表(如果数据库中尚不存在)。

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 初始化控件 editRollno = (EditText) findViewById(R.id.editRollno); editName = (EditText) findViewById(R.id.editName); editMarks = (EditText) findViewById(R.id.editMarks); btnAdd = (Button) findViewById(R.id.btnAdd); btnDelete = (Button) findViewById(R.id.btnDelete); btnModify = (Button) findViewById(R.id.btnModify); btnView = (Button) findViewById(R.id.btnView); btnViewAll = (Button) findViewById(R.id.btnViewAll); btnShowInfo = (Button) findViewById(R.id.btnShowInfo); // 注册事件处理器 btnAdd.setOnClickListener(this); btnDelete.setOnClickListener(this); btnModify.setOnClickListener(this); btnView.setOnClickListener(this); btnViewAll.setOnClickListener(this); btnShowInfo.setOnClickListener(this); // 创建数据库和表 db = openOrCreateDatabase("StudentDB", Context.MODE_PRIVATE, null); db.execSQL("CREATE TABLE IF NOT EXISTS student(rollno VARCHAR, name VARCHAR, marks VARCHAR);"); }

onClick()事件处理器中,可以编写添加、删除、修改和查看记录所需的代码。

db.execSQL("INSERT INTO student VALUES('" + editRollno.getText() + "','" + editName.getText() + "','" + editMarks.getText() + "');");

上述代码通过将可编辑字段的内容附加到字符串中生成一个INSERT语句,并执行该INSERT语句。

db.execSQL("DELETE FROM student WHERE rollno='" + editRollno.getText() + "'");

上述代码删除了在可编辑字段中输入的学号对应的学生记录。

db.execSQL("UPDATE student SET name='" + editName.getText() + "', marks='" + editMarks.getText() + "' WHERE rollno='" + editRollno.getText() + "'");

上述代码更新了在可编辑字段中输入的学号对应的学生的记录。

Cursor c = db.rawQuery("SELECT * FROM student WHERE rollno='" + editRollno.getText() + "'", null); if (c.moveToFirst()) { editName.setText(c.getString(1)); editMarks.setText(c.getString(2)); }

上述代码使用SQLiteDatabase类的rawQuery()方法执行一个SELECT语句来选择记录,然后使用Cursor类的moveToFirst()方法检查是否找到了记录,并在相应的可编辑字段中显示姓名和成绩。

Cursor c = db.rawQuery("SELECT * FROM student", null); if (c.getCount() == 0) { showMessage("Error", "No records found"); return; } StringBuffer buffer = new StringBuffer(); while (c.moveToNext()) { buffer.append("\nRollno: " + c.getString(0) + "\n"); buffer.append("Name: " + c.getString(1) + "\n"); buffer.append("Marks: " + c.getString(2) + "\n\n"); } showMessage("Student Details", buffer.toString());

上述代码执行SELECT命令以检索所有学生的记录,并将它们追加到一个字符串缓冲区中。最后,使用用户定义的showMessage()函数显示学生详细信息。

public void onClick(View view) { // 添加记录 if (view == btnAdd) { // 检查空字段 if (editRollno.getText().toString().trim().length() == 0 || editName.getText().toString().trim().length() == 0 || editMarks.getText().toString().trim().length() == 0) { showMessage("Error", "Please enter all values"); return; } // 插入记录 db.execSQL("INSERT INTO student VALUES('" + editRollno.getText() + "','" + editName.getText() + "','" + editMarks.getText() + "');"); showMessage("Success", "Record added"); clearText(); } // 删除记录 if (view == btnDelete) { // 检查空学号 if (editRollno.getText().toString().trim().length() == 0) { showMessage("Error", "Please enter Rollno"); return; } // 搜索学号 Cursor c = db.rawQuery("SELECT * FROM student WHERE rollno='" + editRollno.getText() + "'", null); if (c.moveToFirst()) { // 如果找到则删除记录 db.execSQL("DELETE FROM student WHERE rollno='" + editRollno.getText() + "'"); showMessage("Success", "Record Deleted"); } else { showMessage("Error", "Invalid Rollno"); } clearText(); } // 修改记录 if (view == btnModify) { // 检查空学号 if (editRollno.getText().toString().trim().length() == 0) { showMessage("Error", "Please enter Rollno"); return; } // 搜索学号 Cursor c = db.rawQuery("SELECT * FROM student WHERE rollno='" + editRollno.getText() + "'", null); if (c.moveToFirst()) { // 如果找到则修改记录 db.execSQL("UPDATE student SET name='" + editName.getText() + "',marks='" + editMarks.getText() + "' WHERE rollno='" + editRollno.getText() + "'"); showMessage("Success", "Record Modified"); } else { showMessage("Error", "Invalid Rollno"); } clearText(); } // 查看记录 if (view == btnView) { // 检查空学号 if (editRollno.getText().toString().trim().length() == 0) { showMessage("Error", "Please enter Rollno"); return; } // 搜索学号 Cursor c = db.rawQuery("SELECT * FROM student WHERE rollno='" + editRollno.getText() + "'", null); if (c.moveToFirst()) { // 如果找到则显示记录 editName.setText(c.getString(1)); editMarks.setText(c.getString(2)); } else { showMessage("Error", "Invalid Rollno"); clearText(); } } // 查看所有记录 if (view == btnViewAll) { // 检索所有记录 Cursor c = db.rawQuery("SELECT * FROM student", null); // 检查是否没有找到记录 if (c.getCount() == 0) { showMessage("Error", "No records found"); return; } // 将记录追加到字符串缓冲区 StringBuffer buffer = new StringBuffer(); while (c.moveToNext()) { buffer.append("\nRollno: " + c.getString(0) + "\n"); buffer.append("Name: " + c.getString(1) + "\n"); buffer.append("Marks: " + c.getString(2) + "\n\n"); } // 显示所有记录 showMessage("Student Details", buffer.toString()); } // 显示信息 if (view == btnShowInfo) { showMessage("Student Management Application", "Developed By Azim"); } }

以下是用于向用户显示消息的用户定义函数:

public void showMessage(String title, String message) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(true); builder.setTitle(title); builder.setMessage(message); builder.show(); } public void clearText() { editRollno.setText(""); editName.setText(""); editMarks.setText(""); editRollno.requestFocus(); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485