Проблема SQLite с получением более высокого значения определенного столбца - PullRequest
0 голосов
/ 16 октября 2018

Я создаю приложение планирования полета, в котором пользователи могут создавать несколько рейсов, каждый из которых имеет свой собственный отчет о расходах.Для каждого рейса, созданного пользователем, у каждого из них будет кнопка, которую можно нажать, чтобы открыть другое действие под названием AddExpenses.class, и из этого класса пользователь сможет добавить несколько расходов к этой конкретной поездке.

Поскольку это объяснение длинное и немного сбивает с толку, я использую "()" со ссылкой на таблицу.Например, (полеты) будут относиться к таблице полетов.

У меня есть две таблицы, одна из которых (полеты), а другая (транзакции).У каждого рейса может быть много записей транзакций (транзакций), но я не могу показать первичный ключ, когда пользователь просматривает все из (транзакций), потому что для таблицы (транзакций) первичный ключ называется Transactions_id и он автоинкрементен.

Это проблема, потому что если в ПЕРВОМ рейсе есть 3 записи о транзакциях, которые были добавлены, в таблицу (транзакции) будет добавлено 3 строки с транзакцией_id 1,2,3.И когда пользователь добавляет транзакции из ВТОРОГО рейса, то идентификаторaction_id, который является первичным ключом, не будет начинаться с 1, а продолжится с 4 ... и так далее.

Итак, я пытаюсь добавить 2 дополнительных столбца в мою таблицу (транзакции), которая называется id_shown и flightposition_id.Столбец «id_shown» будет повторяться и начинаться с 1 снова, если пользователь добавляет записи транзакций из другого рейса.И «flightposition_id» просто показывает, какие строки записей транзакций в (транзакции) находятся под этим конкретным «flight_id» в (полетов), чтобы я мог отображать правильные записи транзакций в (транзакциях), когда они просматривают записи из определенного рейса.

Это метод onCreate в моем классе DatabaseHelper, который расширяет 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);

            }
        });
    }

На данный момент я получаю flightposition_id, передавая его из MainActivity, расширяющего 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);
            }
        });

Все работает довольно хорошоУ меня сейчас только одна проблема: если я пытаюсь добавить записи транзакций из ВТОРОГО рейса, я хочу, чтобы мое приложение проверяло все строки в (транзакции), которые имеют столбцы "flightposition_id" со значением, которое совпадает с позициейЯ нахожусь (второй полет означает позицию "1").

И свсе строки (транзакции) со значением flight_position равным «1», я хочу, чтобы приложение добавило мою следующую транзакцию на целое число выше, чем самое высокое или последнее значение «id_shown».Если наибольшее значение равно 4, то счетчик будет +1, делая его 5 и так далее.

Можете ли вы направить меня и дать краткий код того, что я должен добавить к своей кнопке добавления в AddExpenses.class?Я знаю, что это длинное объяснение и, возможно, сбивает с толку, спасибо миллион за то, что нашли время прочитать!

1 Ответ

0 голосов
/ 16 октября 2018

Итак, вам нужно выполнить запрос, подобный этому:

"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 вы хотите увеличить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...