簡體   English   中英

SQLite問題與獲取特定列的較高值

[英]SQLite problem with getting the higher value of a specific column

我正在創建一個航班計划應用程序,用戶可以在其中創建多個航班,每個航班都有自己的費用報告。 對於用戶創建的每個航班,每個用戶都會有一個按鈕,可以AddExpenses.class按鈕打開另一個名為AddExpenses.class活動,並且該類用戶將能夠為該特定旅程添加多個費用。

由於這種解釋很長,可能會有點混亂,因此我使用的是指該表。 例如,(航班)將引用航班表。

我有兩個表,一個表是(航班),另一個表是(交易)。 每個檔次可以有很多交易記錄(交易),但是當用戶查看(交易)中的所有內容時,我無法顯示主鍵,因為對於(交易)表,主鍵名為transactions_id,並且它會自動遞增。

這是一個問題,因為如果FIRST廣告投放中添加了3條交易記錄,則將在(transactions)表中添加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);

            }
        });
    }

現在,我從我的MainActivity傳遞了Flightposition_id,該ID將RecyclerView.Adapter擴展到“ AddExpenses”類:

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中添加到我的“按鈕”中的內容嗎? 我知道它的解釋很長,可能會造成混亂,感謝您花一百萬時間閱讀!

因此,您需要執行以下查詢:

"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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM