简单的 Android SQLite 示例






4.81/5 (89投票s)
这是一个在 Android 中使用 SQLite 数据库的简单演示。
引言
在本文中,我尝试以尽可能简单的方式演示在 Android 中使用 SQLite 数据库。 我在网上看到的大多数文章和演示对于外行来说并不是很容易理解。 此外,大多数示例都假定对 Android 和 SQL 具有深入的了解。 本文假设用户对 Android 和基本 SQL 命令有一定的工作知识。 示例应用程序展示了如何在 Android 的 SQLite 表上执行基本 DML 和查询操作。
背景
我创建的示例应用程序是一个简单的学生管理系统,允许用户添加、删除、修改和查看学生详细信息。 该应用程序接受学生的学号、姓名和分数,并将这些详细信息添加到 student
表中。 为简单起见,我创建了 VARCHAR
数据类型的所有字段,这是一种可变长度的字符string
。
Using the Code
来自 android.database.sqlite
包的 SQLiteDatabase
类和来自 android.database
包的 Cursor
类提供了在 SQLite 表上执行数据操作语言 (DML) 和查询操作所需的所有功能。
以下代码显示了如何在 SQLite 数据库中创建一个数据库和一个表。
db=openOrCreateDatabase("StudentDB", Context.MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS student(rollno VARCHAR,name VARCHAR,marks VARCHAR);");
在上面的代码中,如果 StudentDB
数据库存在,则使用 openOrCreateDatabase()
函数打开它,如果不存在,则创建一个新的数据库。 此函数的第一个参数指定要打开或创建的数据库的名称。 第二个参数 Context.MODE_PRIVATE
表示数据库文件只能由调用应用程序或共享同一用户 ID 的所有应用程序访问。 第三个参数是一个 Cursor 工厂对象,如果不需要,可以将其保留为 null
。
db.execSQL()
函数执行任何 SQL 命令。 这里它用于创建 student
表(如果该表尚未存在于数据库中)。
以下是主活动的 onCreate()
方法的完整代码。
public void onCreate(Bundle savedInstanceState)
{
<code>super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Initializing controls
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);
// Registering event handlers
btnAdd.setOnClickListener(this);
btnDelete.setOnClickListener(this);
btnModify.setOnClickListener(this);
btnView.setOnClickListener(this);
btnViewAll.setOnClickListener(this);
btnShowInfo.setOnClickListener(this);
// Creating database and table
db=openOrCreateDatabase("StudentDB", Context.MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS student(rollno VARCHAR,name VARCHAR,marks VARCHAR);");
}
在 onClick()
事件处理程序中,我们可以编写添加、删除、修改和查看记录所需的代码。
以下代码使用 db.execSQL()
函数在 student
表中插入 student
记录。
db.execSQL("INSERT INTO student VALUES('"+editRollno.getText()+"','"+
editName.getText()+"','"+editMarks.getText()+"');");
上面的代码通过将可编辑字段的内容附加到 string
中来生成 INSERT
语句,并执行 INSERT
语句。
同样,可以按如下方式执行 DELETE
命令
db.execSQL("DELETE FROM student WHERE rollno='"+editRollno.getText()+"'");
上面的代码删除学号在可编辑字段中输入的学生的记录。
可以按如下方式执行 UPDATE
命令
db.execSQL("UPDATE student SET name='"+editName.getText()+"',marks='"+
editMarks.getText()+"' WHERE rollno='"+editRollno.getText()+"'");
上面的代码更新学号在可编辑字段中输入的学生的记录。
要查看学生记录,我们使用 SQLiteDatabase
类的 rawQuery()
方法执行查询,如下所示
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("Rollno: "+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
命令以检索所有学生的记录,并将它们附加到 string
缓冲区中。 最后,它使用用户定义的 showMessage()
函数显示学生详细信息。
以下是 onClick()
事件处理程序的完整代码
public void onClick(View view)
{
// Adding a record
if(view==btnAdd)
{
// Checking empty fields
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;
}
// Inserting record
db.execSQL("INSERT INTO student VALUES('"+editRollno.getText()+"','"+editName.getText()+
"','"+editMarks.getText()+"');");
showMessage("Success", "Record added");
clearText();
}
// Deleting a record
if(view==btnDelete)
{
// Checking empty roll number
if(editRollno.getText().toString().trim().length()==0)
{
showMessage("Error", "Please enter Rollno");
return;
}
// Searching roll number
Cursor c=db.rawQuery("SELECT * FROM student WHERE rollno='"+editRollno.getText()+"'", null);
if(c.moveToFirst())
{
// Deleting record if found
db.execSQL("DELETE FROM student WHERE rollno='"+editRollno.getText()+"'");
showMessage("Success", "Record Deleted");
}
else
{
showMessage("Error", "Invalid Rollno");
}
clearText();
}
// Modifying a record
if(view==btnModify)
{
// Checking empty roll number
if(editRollno.getText().toString().trim().length()==0)
{
showMessage("Error", "Please enter Rollno");
return;
}
// Searching roll number
Cursor c=db.rawQuery("SELECT * FROM student WHERE rollno='"+editRollno.getText()+"'", null);
if(c.moveToFirst())
{
// Modifying record if found
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();
}
// Viewing a record
if(view==btnView)
{
// Checking empty roll number
if(editRollno.getText().toString().trim().length()==0)
{
showMessage("Error", "Please enter Rollno");
return;
}
// Searching roll number
Cursor c=db.rawQuery("SELECT * FROM student WHERE rollno='"+editRollno.getText()+"'", null);
if(c.moveToFirst())
{
// Displaying record if found
editName.setText(c.getString(1));
editMarks.setText(c.getString(2));
}
else
{
showMessage("Error", "Invalid Rollno");
clearText();
}
}
// Viewing all records
if(view==btnViewAll)
{
// Retrieving all records
Cursor c=db.rawQuery("SELECT * FROM student", null);
// Checking if no records found
if(c.getCount()==0)
{
showMessage("Error", "No records found");
return;
}
// Appending records to a string buffer
StringBuffer buffer=new StringBuffer();
while(c.moveToNext())
{
buffer.append("Rollno: "+c.getString(0)+"\n");
buffer.append("Name: "+c.getString(1)+"\n");
buffer.append("Marks: "+c.getString(2)+"\n\n");
}
// Displaying all records
showMessage("Student Details", buffer.toString());
}
// Displaying info
if(view==btnShowInfo)
{
showMessage("Student Management Application", "Developed By Azim");
}
}
以下用户定义的函数用于向用户显示消息
public void showMessage(String title,String message)
{
Builder builder=new Builder(this);
builder.setCancelable(true);
builder.setTitle(title);
builder.setMessage(message);
builder.show();
}
以下用户定义的函数用于清除编辑字段
public void clearText()
{
editRollno.setText("");
editName.setText("");
editMarks.setText("");
editRollno.requestFocus();
}
关注点
我希望本文对 Android 平台的新手有所帮助,以便在开始编写更复杂的应用程序之前,了解如何为 Android 开发数据库应用程序。