SQLite是一个开放源代码的关系数据库,即用于在android设备上执行数据库操作,例如从数据库中存储,操作或检索持久性数据。
默认情况下,它嵌入在android中。因此,无需执行任何数据库设置或管理任务。
SQLiteOpenHelper类提供使用SQLite数据库的函数。
链接:https://www.learnfk.comhttps://www.learnfk.com/android/android-sqlite-tutorials.html
来源:LearnFk无涯教程网
android.database.sqlite.SQLiteOpenHelper类用于数据库创建和版本管理。为了执行任何数据库操作,您必须提供SQLiteOpenHelper类的onCreate()和onUpgrade()方法的实现。
构造函数 | 描述 |
---|---|
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) | 创建一个用于创建,打开和管理数据库的对象。 |
SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) | 创建一个用于创建,打开和管理数据库的对象。它指定错误处理程序。 |
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) | 需要降级数据库时调用。 |
它包含要在sqlite数据库上执行的方法,例如创建,更新,删除,选择等。
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数据库的简单示例。
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(); } }
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); } } }
输出:
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
Python实战 · 从0到1搭建直播视频平台 -〔Barry〕