首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取特定列的较高值的SQLite问题

获取特定列的较高值的SQLite问题
EN

Stack Overflow用户
提问于 2018-10-16 23:44:26
回答 1查看 45关注 0票数 1

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

因为这个解释很长,而且会让人有点困惑,所以我使用的"()“是指表格。例如,(航班)将引用航班表。

我有两个表,一个是(航班),另一个是(交易)。每个航班可以有许多事务记录(事务),但是当用户查看all from (事务)时,我不能显示主键,因为对于(事务)表,主键被命名为transactions_id,它会自动递增。

这是一个问题,因为如果第一个航班已经添加了3个事务记录,那么将在(事务)表中添加3行,transaction_id为1,2,3。当用户从第二个航班添加事务时,作为主键的transaction_id将不会从1开始,而是从4开始...诸若此类。

因此,我尝试在我的(transactions)表中添加两个额外的列,即id_shown和flightposition_id。如果用户添加来自不同航班的交易记录,"id_shown“列将再次循环并从1开始。"flightposition_id“只显示(transactions)中的哪些事务记录行在(航班)中的那个特定"flight_id”下,这样当他们查看来自特定航班的记录时,我就可以在(transactions)中显示正确的事务记录。

这是我的DatabaseHelper类中的onCreate方法,它扩展了我的(transactions)表的SQLiteOpenHelper :-

代码语言:javascript
复制
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“类中的add按钮,用于添加更多事务:-

代码语言:javascript
复制
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:

代码语言:javascript
复制
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);
            }
        });

一切都很好我现在只有一个问题,如果我试图添加第二次飞行的交易记录,我希望我的应用程序检查(transactions)中的所有行,这些行的列"flightposition_id“的值与我所在的位置相同(第二次飞行意味着位置为"1")。

对于flight_position为"1“的所有(事务)行,我希望应用程序将我的下一个事务添加到比最高或最新的"id_shown”值高一个整数。如果最高值是4,则计数器将+1变为5,依此类推。

你能指导我,并给我一个简短的代码,我应该添加到我的添加“按钮”在AddExpenses.class?我知道这是一个很长的解释,可能会让人困惑,非常感谢你抽出时间来阅读!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 00:13:46

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

代码语言:javascript
复制
"SELECT MAX(transaction_id) FROM transactions WHERE flight_id=" + position 

如果我没理解错的话,

并获得已经存储在db中的最大数字,然后将其递增1并保存新行。

编辑:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52839313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档