java - 获取特定列的更高值的 SQLite 问题
问题描述
我正在创建一个飞行计划应用程序,用户可以在其中创建多个航班,每个航班都有自己的费用报告。对于用户创建的每个航班,他们每个人都有一个按钮,可以按下该按钮来打开另一个调用的活动AddExpenses.class
,并且从该类用户将能够为该特定旅行添加多项费用。
由于这个解释很长并且会有点混乱,我使用的“()”指的是表格。例如,(航班)将引用航班表。
我有两张表,一张是(航班),另一张是(交易)。每个航班可以有许多交易记录(交易),但是当用户从(交易)查看所有内容时,我无法显示主键,因为对于(交易)表,主键名为 transactions_id 并且它自动递增。
这是一个问题,因为如果 FIRST 航班已添加 3 条交易记录,则将在 (transactions) 表中添加 3 行,其中 transaction_id 为 1、2、3。并且当用户从第二个航班添加交易时,作为主键的 transaction_id 不会从 1 开始,而是从 4 继续......等等。
所以我试图在我的(事务)表中添加 2 个额外的列,即 id_shown 和 flightposition_id。如果用户添加来自不同航班的交易记录,“id_shown”列将循环并再次从 1 开始。并且“flightposition_id”只显示(交易)中的哪些交易记录行位于(航班)中的特定“flight_id”下,以便当他们查看来自特定航班的记录时,我可以在(交易)中显示正确的交易记录.
这是我的 DatabaseHelper 类中的 onCreate 方法,它为我的(事务)表扩展了 SQLiteOpenHelper:-
db.execSQL("CREATE TABLE " + TRANSACTION_TABLE + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, AMOUNT DOUBLE NOT NULL, CATEGORY TEXT NOT NULL, NOTE TEXT, TRANSACTION_ID TEXT NOT NULL, FLIGHT_ID INTEGER NOT NULL, FOREIGN KEY (FLIGHT_ID) REFERENCES FLIGHT_TABLE(id) )");
这是我的“AddExpenses”类中添加更多交易的添加按钮:-
public void AddTransactions (final String flightposition_id) {
button_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myDb.getTransactionData()
boolean isInserted = myDb.insertTransactionData(amount.getText().toString(), category, note.getText().toString(), transaction_id, flightposition_id);
if (isInserted = true) {
Toast.makeText(AddExpenses.this, "Transaction Inserted !", Toast.LENGTH_LONG).show();
clearText();
}
else {
Toast.makeText(AddExpenses.this, "Transaction not Inserted !", Toast.LENGTH_LONG).show();
}
textView_id.setText(transaction_id);
}
});
}
现在,我通过从将 RecyclerView.Adapter 扩展到“AddExpenses”类的 MainActivity 传递它来获取 flightposition_id :-
button_addexpenses.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Context context = v.getContext();
Intent intent = new Intent(context, AddExpenses.class);
intent.putExtra("Position", getAdapterPosition());
context.startActivity(intent);
}
});
一切工作正常我现在只有一个问题,如果我试图从第二个航班添加交易记录,我希望我的应用程序检查(交易)中包含列“flightposition_id”的所有行,其值为与我所处的位置相同(第二次飞行意味着位置为“1”)。
对于所有(事务)行的 flight_position 为“1”,我希望应用程序将我的下一个事务添加比最高或最新的“id_shown”值高一个整数。如果最高为 4,则计数器将 +1 使其变为 5,依此类推。
你能指导我并给我一个关于我应该在 AddExpenses.class 中添加“按钮”的简短代码吗?我知道它的解释很长,可能会令人困惑,感谢一百万花时间阅读!
解决方案
所以你需要执行这样的查询:
"SELECT MAX(transaction_id) FROM transactions WHERE flight_id=" + position
如果我理解正确,
并获取已存储在数据库中的最大数量,则将其递增 1 并保存新行。
编辑:
Cursor transactionlatestid = myDb.getLatestTransactionID(temp_position);
if (transactionlatestid.getCount() == 0) {
temp_id = 1;
} else {
transactionlatestid.moveToFirst();
temp_id = transactionlatestid.getInt(0);
temp += 1;
}
String transaction_id = String.valueOf(temp_id);
是它temp
还是temp_id
你想增加?
推荐阅读
- javascript - 为什么 webpack 5 忽略一个文件中的 NODE_ENV,但读取另一个文件
- c# - 通过变量作为字符串的布尔类型的 NPOI C# SetCellValue()
- elixir - 会话到期后,凤凰服务器主索引页面无法正确重定向
- r - 组合多个矩阵并应用百分比和括号格式
- sql-server - 如何将列值与声明的变量进行比较
- python - 如何解决 IPython 中 Selenium 的“进程意外关闭,状态为 11”?
- java - 更新页面和单选按钮在 html 中消失
- xmonad - 在 xmonad 中,有些键绑定有效,有些则无效?
- docker - Docker Compose - 将挂载目标设置为 dockerfile 中指定的卷
- r - 从 mutate_at() 更改为 mutate(across()) 函数问题