SQLiteOpenHelper以及ContentProvite

布局如上。

我们要做的效果是如按钮所示。

首先,要创建一个类继承制SQLiteOpenHelper,生成两个方法分别是创建数据库和更新数据库,和一个构造方法。

public class MyDataHelper extends SQLiteOpenHelper{
//    构造方法,这个方法必须要有
    public MyDataHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version); }
//当第一创建数据库的时候,会调用该方法
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.i("DataHelper","创建数据库,初始化的数据库");
//        因为是在第一次数据库创建的时候调用的,所以这里通常进行的是数据库表的创建
        String sql="CREATE TABLE IF NOT EXISTS student(sid int,name text,sex text,age int);";
//        执行表创建语句
        db.execSQL(sql); }
//    当更新数据库(数据库版本更新)的时候调用该方法
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        Log.i("DataHelper","更新数据库");}}
在main方法里分别声明并初始化控件,添加点击事件

public class MainActivity extends AppCompatActivity {
    private Button createTable;
    private Button insertButtton;
    private Button deleteButton;
    private Button updateButton;
    private Button selectButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        createTable= (Button) findViewById(R.id.createTable);
        insertButtton= (Button) findViewById(R.id.insertButton);
        deleteButton= (Button) findViewById(R.id.deleteButton);
        updateButton= (Button) findViewById(R.id.updateButton);
        selectButton= (Button) findViewById(R.id.selectButton);

1,

 createTable.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                创建Helper对象
                MyDataHelper helper=new MyDataHelper(MainActivity.this,"student_data3",null,1);
//                获取一个可读的数据库对象
                SQLiteDatabase db=helper.getReadableDatabase();  }  });
1

updateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MyDataHelper helper=new MyDataHelper(MainActivity.this,"student_data3",null,2);
                SQLiteDatabase db=helper.getReadableDatabase();     }    });
        insertButtton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                这里注意处理好版本号
                MyDataHelper helper=new MyDataHelper(MainActivity.this,"student_data3",null,2);
//                得到一个可写入的数据库
                SQLiteDatabase db=helper.getWritableDatabase();
                String sql = "INSERT INTO student(sid,name,sex,age)VALUES(2,'王五','男',21);";
                db.execSQL(sql);
//                关闭数据库
                db.close();   }   });
        deleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MyDataHelper helper=new MyDataHelper(MainActivity.this,"student_data3",null,2);
                SQLiteDatabase db=helper.getWritableDatabase();
                String sql="delete student from where sid=1";
                db.execSQL(sql);
                db.close();    }   });
        selectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MyDataHelper helper=new MyDataHelper(MainActivity.this,"student_data3",null,2);
                SQLiteDatabase db=helper.getReadableDatabase();
                Cursor cursor = db.query("student", null, null, null, null, null,null);
//        移动到第一行,如果返回为false,那么证明没有数据
                if (cursor.moveToFirst()) {
//        2.循环显示数据
                    do {
                        Integer sid = cursor.getInt(cursor.getColumnIndex("sid"));
                        String name = cursor.getString(cursor.getColumnIndex("name"));
                        String sex = cursor.getString(cursor.getColumnIndex("sex"));
                        Integer age = cursor.getInt(cursor.getColumnIndex("age"));                   
                    } while (cursor.moveToNext());
                    db.close();    }   }   });

1.ContentProvider,内容提供者

内容提供者是Android系统中专门为应用程序间的数据通信开发的;

正常来说,应用程序之间是不允许进行数据通信的,但是内容提供者的作用就是让别的应用程序服务我们的数据库,

想要学习内容提供者,需要两个应用程序,一个作为内容的提供者,一个作为应用程序的访问者


步骤一:创建一个数据库帮助类,用于数据的存储和访问

public class DBHelper extends SQLiteOpenHelper {
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);  }
//重写
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
//          在这里进行创建表的工作
        String sql="CREATE TABLE student(sid int,name text,sex text,age int);";
        sqLiteDatabase.execSQL(sql);  }
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {  }    }
步骤二;自定义一个内容提供者-——>创建一个类,继承自 ContentProvider

//这里是对其他APP如何访问本APP的数据的处理
public class StudentProvider extends ContentProvider {
    //1.声明两个属性,用来储存操作的对象
    private DBHelper helper;
    private SQLiteDatabase db;
    @Override
    public boolean onCreate() {
       helper=new DBHelper(getContext(),"student.db",null,1);
        db=helper.getReadableDatabase();
        return true;  }
   @Nullable
    @Override
    public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
        return null;   }
    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;   }
    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues contentValues) {
//        如果别的应用调用了添加数据的数据提供者的接口,会调用这个方法
//        这里是对调用请求的处理
//        这里将调用者提供的数据插入到Student表中
        db.insert("student",null,contentValues);
        return uri;   }
    @Override
    public int delete(Uri uri, String s, String[] strings) {
        return 0;   }
    @Override
    public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
        return 0;  }}
完成以上后,还需要在AndroidManifest.xml中进行注册。(强掉一下),注册后才能让接收者找到相应的APP

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <provider
        android:authorities="com.coderqi.student"
        android:name=".StudentProvider"
        android:exported="true"
        />
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
</application>
就比如:甲方:1.创建数据库

                            2.创建一个内容提供者,并事项对应的增删改查

               乙方:1.创建一个内容接收者

                           2.通过内容接收者,调用指定的APP的增删改查,

上面的就是创建了一个内容提供者,接下来,需要再创建一个内容接收者                                                     (uri:统一资源定位符)

这里,只进行了对数据的插入(insert)

    ContentResolver resolver=getContentResolver();
//                创建我们需要插入的数据
                ContentValues values=new ContentValues();
                values.put("sid",1);
                values.put("name","高柯");
                values.put("sex","天下第一美男");
                values.put("age",22);
//                使用内容处理者进行数据的插入
                resolver.insert(Uri.parse("content://com.coderqi.student"),values);
                Toast.makeText(getApplicationContext(),"添加成功",Toast.LENGTH_SHORT).show()
运行测试,


1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值