【发布时间】:2021-10-07 22:27:45
【问题描述】:
我正在创建一个 bmi 应用程序。这是非常简单的应用程序,用户必须输入姓名、体重和身高。然后,它将插入数据库名称 bmi。用户单击按钮计算后,它将根据用户输入的名称计算 bmi。自从我上次尝试以来我如何检索它是他们从数据库中读取第一行。如何检索最后一行?
代码如下:
DataHelper.java
public class DataHelper extends SQLiteOpenHelper {
//Database name
private static final String DATABASE_NAME = "assignment.db";
//Database version
private static final int DATABASE_VERSION = 1;
//Create constructor for Data Helper
public DataHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table bmi(name text primary key, weight double null, height double null);";
Log.d("Data", "onCreate: " + sql);
db.execSQL(sql);
}
//create method to upgrade database version if database exist
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
CalculateActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculate);
dbHelper = new DataHelper(this);
text1 = (EditText) findViewById(R.id.name);
text2 = (EditText)findViewById(R.id.height);
text3 = (EditText)findViewById(R.id.weight);
ton1 = (Button) findViewById(R.id.btnGo);
ton1.setOnClickListener(arg0 -> {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL("insert into bmi(name, weight, height) values ('" +
text1.getText().toString() + "','" +
text2.getText().toString() + "','" +
text3.getText().toString() + "')");
Toast.makeText(getApplicationContext(), "Data Successfully added", Toast.LENGTH_SHORT).show();
Intent i = new Intent(CalculateActivity.this, ResultActivity.class);
startActivity(i);
});
}
ResultActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
dbHelper = new DataHelper(this);
text2 = (EditText) findViewById(R.id.height);
text3 = (EditText)findViewById(R.id.weight);
textname = (EditText) findViewById(R.id.name);
textTotal = (TextView) findViewById(R.id.txtBMITotal);
textBMI = (TextView) findViewById(R.id.txtBMI);
textRisk = (TextView)findViewById(R.id.txtRisk);
bye = (Button) findViewById(R.id.btnBye);
SQLiteDatabase db = dbHelper.getReadableDatabase();
cursor = db.rawQuery("SELECT * FROM bmi ORDER BY name DESC LIMIT 1", null);
cursor.moveToFirst();
if (cursor.getCount() > 0) {
cursor.moveToPosition(0);
//below i just want to know whether it retrieved or not
textTotal.setText(cursor.getString(0).toString());
textBMI.setText(cursor.getString(1).toString());
textRisk.setText(cursor.getString(2).toString());
}
}
【问题讨论】:
-
如果你插入了它,为什么你必须通过运行查询来阅读它?
-
我想通过体重和身高计算bmi来显示bmi的总和,这就是为什么我想阅读它,实际上,textTotal,textBMI和textRisk是textview,可以显示当计算体重指数。
-
goose 的意思是先计算,再插入。你在那里有价值观。为什么插入它,然后再次从数据库中取出?冗余。
-
无论如何,如果你想找到最后插入的 id,你通常需要一个时间戳列。但在这种情况下,它完全没有必要,因为您已经可以访问数据库之外的数据。
-
@nerdgirl 你真的需要使用数据库吗?如果您需要即时计算 bmi,那么您不需要存储任何内容。如果您只需要跟踪一个用户的 bmi,那么您可以使用共享首选项,如果您想为不同的名称存储多个 bmi 值,您只需要使用 db,在这种情况下,您可以在存储之前先计算 bmi,就像 g00se 和 YHStan 说的。