Android SQLite教程

Android SQLite教程

SQLite 是一个 开源的关系型数据库 即用于在Android设备上执行数据库操作,如存储、操作或检索持久数据。

它被默认嵌入到Android中,因此无需执行任何数据库设置或管理任务。

在这里,我们将看到使用SQLite存储和获取数据的示例。数据显示在logcat中。要在下一个页面上显示数据在下拉列表或列表视图上,请转到下一页。

SQLiteOpenHelper 类提供了使用SQLite数据库的功能。

SQLiteOpenHelper类

android.database.sqlite.SQLiteOpenHelper类用于数据库的创建和版本管理。要执行任何数据库操作,您必须提供SQLiteOpenHelper类的 onCreate()onUpgrade() 方法的实现。

SQLiteOpenHelper类的构造函数

SQLiteOpenHelper类有两个构造函数。

构造函数 描述
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 创建、打开和管理数据库的对象。
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) 创建、打开和管理数据库的对象。它指定了错误处理程序。

SQLiteOpenHelper类的方法

SQLiteOpenHelper类中有许多方法。以下是其中一些:

方法 描述
public abstract void onCreate(SQLiteDatabase db) 在数据库第一次创建时调用,仅调用一次。
public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 在数据库需要升级时调用。
public synchronized void close () 关闭数据库对象。
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) 在数据库需要降级时调用。

SQLiteDatabase class

它包含了对sqlite数据库执行的方法,例如创建、更新、删除、选择等。

SQLiteDatabase类的方法

SQLiteDatabase类中有许多方法。其中一些如下:

方法 描述
void execSQL(String sql) 执行非选择查询的sql语句。
long insert(String table, String nullColumnHack, ContentValues values) 在数据库上插入一条记录。table指定表名,nullColumnHack不允许完全为空的值。如果第二个参数为空,android将在values为空时保存空值。第三个参数指定要存储的值。
int update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新一行。
Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) 返回结果集的游标。

Android SQLite数据库示例

让我们看一个简单的Android SQLite数据库示例。

package example.javatpoint.com.sqlitetutorial;

public class Contact {
    int _id;
    String _name;
    String _phone_number;
    public Contact(){   }
    public Contact(int id, String name, String _phone_number){
        this._id = id;
        this._name = name;
        this._phone_number = _phone_number;
    }

    public Contact(String name, String _phone_number){
        this._name = name;
        this._phone_number = _phone_number;
    }
    public int getID(){
        return this._id;
    }

    public void setID(int id){
        this._id = id;
    }

    public String getName(){
        return this._name;
    }

    public void setName(String name){
        this._name = name;
    }

    public String getPhoneNumber(){
        return this._phone_number;
    }

    public void setPhoneNumber(String phone_number){
        this._phone_number = phone_number;
    }
}

现在,让我们创建一个扩展SQLiteOpenHelper类并提供其方法实现的数据库处理程序类。

package example.javatpoint.com.sqlitetutorial;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;


public class DatabaseHandler extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "contactsManager";
    private static final String TABLE_CONTACTS = "contacts";
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_PH_NO = "phone_number";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        //3rd argument to be passed is CursorFactory instance
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
                + KEY_PH_NO + " TEXT" + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

        // Create tables again
        onCreate(db);
    }

    // code to add the new contact
    void addContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName()); // Contact Name
        values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone

        // Inserting Row
        db.insert(TABLE_CONTACTS, null, values);
        //2nd argument is String containing nullColumnHack
        db.close(); // Closing database connection
    }

    // code to get the single contact
    Contact getContact(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
                        KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), cursor.getString(2));
        // return contact
        return contact;
    }

    // code to get all contacts in a list view
    public List getAllContacts() {
        List contactList = new ArrayList();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Contact contact = new Contact();
                contact.setID(Integer.parseInt(cursor.getString(0)));
                contact.setName(cursor.getString(1));
                contact.setPhoneNumber(cursor.getString(2));
                // Adding contact to list
                contactList.add(contact);
            } while (cursor.moveToNext());
        }

        // return contact list
        return contactList;
    }

    // code to update the single contact
    public int updateContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());
        values.put(KEY_PH_NO, contact.getPhoneNumber());

        // updating row
        return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
    }

    // Deleting single contact
    public void deleteContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
        db.close();
    }

    // Getting contacts Count
    public int getContactsCount() {
        String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }

}
package example.javatpoint.com.sqlitetutorial;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DatabaseHandler db = new DatabaseHandler(this);

        // Inserting Contacts
        Log.d("Insert: ", "Inserting ..");
        db.addContact(new Contact("Ravi", "9100000000"));
        db.addContact(new Contact("Srinivas", "9199999999"));
        db.addContact(new Contact("Tommy", "9522222222"));
        db.addContact(new Contact("Karthik", "9533333333"));

        // Reading all contacts
        Log.d("Reading: ", "Reading all contacts..");
        List contacts = db.getAllContacts();

        for (Contact cn : contacts) {
            String log = "Id: " + cn.getID() + " ,Name: " + cn.getName() + " ,Phone: " +
                    cn.getPhoneNumber();
            // Writing Contacts to log
            Log.d("Name: ", log);
        }
    }
}

输出:

Android SQLite教程

如何在Android Studio中查看存储在SQLite中的数据?

按照以下步骤查看存储在Android SQLite中的数据库及其数据:

  • 打开文件浏览器。
  • 进入data目录下的data目录。
  • 搜索您的应用程序包名称。
  • 在您的应用程序包中进入databases目录,您将找到您的数据库(contactsManager)。
  • 将您的数据库(contactsManager)保存在任何您喜欢的位置。
  • 下载任何SqLite浏览器插件或工具(在我的情况下是DB Browser for SQLite)。
  • 启动DB Browser for SQLite并打开您的数据库(contactsManager)。
  • 转到浏览数据 -> 选择您的表格(contacts),您将看到存储的数据。

Android SQLite教程

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程