65.9K
CodeProject 正在变化。 阅读更多。
Home

简单的 Android SQLite 示例

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (89投票s)

2014年6月6日

CPOL

3分钟阅读

viewsIcon

735041

downloadIcon

71381

这是一个在 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 开发数据库应用程序。

© . All rights reserved.