3.四大组件之内容提供者ContentProvider 之前的数据库复习

ContentProvider主要用于在不同的应用程序之间实现数据共享的功能,它提供一套完整的机制,允许一个程序访问另一个程序中的数据,同时还保证被访问数据的安全性。目前,使用ContentProvider是Android实现跨程序共享数据的标准方式。

 

项目结构如下:

 

 

User.class 

package com.example.mycontentprovider.pojo;

public class User {
    private int id;
    private String userName;
    private String password;
    private String sex;
    private int age;

    public User() {

    }

    public User(int id, String userName, String password, String sex, int age) {
        this.id = id;
        this.userName = userName;
        this.password = password;
        this.sex = sex;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}

Constants.class

package com.example.mycontentprovider.utils;

public class Constants {

    public static final String DB_NAME = "provider.db";

    public static final String FILED_ID = "_id";

    public static final int DB_VERSION = 1;

    public static final String DB_TABLE_NAME = "user";
    
}
UserDataBaseHelper.class
package com.example.mycontentprovider.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import androidx.annotation.Nullable;

import com.example.mycontentprovider.utils.Constants;

public class UserDataBaseHelper extends SQLiteOpenHelper {

    //String name是數據庫名,沒有這個數據庫的話就會創建
    public UserDataBaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        Log.e("創建數據庫: ","**************************************************");
        //建表
        String createSql = "create table "+
                            Constants.DB_TABLE_NAME +
                            "(" + Constants.FILED_ID +
                            " integer primary key autoincrement,userName varchar(30),password varchar(30),sex varchar(3),age integer)";
        sqLiteDatabase.execSQL(createSql);
        Log.e("創建數據庫表: ","**************************************************");

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int olderVersion, int newVersion) {

    }
}

IUserDao.interface

package com.example.mycontentprovider.dao;

import com.example.mycontentprovider.pojo.User;

import java.util.List;

public interface IUserDao {
    //添加用戶
    int addUser(User user);

    //刪除用戶
    int delUserByid(int id);

    //更新用戶
    int updateUser(User user);

    //得到用戶
    User getUserById(int id);

    //查詢所有用戶
    List<User> allUser();
}

UserDaoImpl.class

package com.example.mycontentprovider.dao;

import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.example.mycontentprovider.db.UserDataBaseHelper;
import com.example.mycontentprovider.pojo.User;
import com.example.mycontentprovider.utils.Constants;

import java.util.List;

public class UserDaoImpl implements IUserDao{

    UserDataBaseHelper helper;

    public UserDaoImpl(Context context) {
            //创建数据库以及建表
            helper = new UserDataBaseHelper(context,Constants.DB_NAME,null,Constants.DB_VERSION);
    }

    @Override
    public int addUser(User user) {
        SQLiteDatabase writableDatabase = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("userName",user.getUserName());
        values.put("sex",user.getSex());
        values.put("password",user.getPassword());
        values.put("age",user.getAge());
        writableDatabase.insert(Constants.DB_TABLE_NAME,null,values);
        writableDatabase.close();
        return 0;
    }

    @Override
    public int delUserByid(int id) {
        SQLiteDatabase writableDatabase = helper.getWritableDatabase();
        int deleteResult = writableDatabase.delete(Constants.DB_TABLE_NAME, Constants.FILED_ID + "= ?", new String[]{id + ""});
        writableDatabase.close();
        return deleteResult;
    }

    @Override
    public int updateUser(User user) {
        SQLiteDatabase writableDatabase = helper.getWritableDatabase();
        //根据id更新内容
        ContentValues values = new ContentValues();
        values.put("userName",user.getUserName());
        values.put("sex",user.getSex());
        values.put("password",user.getPassword());
        values.put("age",user.getAge());
        int result = writableDatabase.update(Constants.DB_TABLE_NAME, values, Constants.FILED_ID + "= ?", new String[]{String.valueOf(user.getId())});
        writableDatabase.close();
        return result;
    }

    @SuppressLint("Range")
    @Override
    public User getUserById(int id) {
        SQLiteDatabase writableDatabase = helper.getWritableDatabase();
        String sql = "select * from "+Constants.DB_TABLE_NAME+" where " + Constants.FILED_ID + " = ?";
        Cursor cursor = writableDatabase.rawQuery(sql, new String[]{id + ""});
        User user = null;
        while (cursor.moveToNext()) {

            user = new User();

            user.setId(id);
            //取姓名那一列
            String userName = cursor.getString(cursor.getColumnIndex("userName"));
            user.setUserName(userName);

            //取性别那一列
            String sex = cursor.getString(cursor.getColumnIndex("sex"));
            user.setSex(sex);
            //取密码那一列
            String password = cursor.getString(cursor.getColumnIndex("password"));
            user.setSex(password);
            //取年龄那一列
            int age = cursor.getInt(cursor.getColumnIndex("age"));
            user.setAge(age);
        }
        writableDatabase.close();
        return user;
    }

    @Override
    public List<User> allUser() {
        SQLiteDatabase writableDatabase = helper.getWritableDatabase();
        Cursor cursor = writableDatabase.query(Constants.DB_TABLE_NAME, null, null, null, null, null, null);
        while (cursor.moveToNext()) {
            int anInt = cursor.getInt(0);
            String name = cursor.getString(1);
            Log.e("id: ", String.valueOf(anInt));
            Log.e("name: ", String.valueOf(name));
        }
        return null;
    }
}

MainActivity.class


package com.example.mycontentprovider;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import com.example.mycontentprovider.dao.UserDaoImpl;
import com.example.mycontentprovider.pojo.User;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建数据库以及建表
        UserDaoImpl userDao = new UserDaoImpl(this);
        //添加用户
        //userDao.addUser(new User(1,"zouhao","1223","男",250));
        //userDao.addUser(new User(2,"zouhao2","12234","男",2501));
        //跟新数据库数据
        userDao.updateUser(new User(2,"libai","3245","女",43));
        //获取全部用户
        userDao.allUser();
        //根据id查询用户
        User userById = userDao.getUserById(6);
        Log.e("getUserByID", String.valueOf(userById));
    }
}

 

 
posted @ 2021-09-16 16:54  涂妖教  阅读(62)  评论(0)    收藏  举报