创建数据库:
package com.bwie.dongchangqi.tinkertest.SQLite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by Administrator on 2018/1/19 0019. */ public class MOpenHelper extends SQLiteOpenHelper{ public MOpenHelper(Context context) { /** * name 数据库的名字 * factory 工厂 默认的游标工厂 目的是创建 cursor * version 数据库的版本 从1开始 * */ super(context, "user", null, 1); } /** * 当数据库第一次创建的时候调用 * * 特别适合做 表结构的初始化 */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table if not exists user (_id integer primary key autoincrement,name varchar(20),money varchar(20))"); //初始化2条数据 db.execSQL("insert into user ('name','money') values ('张三','2000')"); db.execSQL("insert into user ('name','money') values ('李四','5000')"); } /** * 当数据库版本需要升级的时候调用 * * 适合做 表结构更新的操作 * */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { System.out.println("onUpgrade"); // db.execSQL("alter table info add phone varchar(20)"); } }
数据库操作类:
package com.bwie.dongchangqi.tinkertest.SQLite; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.util.Log; /** * Created by Administrator on 2018/1/19 0019. */ public class MContentProvider extends ContentProvider{ private MOpenHelper mOpenHelper; @Override public boolean onCreate() { mOpenHelper = new MOpenHelper(getContext()); //true:代表Provider创建成功,false:处理复杂逻辑的时候, 如果出错,我们就返回false; return true; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Log.e("MContentProvider", "调用了查询数据的方法"); SQLiteDatabase readableDatabase = mOpenHelper.getReadableDatabase(); Cursor cursor = readableDatabase.query("user", projection, selection, selectionArgs, null, null, sortOrder); return cursor; } //内容提供者返回的数据类型,默认为null即可;只有返回特殊类型才会重写这个方法;默认为null即可; @Override public String getType(Uri uri) { // TODO Auto-generated method stub return null; } @Override public Uri insert(Uri uri, ContentValues values) { /** * getWritableDatabase:如果存储数据的sd卡已满,调用getWritableDatabase就会报错; * getReadableDatabase如果存储数据的sd卡已满,调用getReadableDatabase不会报错, 会以只读的方式来操作;; */ SQLiteDatabase readableDatabase = mOpenHelper.getReadableDatabase(); long insert = readableDatabase.insert("user", null, values); Log.e("MContentProvider", "调用了增加数据的方法"); return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase readableDatabase = mOpenHelper.getReadableDatabase(); int deleteTemp = readableDatabase.delete("user", selection, selectionArgs); return deleteTemp; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase readableDatabase = mOpenHelper.getReadableDatabase(); int updateTemp = readableDatabase.update("user", values, selection, selectionArgs); return updateTemp; } }
如果数据库是远程的数据库:在Manifest中添加:添加到application中:
<!-- authorities:我被访问的固定地址 ,这个可以随便写,自己知道就行 exported:本程序是否可以被其他程序所访问 --> <provider android:name=".SQLite.MContentProvider" android:authorities="com.example.sample" android:exported="true" />
对数据库执行操作:
package com.bwie.dongchangqi.tinkertest.SQLite; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import com.bwie.dongchangqi.tinkertest.R; public class SQLiteTestMainActivity extends AppCompatActivity { private Uri uri; private ContentResolver contentResolver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sqlite_test_main); //远程操作--->当前module操作远程数据库(另一个Module中设置的数据库)如下操作,不是远程操作直接调用上边的数据库操作类的方法; // 用contentResolver来访问; contentResolver = getContentResolver(); // 访问provider用这个协议:content:// // http://www.baidu.com uri = Uri.parse("content://com.example.sample"); } public void insertdata(View v) { ContentValues contentValues = new ContentValues(); contentValues.put("name", "爱因斯坦"); contentValues.put("money", "500"); contentResolver.insert(uri, contentValues); } /** * 删除数据 * * @param v */ public void del(View v) { int deleteTemp = contentResolver.delete(uri, "name=?", new String[] { "李四光" }); Log.e("MainActivity", "删除影响的条数" + deleteTemp); } /** * 更新数据 * @param v */ public void update(View v) { ContentValues contentValues = new ContentValues(); // 这个要改变的值,就是最终数据库里改变后的值 contentValues.put("name", "张国荣"); int updateTemp = contentResolver.update(uri, contentValues, "name=?", new String[] { "爱因斯坦" }); Log.e("MainActivity", "更新数据影响的条数" + updateTemp); } public void query(View v) { Cursor cursor = contentResolver.query(uri, null, null, null, null); while (cursor.moveToNext()) { int id = cursor.getInt(0); String name = cursor.getString(1); String money = cursor.getString(2); Log.e("MainActivity", "id: " + id + "name: " + name + "money: " + money); } } }