如何在 android studio 的不同活动中将数据插入单行 sqlite 数据库中
How to Insert data in a single row of database of sqlite from different activites in android studio
我做了一个帮手class,名字叫baby
public class Baby {
private int baby_id;
private String baby_name;
private String birthdate;
private String gender;
private String age;
private String height;
private String weight;
private String sleep;
private String medicate;
public int getBaby_id() {
return baby_id;
}
public void setBaby_id(int baby_id) {
this.baby_id = baby_id;
}
public String getBaby_name() {
return baby_name;
}
public void setBaby_name(String baby_name) {
this.baby_name = baby_name;
}
public String getBirthdate() {
return birthdate;
}
public void setBirthdate(String birthdate) {
this.birthdate = birthdate;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getSleep() {
return sleep;
}
public void setSleep(String sleep) {
this.sleep = sleep;
}
public String getMedicate() {
return medicate;
}
public void setMedicate(String medicate) {
this.medicate = medicate;
}
}
和数据库activity
private static final int DATABASE_VERSION = 10;
private static final String DATABASE_NAME = "BabyDetails.db";
private static final String TABLE_BABY = "baby";
private static final String COLUMN_BABY_ID = "baby_id";
private static final String COLUMN_BABY_NAME = "baby_name";
private static final String COLUMN_BABY_DATE = "birthdate";
private static final String COLUMN_BABY_GENDER = "gender";
private static final String COLUMN_BABY_AGE = "Age_group";
private static final String COLUMN_BABY_HEIGHT = "height";
private static final String COLUMN_BABY_WEIGHT = "weight";
private static final String COLUMN_BABY_SLEEP = "sleep";
private static final String COLUMN_BABY_MEDICATE = "medicate";
private String CREATE_BABY_TABLE = "CREATE TABLE "+ TABLE_BABY + "(" +
COLUMN_BABY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT , " + COLUMN_BABY_NAME + " TEXT, "
+ COLUMN_BABY_DATE + " TEXT, " + COLUMN_BABY_GENDER + " TEXT, " + COLUMN_BABY_AGE + " TEXT, "
+COLUMN_BABY_HEIGHT+ " TEXT, " + COLUMN_BABY_WEIGHT + " TEXT, " +COLUMN_BABY_SLEEP+ " TEXT, "
+COLUMN_BABY_MEDICATE+ " TEXT " + ")";
private String DROP_BABY_TABLE = "DROP TABLE IF EXISTS " + TABLE_BABY;
public DbaseBaby( Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BABY_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_BABY_TABLE);
onCreate(db);
}
public void addBaby(@NonNull Baby baby){
SQLiteDatabase db= this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_BABY_NAME,baby.getBaby_name());
values.put(COLUMN_BABY_DATE,baby.getBirthdate());
values.put(COLUMN_BABY_GENDER,baby.getGender());
values.put(COLUMN_BABY_AGE,baby.getAge());
values.put(COLUMN_BABY_HEIGHT,baby.getHeight());
values.put(COLUMN_BABY_WEIGHT,baby.getWeight());
values.put(COLUMN_BABY_SLEEP,baby.getSleep());
values.put(COLUMN_BABY_MEDICATE,baby.getMedicate());
db.insert(TABLE_BABY,null, values);
db.close();
}
public Cursor getData(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(" SELECT * FROM " + TABLE_BABY , null );
return cursor;
}
以及我所在的注册 activity 插入姓名、生日、性别和年龄
try {
baby.setBaby_name(et_baby.getText().toString());
baby.setBirthdate(et_date.getText().toString());
baby.setGender(radioButton.getText().toString());
baby.setAge("0-3 years");
dbaseBaby.addBaby(baby);
} catch (Exception e) {
e.printStackTrace();
}
我想插入高度的活动是
dbaseBaby = new DbaseBaby( Heightone.this);
baby = new Baby();
try {
baby.setHeight(height.getText().toString()+ "cm");
dbaseBaby.addBaby(baby);
} catch (Exception e) {
e.printStackTrace();
}
但我无法将数据插入单行,来自注册 activity 的数据存储在第一行,高度 activity 的高度存储在第二行行的其余列都设置为 Null。知道我哪里做错了。
你好,
在第一个 activity 中,您正在创建一个婴儿对象并将其插入数据库(没有高度属性)在第二个中 activity 您正在创建另一个婴儿对象并将其插入数据库(这次只是高度属性和其他为空)实际上你 运行 两个独立的插入命令 data-base!!(数据库应该如何理解你需要为最后插入的对象添加高度属性?)
解决方法:
在第二个 activity 中,你应该更新以前添加的记录(在第一个 activity 中)而不是在数据库中添加一个新的 baby-item (在第一个 activity 中使用最后添加的项目的 ID 并更新它第二行 activity)
已编辑:
每次你向 DB addBaby 方法添加新项目时 return 一个 long 值作为 table 中添加项目的 id 你需要抓住它所以这个新的 addBaby() 由你在 SQLiteOpenHelper class:
public Long addBaby(@NonNull Baby baby){
SQLiteDatabase db= this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_BABY_NAME,baby.getBaby_name());
values.put(COLUMN_BABY_DATE,baby.getBirthdate());
values.put(COLUMN_BABY_GENDER,baby.getGender());
values.put(COLUMN_BABY_AGE,baby.getAge());
values.put(COLUMN_BABY_HEIGHT,baby.getHeight());
values.put(COLUMN_BABY_WEIGHT,baby.getWeight());
values.put(COLUMN_BABY_SLEEP,baby.getSleep());
values.put(COLUMN_BABY_MEDICATE,baby.getMedicate());
Long id = db.insert(TABLE_BABY,null, values);
db.close();
return id;
}
每次您将新宝宝添加到 table 时,像这样捕获 returned id:
try {
baby.setBaby_name(et_baby.getText().toString());
baby.setBirthdate(et_date.getText().toString());
baby.setGender(radioButton.getText().toString());
baby.setAge("0-3 years");
Long id = dbaseBaby.addBaby(baby);
} catch (Exception e) {
e.printStackTrace();
}
当导航到 second activity 时,将 retrieved id 放入 intent并发送到下一个 activity:
Intent intent = new Intent(this,SecondActivity.class);
intent.putExtra("added_id",id);
startActivity(intent);
现在在你的 SQLiteOpenHelper class 中添加 updateHeight 方法 :
public void updateHeight(Long id, String height) {
sqLiteDatabase = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_BABY_HEIGHT,height);
sqLiteDatabase.update(TableName, cv, "baby_id = ?", new String[]{String.valueOf(id)});
}
最后,您可以在 秒 activity 从 intent 中读取 id 并通过此 id,更新最后插入的行并为其添加高度属性:
dbaseBaby = new DbaseBaby(Heightone.this);
baby = new Baby();
Long id = getIntent().getLongExtra("added_id", 0);
String height = "50cm";
dbaseBaby.updateHeight(id, height);
我做了一个帮手class,名字叫baby
public class Baby {
private int baby_id;
private String baby_name;
private String birthdate;
private String gender;
private String age;
private String height;
private String weight;
private String sleep;
private String medicate;
public int getBaby_id() {
return baby_id;
}
public void setBaby_id(int baby_id) {
this.baby_id = baby_id;
}
public String getBaby_name() {
return baby_name;
}
public void setBaby_name(String baby_name) {
this.baby_name = baby_name;
}
public String getBirthdate() {
return birthdate;
}
public void setBirthdate(String birthdate) {
this.birthdate = birthdate;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getSleep() {
return sleep;
}
public void setSleep(String sleep) {
this.sleep = sleep;
}
public String getMedicate() {
return medicate;
}
public void setMedicate(String medicate) {
this.medicate = medicate;
}
}
和数据库activity
private static final int DATABASE_VERSION = 10;
private static final String DATABASE_NAME = "BabyDetails.db";
private static final String TABLE_BABY = "baby";
private static final String COLUMN_BABY_ID = "baby_id";
private static final String COLUMN_BABY_NAME = "baby_name";
private static final String COLUMN_BABY_DATE = "birthdate";
private static final String COLUMN_BABY_GENDER = "gender";
private static final String COLUMN_BABY_AGE = "Age_group";
private static final String COLUMN_BABY_HEIGHT = "height";
private static final String COLUMN_BABY_WEIGHT = "weight";
private static final String COLUMN_BABY_SLEEP = "sleep";
private static final String COLUMN_BABY_MEDICATE = "medicate";
private String CREATE_BABY_TABLE = "CREATE TABLE "+ TABLE_BABY + "(" +
COLUMN_BABY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT , " + COLUMN_BABY_NAME + " TEXT, "
+ COLUMN_BABY_DATE + " TEXT, " + COLUMN_BABY_GENDER + " TEXT, " + COLUMN_BABY_AGE + " TEXT, "
+COLUMN_BABY_HEIGHT+ " TEXT, " + COLUMN_BABY_WEIGHT + " TEXT, " +COLUMN_BABY_SLEEP+ " TEXT, "
+COLUMN_BABY_MEDICATE+ " TEXT " + ")";
private String DROP_BABY_TABLE = "DROP TABLE IF EXISTS " + TABLE_BABY;
public DbaseBaby( Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BABY_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_BABY_TABLE);
onCreate(db);
}
public void addBaby(@NonNull Baby baby){
SQLiteDatabase db= this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_BABY_NAME,baby.getBaby_name());
values.put(COLUMN_BABY_DATE,baby.getBirthdate());
values.put(COLUMN_BABY_GENDER,baby.getGender());
values.put(COLUMN_BABY_AGE,baby.getAge());
values.put(COLUMN_BABY_HEIGHT,baby.getHeight());
values.put(COLUMN_BABY_WEIGHT,baby.getWeight());
values.put(COLUMN_BABY_SLEEP,baby.getSleep());
values.put(COLUMN_BABY_MEDICATE,baby.getMedicate());
db.insert(TABLE_BABY,null, values);
db.close();
}
public Cursor getData(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(" SELECT * FROM " + TABLE_BABY , null );
return cursor;
}
以及我所在的注册 activity 插入姓名、生日、性别和年龄
try {
baby.setBaby_name(et_baby.getText().toString());
baby.setBirthdate(et_date.getText().toString());
baby.setGender(radioButton.getText().toString());
baby.setAge("0-3 years");
dbaseBaby.addBaby(baby);
} catch (Exception e) {
e.printStackTrace();
}
我想插入高度的活动是
dbaseBaby = new DbaseBaby( Heightone.this);
baby = new Baby();
try {
baby.setHeight(height.getText().toString()+ "cm");
dbaseBaby.addBaby(baby);
} catch (Exception e) {
e.printStackTrace();
}
但我无法将数据插入单行,来自注册 activity 的数据存储在第一行,高度 activity 的高度存储在第二行行的其余列都设置为 Null。知道我哪里做错了。
你好,
在第一个 activity 中,您正在创建一个婴儿对象并将其插入数据库(没有高度属性)在第二个中 activity 您正在创建另一个婴儿对象并将其插入数据库(这次只是高度属性和其他为空)实际上你 运行 两个独立的插入命令 data-base!!(数据库应该如何理解你需要为最后插入的对象添加高度属性?)
解决方法: 在第二个 activity 中,你应该更新以前添加的记录(在第一个 activity 中)而不是在数据库中添加一个新的 baby-item (在第一个 activity 中使用最后添加的项目的 ID 并更新它第二行 activity)
已编辑:
每次你向 DB addBaby 方法添加新项目时 return 一个 long 值作为 table 中添加项目的 id 你需要抓住它所以这个新的 addBaby() 由你在 SQLiteOpenHelper class:
public Long addBaby(@NonNull Baby baby){
SQLiteDatabase db= this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_BABY_NAME,baby.getBaby_name());
values.put(COLUMN_BABY_DATE,baby.getBirthdate());
values.put(COLUMN_BABY_GENDER,baby.getGender());
values.put(COLUMN_BABY_AGE,baby.getAge());
values.put(COLUMN_BABY_HEIGHT,baby.getHeight());
values.put(COLUMN_BABY_WEIGHT,baby.getWeight());
values.put(COLUMN_BABY_SLEEP,baby.getSleep());
values.put(COLUMN_BABY_MEDICATE,baby.getMedicate());
Long id = db.insert(TABLE_BABY,null, values);
db.close();
return id;
}
每次您将新宝宝添加到 table 时,像这样捕获 returned id:
try {
baby.setBaby_name(et_baby.getText().toString());
baby.setBirthdate(et_date.getText().toString());
baby.setGender(radioButton.getText().toString());
baby.setAge("0-3 years");
Long id = dbaseBaby.addBaby(baby);
} catch (Exception e) {
e.printStackTrace();
}
当导航到 second activity 时,将 retrieved id 放入 intent并发送到下一个 activity:
Intent intent = new Intent(this,SecondActivity.class);
intent.putExtra("added_id",id);
startActivity(intent);
现在在你的 SQLiteOpenHelper class 中添加 updateHeight 方法 :
public void updateHeight(Long id, String height) {
sqLiteDatabase = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_BABY_HEIGHT,height);
sqLiteDatabase.update(TableName, cv, "baby_id = ?", new String[]{String.valueOf(id)});
}
最后,您可以在 秒 activity 从 intent 中读取 id 并通过此 id,更新最后插入的行并为其添加高度属性:
dbaseBaby = new DbaseBaby(Heightone.this);
baby = new Baby();
Long id = getIntent().getLongExtra("added_id", 0);
String height = "50cm";
dbaseBaby.updateHeight(id, height);