【问题标题】:How to add values to SQLite table column through button in activity如何通过活动中的按钮向 SQLite 表列添加值
【发布时间】:2022-01-05 06:42:19
【问题描述】:

我正在尝试向我的用户表中添加一个整数值。我要在哪里添加值取决于我传递给活动的用户的字符串值。

这是我的 DBHelper 类:

package com.example.shashank.fffffffffffffffffffffffffff;


import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

public class DBHelper extends SQLiteOpenHelper {
    public static final String DBNAME = "Login.db";
    public static final String FLIGHTS = "FLIGHTS";
    public static final String COLUMN_ID = "ID";
    public static final String COLUMN_DESTINATION = "DESTINATION";
    public static final String COLUMN_PRICE = "PRICE";
    public static final String COLUMN_DEPARTURE_TIME = "DEPARTURE_TIME";
    public static final String COLUMN_ARRIVAL_TIME = "ARRIVAL_TIME";
    public static final String COLUMN_DURATION = "DURATION";
    public static final String COLUMN_AVAILABLE_SEATS = "AVAILABLE_SEATS";
    public static final String USERS = "users";
    public static final String USERNAME = "username";
    public static final String PASSWORD = "password";
    public static final String EMAIL = "email";
    public static final String BALANCE = "balance";
    public static final String BOOKING = "booking";

    public DBHelper(Context context) {
        super(context, "Login.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase MyDB) {

        String createTable1 = ("create Table " + USERS + "(" + USERNAME + " TEXT primary key, " + PASSWORD + " TEXT, " + EMAIL + " TEXT UNIQUE, " + BALANCE + " REAL, " + BOOKING + " INTEGER)");
        MyDB.execSQL(createTable1);

        MyDB.execSQL("CREATE TABLE " + FLIGHTS + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_DESTINATION + " TEXT, " + COLUMN_PRICE + " REAL, " + COLUMN_DEPARTURE_TIME + " TEXT, " + COLUMN_ARRIVAL_TIME + " TEXT, " + COLUMN_DURATION + " TEXT, " + COLUMN_AVAILABLE_SEATS + " INTEGER)");


        ContentValues insertValues = new ContentValues();
        insertValues.put(COLUMN_DESTINATION, "Cape Town");
        insertValues.put(COLUMN_PRICE, 500);
        insertValues.put(COLUMN_DEPARTURE_TIME, "1200");
        insertValues.put(COLUMN_ARRIVAL_TIME, "1400");
        insertValues.put(COLUMN_DURATION, "2");
        insertValues.put(COLUMN_AVAILABLE_SEATS, 10);
        MyDB.insert(FLIGHTS, null, insertValues);

        ContentValues insertValues2 = new ContentValues();
        insertValues2.put(COLUMN_DESTINATION, "Johannesburg");
        insertValues2.put(COLUMN_PRICE, 1000);
        insertValues2.put(COLUMN_DEPARTURE_TIME, "1400");
        insertValues2.put(COLUMN_ARRIVAL_TIME, "1600");
        insertValues2.put(COLUMN_DURATION, "2");
        insertValues2.put(COLUMN_AVAILABLE_SEATS, 22);
        MyDB.insert(FLIGHTS, null, insertValues2);

        ContentValues insertValues3 = new ContentValues();
        insertValues3.put(COLUMN_DESTINATION, "Cape Town");
        insertValues3.put(COLUMN_PRICE, 500);
        insertValues3.put(COLUMN_DEPARTURE_TIME, "1200");
        insertValues3.put(COLUMN_ARRIVAL_TIME, "1400");
        insertValues3.put(COLUMN_DURATION, "2");
        insertValues3.put(COLUMN_AVAILABLE_SEATS, 10);
        MyDB.insert(FLIGHTS, null, insertValues3);

       
    }


    @Override
    public void onUpgrade(SQLiteDatabase MyDB, int i, int i1) {
        MyDB.execSQL("drop Table if exists " + USERS);
        MyDB.execSQL("drop Table if exists " + FLIGHTS);

        onCreate(MyDB);
    }

    public Boolean insertData(String username, String password, String email, Double balance){
        SQLiteDatabase MyDB = this.getWritableDatabase();
        ContentValues contentValues= new ContentValues();
        contentValues.put(USERNAME, username);
        contentValues.put(PASSWORD, password);
        contentValues.put(EMAIL, email);
        contentValues.put(BALANCE, balance);
        long result = MyDB.insert(USERS, null, contentValues);
        if(result==-1) return false;
        else
            return true;
    }

    public Boolean checkusername(String username) {
        SQLiteDatabase MyDB = this.getWritableDatabase();
        Cursor cursor = MyDB.rawQuery("Select * from " + USERS + " where " + USERNAME + " = ?", new String[]{username});
        if (cursor.getCount() > 0)
            return true;
        else
            return false;
    }

    public Boolean checkusernamepassword(String username, String password){
        SQLiteDatabase MyDB = this.getWritableDatabase();
        Cursor cursor = MyDB.rawQuery("Select * from " + USERS + " where " + USERNAME + " = ? and " + PASSWORD + " = ?", new String[] {username,password});
        if(cursor.getCount()>0)
            return true;
        else
            return false;
    }


    public List<FlightsModel> getEveryone(){

        List<FlightsModel> returnList = new ArrayList<>();

        String queryString = "SELECT * FROM " + FLIGHTS;

        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.rawQuery(queryString, null);

        if(cursor.moveToFirst()){
            do {
                int id = cursor.getInt(0);
                String destination = cursor.getString(1);
                double price = cursor.getDouble(2);
                String departure = cursor.getString(3);
                String arrival = cursor.getString(4);
                String duration = cursor.getString(5);
                int space = cursor.getInt(6);

                FlightsModel newFlight = new FlightsModel(id, destination, price, departure, arrival, duration, space);
                returnList.add(newFlight);


            }while (cursor.moveToNext());
        }
        else{

        }
        cursor.close();
        db.close();
        return returnList;
    }



    @SuppressLint("Range") // suppress Bug/issue with getColumnIndex
    public FlightsModel getFlightById(int id) {
        FlightsModel rv;
        SQLiteDatabase db = this.getWritableDatabase();
        // Uses the query convenience method rather than raw query
        Cursor csr = db.query(FLIGHTS,null,COLUMN_ID+"=?",new String[]{String.valueOf(id)},null,null,null);
        if (csr.moveToFirst()) {
            rv = new FlightsModel(
                    csr.getInt(csr.getColumnIndex(COLUMN_ID)),
                    csr.getString(csr.getColumnIndex(COLUMN_DESTINATION)),
                    csr.getDouble(csr.getColumnIndex(COLUMN_PRICE)),
                    csr.getString(csr.getColumnIndex(COLUMN_DEPARTURE_TIME)),
                    csr.getString(csr.getColumnIndex(COLUMN_ARRIVAL_TIME)),
                    csr.getString(csr.getColumnIndex(COLUMN_DURATION)),
                    csr.getInt(csr.getColumnIndex(COLUMN_AVAILABLE_SEATS))
            );
        }  else {
            rv = new FlightsModel();
        }
        csr.close();
        // No need to close the database (inefficient to keep opening and closing db)
        return rv;
    }



    @SuppressLint("Range")
    public UsersModel getPasswordByName(String name){

        UsersModel rv;
        SQLiteDatabase db = this.getWritableDatabase();

        Cursor cr = db.query(USERS, null, USERNAME+"=?", new String[]{name}, null, null, null);

        if (cr.moveToFirst()) {
            rv = new UsersModel(
                    cr.getString(cr.getColumnIndex(USERNAME)),
                    cr.getString(cr.getColumnIndex(PASSWORD)),
                    cr.getString(cr.getColumnIndex(EMAIL)),
                    cr.getDouble(cr.getColumnIndex(BALANCE))

            );
        }  else rv = new UsersModel();

        cr.close();
        return rv;
    }




}

这是活动:

package com.example.shashank.fffffffffffffffffffffffffff;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class BookingActivity extends AppCompatActivity {


    TextView textView;
    TextView departure, arrival, duration, price, seats, textView13;

    DBHelper dbHelper; //<<<<< ADDED

    FlightsModel flightsModel; //<<<<< ADDED

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_booking);

