![](/img/trans.png)
[英]insert photo to same row in sqlite database from different class in Android
[英]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;
}
}
和数据库活动
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;
}
以及我插入姓名、生日、性别和年龄的注册活动
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();
}
但是我无法将数据插入一行,注册活动的数据存储在第一行,高度活动的高度存储在第二行 rest 的列设置为 Null。知道在哪里我做错了。
你好,
在第一个活动中你正在创建一个 object 的婴儿并将它插入到数据库(没有高度属性)在第二个活动中你正在创建另一个 object 表格婴儿并将它插入到数据库中(这次只是高度属性和其他为空)实际上你为数据库运行两个独立的插入命令?!(数据库应该如何理解您需要为最后插入的对象添加高度属性?)
解决方案:在第二个活动中,您应该更新以前添加的记录(在第一个活动中)而不是在数据库中添加新的婴儿项目(在第一个活动中使用最后添加的项目的 ID 并在第二个活动中更新该行)
编辑:
每次将新项目添加到 DB addBaby 方法时,都会返回一个长值作为表中添加项目的 ID,您需要捕获它,因此您在SQLiteOpenHelper class中的这个新的addBaby() :
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;
}
每次您将新婴儿添加到表中时,都会像这样返回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();
}
当导航到第二个活动时,将检索到的ID放入意图中并发送到下一个活动:
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)});
}
最后,您可以在第二个活动中从 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.