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类

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

SQLiteDatabase类的方法

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

方法 描述
void execSQL(String sql) 执行sql查询而不是select查询。
long insert(String table, String nullColumnHack, ContentValues values) 在数据库上插入一条记录。该表指定表名, nullColumnHack不允许完全为空值。如果第二个参数为null, 则如果值为空, 则android将存储null值。第三个参数指定要存储的值。
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.srcmini02.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.srcmini02.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<Contact> getAllContacts() {
        List<Contact> contactList = new ArrayList<Contact>();
        // 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.srcmini02.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<Contact> 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 Studio中查看存储在sqlite中的数据?

请按照以下步骤查看数据库及其存储在android sqlite中的数据:

  • 打开文件资源管理器。
  • 转到数据目录内的数据目录。
  • 搜索你的应用程序包名称。
  • 在应用程序包内,转到将在其中找到数据库的数据库(contactsManager)。
  • 将数据库(contactsManager)保存到所需的任何位置。
  • 下载任何SqLite浏览器插件或工具(在本例中为SQLite的DB Browser)。
  • 启动用于SQLite的数据库浏览器并打开数据库(contactsManager)。
  • 转到浏览数据->选择表(联系人),你将看到存储的数据。
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?