布局如上。
我们要做的效果是如按钮所示。
首先,要创建一个类继承制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