获得特定列的较高值的SQLite问题

时间:2018-10-16 15:44:26

标签: java android sqlite

我正在创建一个航班计划应用程序,用户可以在其中创建多个航班,每个航班都有自己的费用报告。对于用户创建的每个航班,每个用户都会有一个按钮,可以按此按钮来打开另一个名为AddExpenses.class的活动,并且该类用户将能够为该特定旅程增加多项费用。

由于这种解释很长,并且会使我使用的“()”有点儿混淆,因此它是指该表。例如,(航班)将引用航班表。

我有两个表,一个表是(航班),另一个表是(交易)。每个档次可以有很多交易记录(交易),但是当用户查看(交易)中的所有内容时,我无法显示主键,因为对于(交易)表,主键名为transactions_id,并且它会自动递增。

这是一个问题,因为如果FIRST广告投放中添加了3个交易记录,则将在(交易)表中添加3行,而transaction_id为1,2,3。 并且当用户从SECOND航班添加交易时,作为主键的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);

            }
        });
    }

现在,我通过将我的ReActiverView.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);
            }
        });

一切正常,现在我只遇到一个问题,如果我想从SECOND航班中添加交易记录,我希望我的应用检查(交易)中所有包含“ flightposition_id”列的行,值与我所在的位置相同(第二次飞行表示位置为“ 1”)。

对于Flight_position为“ 1”的所有(交易)行,我希望应用程序将我的下一个交易记录添加到比最高或最新“ id_shown”值高一个整数的位置。如果最高值为4,则计数器将+1使其变为5,依此类推。

您能指导我并给我一个简短的代码,告诉我应该在AddExpenses.class中添加到我的“按钮”中的内容吗?我知道它的解释很长,可能会造成混淆,谢谢您花一时间阅读!一百万!

1 个答案:

答案 0 :(得分:0)

因此,您需要执行如下查询:

"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