Android SQLite数据库解析并使用两种方法实现增删改查
来源:互联网 发布:js懒加载的原理 编辑:程序博客网 时间:2024/05/19 13:19
一、创建实体类
public class Person { public int id; public String name; public String number;}
第二步:创建数据库
public class PersonDBHelper extends SQLiteOpenHelper { private static final Uri PERSONS_DB_URI = Uri.parse("content://person"); private Context mContext; public PersonDBHelper(Context context) { super(context, "erp.db", null, 1); mContext = context; } @Override public void onCreate(SQLiteDatabase db) { String sql = "create table person(_id integer primary key autoincrement, name varchar(20), number varchar(20))"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i("tag", "oldVersion=" + oldVersion); Log.i("tag", "newVersion=" + newVersion); //db.execSQL("alter table person add age integer"); db.execSQL("DROP TABLE IF EXISTS person"); mContext.getContentResolver().notifyChange(PERSONS_DB_URI, null); this.onCreate(db); }}
第三步:实现增删改查
1)使用原始方法
public class PersonService { private PersonDBHelper mHelper; public PersonService(Context context){ mHelper = new PersonDBHelper(context); } public void add(String name, String number){ SQLiteDatabase db = mHelper.getWritableDatabase(); db.execSQL("insert into person(name,number)values(?,?)", new String[]{name,number}); db.close(); } public void update(String name, String number){ SQLiteDatabase db = mHelper.getWritableDatabase(); db.execSQL("update person set number = ? where name = ?", new String[]{number,name}); db.close(); } public void delete(String name){ SQLiteDatabase db = mHelper.getWritableDatabase(); db.execSQL("delete from person where name = ?", new String[]{name}); db.close(); } public boolean find(String name){ boolean result = false; SQLiteDatabase db = mHelper.getReadableDatabase(); Cursor cursor = db.rawQuery("select * from person where name = ?", new String[]{name}); if (cursor.moveToNext()) { result = true; } cursor.close(); db.close(); return result; } public List<Person> findAll(){ List<Person> persons = new ArrayList<Person>(); SQLiteDatabase db = mHelper.getWritableDatabase(); Cursor cursor = db.rawQuery("select * from person", null); while(cursor.moveToNext()){ Person person = new Person(); int id = cursor.getInt(cursor.getColumnIndex("_id")); String name = cursor.getString(cursor.getColumnIndex("name")); String number = cursor.getString(cursor.getColumnIndex("number")); person.id = id; person.name = name; person.number = number; persons.add(person); } cursor.close(); db.close(); return persons; }}
2)使用Android提供的方法
public class PersonUtil { private PersonDBHelper mHelper; public PersonUtil(Context context){ mHelper = new PersonDBHelper(context); } public long add(String name, String number){ SQLiteDatabase db = mHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); values.put("number", number); long insert = db.insert("person", null, values); db.close(); return insert; } public int update(String name, String number){ SQLiteDatabase db = mHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("number", number); String whereClause = " name = ?"; int update = db.update("person", values, whereClause, new String[]{name}); db.close(); return update; } public void delete(int id){ SQLiteDatabase db = mHelper.getWritableDatabase(); db.delete("person", " _id = ? ", new String[]{id+""}); db.close(); } public boolean find(String name){ boolean result = false; SQLiteDatabase db = mHelper.getReadableDatabase(); String selection = " number = ? "; Cursor cursor = db.query("person", null, selection, new String[]{name}, null, null, null); if (cursor.moveToNext()) { result = true; } cursor.close(); db.close(); return result; } public List<Person> findAll(){ List<Person> persons = new ArrayList<Person>(); SQLiteDatabase db = mHelper.getWritableDatabase(); Cursor cursor = db.query("peron", null, null, null, null, null, null); while(cursor.moveToNext()){ Person person = new Person(); int id = cursor.getInt(cursor.getColumnIndex("_id")); String name = cursor.getString(cursor.getColumnIndex("name")); String number = cursor.getString(cursor.getColumnIndex("number")); person.id = id; person.name = name; person.number = number; persons.add(person); } cursor.close(); db.close(); return persons; }}
第四步:使用事物控制
public class PersonTransation extends AndroidTestCase{ public void testAge(){ PersonDBHelper helper = new PersonDBHelper(getContext()); SQLiteDatabase db = helper.getWritableDatabase(); db.beginTransaction(); try { db.execSQL("update person set age = age - 100 where _id = ?", new Object[]{"1"}); db.execSQL("update person set age = age + 100 where _id = ?", new Object[]{"2"}); db.setTransactionSuccessful(); } catch (SQLException e) { e.printStackTrace(); } finally{ db.endTransaction(); db.close(); } }}
五、contentprovide的使用
package com.view.loaders.provider;import com.view.loaders.db.DbHelper;import android.content.ContentProvider;import android.content.ContentUris;import android.content.ContentValues;import android.content.UriMatcher;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteQueryBuilder;import android.net.Uri;import android.util.Log;import android.widget.SeekBar;public class PersonContentProvider extends ContentProvider { // 公开的 内容uri // uri 通常只有两种格式,即请求全数据的 还有 withAppendId (/#)形式的 public static final Uri Content_URI = Uri .parse("content://com.view.loaders.provider.PersonContentProvider/person"); // 列名很重要 ,公开查询的ID 和其他列的列名 public static final String KEY_ID = "id"; public static final String COLUMN_1_NAME = "name"; public static final String COLUMN_2_NAME = "password"; // 数据库帮助类 private DbHelper helper; // 单行操作 还是多行操作 private static final int SINGLE_ROW = 2; private static final int ALLROWS = 1; private static final UriMatcher URI_MATCHER = new UriMatcher( UriMatcher.NO_MATCH); static { // 匹配 // 单行操作 多行操作授权相同,主要是路径不同 URI_MATCHER.addURI("com.view.loaders.provider.PersonContentProvider", "person/#", SINGLE_ROW); URI_MATCHER.addURI("com.view.loaders.provider.PersonContentProvider", "person", ALLROWS); } public PersonContentProvider() { // TODO Auto-generated constructor stub } /** * 初始化 在此实例化数据库帮助类 */ @Override public boolean onCreate() { helper = new DbHelper(getContext()); return true; } /** * 返回MIME信息 */ @Override public String getType(Uri uri) { int flag = URI_MATCHER.match(uri); Log.i("nikan", "11111------" + flag); switch (flag) { case SINGLE_ROW: return "vnd.android.cursor.item/person"; case ALLROWS: return " vnd.android.cursor.dir/person"; } return null; } /** * 插入 */ @Override public Uri insert(Uri uri, ContentValues values) { // TODO Auto-generated method stub SQLiteDatabase db = helper.getWritableDatabase(); Uri newUri = null; int flag = URI_MATCHER.match(uri); Log.i("nikan", "insert ......." + flag); // 插入的Uri不带id,id为自动增长 // 所以插入的Uri会匹配为ALLROWS,或者不需要匹配验证 switch (flag) { case ALLROWS: Log.i("nikan", "insert 0002 ......."); long id = db.insert("person", null, values); newUri = ContentUris.withAppendedId(uri, id); Log.i("nikan", newUri.toString()); return newUri; default: break; } return null; } /** * 删除 */ @Override public int delete(Uri uri, String selection, String[] selectionArgs) { int flag = URI_MATCHER.match(uri); SQLiteDatabase db = helper.getWritableDatabase(); switch (flag) { case SINGLE_ROW: // String rowID=uri.getPathSegments().get(1); // 获取Uri里面的ID long id = ContentUris.parseId(uri); String whereValues = "id=" + id; Log.i("nikan", "delete ......." + id); // 如果selection不为空,添加where条件 if (selection != null && "".equals(selection.trim())) { whereValues += "AND" + selection; } int count = db.delete("person", whereValues, selectionArgs); // count 删除操作影响的行数 if (count > 0) { Log.i("nikan", "delete success ......."); } return count; case ALLROWS: int counts = db.delete("person", selection, selectionArgs); return counts; default: return 0; } } /** * 更新数据 */ @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { int flag = URI_MATCHER.match(uri); SQLiteDatabase db = helper.getWritableDatabase(); switch (flag) { case SINGLE_ROW: long id = ContentUris.parseId(uri); String whereValues = "id=" + id; if (selection != null && "".equals(selection.trim())) { whereValues += "AND" + selection; } int count = db.update("person", values, whereValues, selectionArgs); if (count > 0) { Log.i("nikan", "update success....." + id); return count; } default: break; } return 0; } /** * 查询 */ @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteDatabase db = helper.getWritableDatabase(); // SQLiteQueryBuilder is a helper class that creates the // proper SQL syntax for us. SQLiteQueryBuilder qBuilder = new SQLiteQueryBuilder(); // Set the table we're querying. qBuilder.setTables(DbHelper.DATABASE_PERSON_TABLE); // If the query ends in a specific record number, we're // being asked for a specific record, so set the // WHERE clause in our query. if ((URI_MATCHER.match(uri)) == SINGLE_ROW) { qBuilder.appendWhere("id=" + ContentUris.parseId(uri)); } // Make the query. Cursor c = qBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder); // 通知所有觀察者 ,數據集以改變 c.setNotificationUri(getContext().getContentResolver(), uri); return c; }}
0 0
- Android SQLite数据库解析并使用两种方法实现增删改查
- 【Android】SQLite 创建数据库,并实现增删改查
- Android SQLite创建数据库和两种增删改查
- Android数据库SqLite实现增删改查
- 创建SQLite数据库并实现增删改查
- Android中使用OrmLite来对SQLite数据库进行CRUD(增删改查)解析
- android数据库使用系统封装的api实现SQLite数据库的增删改查
- Android SQLite数据库增删改查操作的使用详解
- Android SQLite数据库增删改查操作的使用详解
- Android SQLite数据库增删改查操作的使用详解
- Android SQLite数据库增删改查操作的使用详解
- Android SQLite数据库增删改查操作的使用详解
- Android SQLite数据库增删改查操作的使用详解
- android SQLite数据库增删改查操作的使用详解
- Android中使用Sqlite数据库(三) 使用 SQLiteDatabase类实现 增删改查
- android sqlite数据库增删改查
- Android SQLite数据库增删改查
- Android SQLite数据库增删改查
- leetcode60-Permutation Sequence(求指定位置的排列)
- 如何制作朋友圈搞笑证件图片(附源码实例)
- Simple Calculator with Exeption Handling
- 【LeetCode】LeetCode——第17题:Letter Combinations of a Phone Number
- SSH隧道简洁介绍以及SSH隧道实际应用
- Android SQLite数据库解析并使用两种方法实现增删改查
- 【Struts】:Struts1简介及第一个代码示例
- POJ 1679 The Unique MST(次小生成树)
- android之权限
- 【Stanford机器学习笔记】3-Logistic Regression for Classification
- Java基础学习之八大基本变量
- 【asp.net】控件
- Sublime3安装PackageControl,然后安装GoSublime
- web_for_pentest fileupload