Day
/**
* 构造
* @param context 上下文
* @param name 数据库名称
* @param factory 创建数据的工厂对象
* @param version 数据版本号
*/
public MySqlHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 注意:onCreate方法只会执行一次,如果想要修改表的字段,
* 修改oncreate方法的话是不行的,需要删除之前生成的数据库
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table user(_id integer primary key autoincrement,name varchar(20))");
}
/**
* 更新数据 --- 如果数据库的 版本号发生变化, 执行该方法 --- 执行多次
* @param db
* @param oldVersion 老版本号
* @param newVersion 新版本号
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public void insert(User user){
//方法1,占位符的形式
String sql = "insert into user(name,age,address) values(?,?,?)";
// db.execSQL(sql,new Object[]{user.getName(),user.getAge(),user.getAddress()});
//方法2,系统的insert方法
ContentValues contentValues = new ContentValues();
contentValues.put("name",user.getName());
contentValues.put("age",user.getAge());
contentValues.put("address",user.getAddress());
db.insert("user",null,contentValues);
}
// 注意 参数不在是user,而是要跟新的字段和字段值
public void update(String age , int id){
//方法1
String sql = "update user set age = ? where _id=?";
// db.execSQL(sql,new Object[]{user.getAge(),user.get_id()});
//方式2
ContentValues contentValues = new ContentValues();
contentValues.put("age",age);
db.update("user",contentValues,"_id = ?",new String[]{id+""});
}
public List<User> query() {
ArrayList<User> users = new ArrayList<>();
Cursor user = db.query("user", null, null, null, null, null, null);
while(user.moveToNext()){
//1,cursor.getColumnIndex("Name") 通过列名 获取所在列的编号
//2,cursor.getString(列的编号); 通过列的编号, 得到该列的数据
//不管id用不用,都要查,并且固定格式是 最好的格式 _id (有一个适配器强制的要求)
String id = user.getString(user.getColumnIndex("_id"));
String address = user.getString(user.getColumnIndex("address"));
String name = user.getString(user.getColumnIndex("name"));
String age = user.getString(user.getColumnIndex("age"));
User user1 = new User(Integer.parseInt(id), name, Integer.parseInt(age), address);
users.add(user1);
}
return users;
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button insertId;
private Button selectId;
private Button updateId;
private Button delId;
private UserDao userDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
insertId = findViewById(R.id.insert_id);
selectId = findViewById(R.id.select_id);
updateId = findViewById(R.id.update_id);
delId = findViewById(R.id.del_id);
insertId.setOnClickListener(this);
selectId.setOnClickListener(this);
updateId.setOnClickListener(this);
delId.setOnClickListener(this);
userDao = new UserDao(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.insert_id:
User user = new User();
user.setAge(17);
user.setName("冯");
user.setAddress("北京");
userDao.insert(user);
break;
case R.id.update_id:
userDao.update("20",1);
break;
case R.id.del_id:
int delete = userDao.delete("2");
Toast.makeText(this, delete+"", Toast.LENGTH_SHORT).show();
break;
case R.id.select_id:
List<User> query = userDao.query();
Toast.makeText(this, query.get(0).getName(), Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
public class UserDao {
private SQLiteDatabase db;
//通过构造创建一个db;
public UserDao(Context context){
MySqlHelper mySqlHelper = new MySqlHelper(context,"user.db",null,3);
//可读可写.磁盘满了在尝试打开.(推荐使用)
db = mySqlHelper.getReadableDatabase();
//可读可写.磁盘满了,打开报错.
// SQLiteDatabase writableDatabase = mySqlHelper.getWritableDatabase();
}
public void insert(User user){
//方法1,占位符的形式
String sql = "insert into user(name,age,address) values(?,?,?)";
// db.execSQL(sql,new Object[]{user.getName(),user.getAge(),user.getAddress()});
//方法2,系统的insert方法
ContentValues contentValues = new ContentValues();
contentValues.put("name",user.getName());
contentValues.put("age",user.getAge());
contentValues.put("address",user.getAddress());
db.insert("user",null,contentValues);
}
public void update(String age , int id){
//方法1
String sql = "update user set age = ? where _id=?";
// db.execSQL(sql,new Object[]{user.getAge(),user.get_id()});
//方式2
ContentValues contentValues = new ContentValues();
contentValues.put("age",age);
db.update("user",contentValues,"_id = ?",new String[]{id+""});
}
//删除数据
public int delete(String id) {
//方式一:
String sql="delete from user where _id = ? ";
// db.execSQL(sql,new String[]{id});
//方式二:
int num = db.delete("user", "_id=?", new String[]{id});
return num;
}
//查询一组数据
public List<User> query() {
ArrayList<User> users = new ArrayList<>();
//方式1
String sql = "select * from user where _id = ?";
Cursor user = db.rawQuery(sql, new String[]{"50"});
//方式2
Cursor user = db.query("user", null, null, null, null, null, null);
while(user.moveToNext()){
//1,cursor.getColumnIndex("Name") 通过列名 获取所在列的编号
//2,cursor.getString(列的编号); 通过列的编号, 得到该列的数据
//不管id用不用,都要查,并且固定格式是 最好的格式 _id (有一个适配器强制的要求)
String id = user.getString(user.getColumnIndex("_id"));
String address = user.getString(user.getColumnIndex("address"));
String name = user.getString(user.getColumnIndex("name"));
String age = user.getString(user.getColumnIndex("age"));
User user1 = new User(Integer.parseInt(id), name, Integer.parseInt(age), address);
users.add(user1);
}
return users;
}
}