        dbHelper = new DBHelper(this); //<<<<< ADDED

        textView = findViewById(R.id.textView);
        departure = findViewById(R.id.departure);
        arrival = findViewById(R.id.arrival);
        duration = findViewById(R.id.duration);
        price = findViewById(R.id.price);
        seats = findViewById(R.id.seats);
        textView13 = findViewById(R.id.textView13);



        Intent mIntent = getIntent();
        int intValue = mIntent.getIntExtra("intVariableName", 0);
        Intent nameIntent = getIntent();
        String name = nameIntent.getStringExtra("userName");
        flightsModel = dbHelper.getFlightById(intValue + 1);


        intValue = intValue + 1;
        textView.setText(flightsModel.getDestination());
        departure.setText(flightsModel.getDeparture_time());
        arrival.setText(flightsModel.getArrival_time());
        duration.setText(flightsModel.getDuration());
        price.setText("R" +  Double.toString(flightsModel.getPrice()));
        seats.setText(Integer.toString(flightsModel.getAvailable_space()));


        textView13.setText(name);

        Toast.makeText(BookingActivity.this, flightsModel.getDestination(), Toast.LENGTH_SHORT).show();

    }


}

我想要完成的是在预订列的用户表中添加一个整数值(活动中的值是 intValue)。该值需要添加到名称与我的活动中的字符串名称匹配的用户行。我对 Android 工作室和 SQLite 还是很陌生,还没有弄清楚这一点。任何帮助将不胜感激。

【问题讨论】:

    标签: java android sqlite


    【解决方案1】:

    当行存在时,您UPDATE 行和SET 值。

    您可以使用updateupdateWithOnConflict 执行此操作,或者通过execSQL 进行更复杂的更新。

    因此,如果您只想将预订列的值设置为 intValue 的值,那么您可以在 DBHelper 中有一个方法,例如:-

    public int setBookingByUserName(int bookingAmount, String userName) {
        ContentValues cv = new ContentValues();
        cv.put(USERNAME,bookingAmount);
        return this.getWritableDatabase().update(USERS,cv,USERNAME+"=?",new String[]{userName});
    }
    
    • 返回的值是更新的行数,应该是 1,因为用户名是主键。
    • 便捷方法构建底层 SQL,类似于 UPDATE users SET booking=? WHERE username=? 再次绑定分别替换 ? 的两个值。

    然后您需要做的就是将Button 添加到活动(类似于文本视图),然后添加它的onClickListener,它将调用setBookingBuUserName 方法并传递适当的值.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多