Android - SQLite

Android - SQLite 首页 / Android入门教程 / Android - SQLite

SQLite是一个开放源代码的关系数据库,即用于在android设备上执行数据库操作,例如从数据库中存储,操作或检索持久性数据。

默认情况下,它嵌入在android中。因此,无需执行任何数据库设置或管理任务。

SQLiteOpenHelper类提供使用SQLite数据库的函数。

SQLiteOpenHelper class

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

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数据库上执行的方法,例如创建,更新,删除,选择等。

链接:https://www.learnfk.comhttps://www.learnfk.com/android/android-sqlite-tutorials.html

来源:LearnFk无涯教程网

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)返回结果集上的光标。

SQLite数据库示例

让无涯教程看看Android SQLite数据库的简单示例。

File: Contact.java
package example.learnfk.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;
    }
}

File: DatabaseHandler.java

现在,让无涯教程创建扩展Sqliteopenhelper类并提供其方法实现的数据库处理程序类。

package example.learnfk.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);
        //要传递的第三个参数是 CursorFactory 实例
    }

   //创建表
    @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);
    }

   //升级数据库
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       //删除旧表(如果存在)
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

       //再次创建表
        onCreate(db);
    }

   //添加新联系人的代码
    void addContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());//联系人姓名
        values.put(KEY_PH_NO, contact.getPhoneNumber());//联系电话

       //插入行
        db.insert(TABLE_CONTACTS, null, values);
        //第二个参数是包含 nullColumnHack 的字符串
        db.close();//关闭数据库连接
    }

   //获取单个联系人的代码
    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;
    }

   //在列表视图中获取所有联系人的代码
    public List<contact> getAllContacts() {
        List<contact> contactList = new ArrayList<contact>();
       //全选查询
        String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

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

       //循环遍历所有行并添加到列表
        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));
               //将联系人添加到列表
                contactList.add(contact);
            } while (cursor.moveToNext());
        }

       //返回联系人列表
        return contactList;
    }

   //更新单个联系人的代码
    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());

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

   //删除单个联系人
    public void deleteContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
        db.close();
    }

   //获取联系人计数
    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();
    }

}
File: MainActivity.java
package example.learnfk.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);

       //插入联系人
        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();
           //将联系人写入日志
            Log.d("Name: ", log);
        }
    }
}

输出:

android simple sqlite example output 1

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

趣谈网络协议 -〔刘超〕

从0开始学游戏开发 -〔蔡能〕

React实战进阶45讲 -〔王沛〕

白话法律42讲 -〔周甲徳〕

JavaScript核心原理解析 -〔周爱民〕

Service Mesh实战 -〔马若飞〕

分布式金融架构课 -〔任杰〕

性能优化高手课 -〔尉刚强〕

深入剖析Java新特性 -〔范学雷〕

好记忆不如烂笔头。留下您的足迹吧 :)