如何将2个表中的SQL列相乘并插入单独的列?

时间:2016-04-01 14:05:14

标签: java android sql sqlite

我正在尝试编写一个SQL Android应用程序,它将一个表中的库存数量乘以另一个表中项目的价格,以获得存储到另一个列中的总数。根据我所读到的内容,它看起来很简单,但对我来说不起作用。我尝试了多种解决方案,但此时我所做的就是将SQL代码放在一个名为totalPrice()的单独方法中,以便在另一种方法的按钮上调用。

public static final String TABLE_INVOICE = "Invoice";
public static final String INVOICE_ID = "Invoice_ID";
public static final String INVOICE_DATE = "Date";

public static final String TABLE_INVENTORY = "Inventory";
public static final String INVENTORY_ID = "Inventory_ID";
public static final String INVENTORY_ITEM = "Item";
public static final String INVENTORY_XS = "extraSmall";
public static final String INVENTORY_S = "Small";
public static final String INVENTORY_M = "Medium";
public static final String INVENTORY_L = "Large";
public static final String INVENTORY_XL = "extraLarge";
public static final String INVENTORY_XXL = "extraExtraLarge";
public static final String INVENTORY_PRICE = "Price";

public static final String TABLE_ORDERED = "Ordered";
public static final String ORDERED_ID = "Ordered_ID";
public static final String ORDERED_ITEM = "Item";
public static final String ORDERED_SIZE = "Size";
public static final String ORDERED_QUANTITY = "Quantity";
public static final String ORDERED_TOTAL = "Total";

public DbHelper(Context context){
    super(context, DB_NAME, null, DB_VERSION);
}

public void onCreate(SQLiteDatabase db) {
    String CREATE_CUSTOMER_TABLE = "CREATE TABLE " + TABLE_CUSTOMER + " ("
            + C_CUSTOMER_ID + " INTEGER PRIMARY KEY, "
            + C_CUSTOMER_NAME + " TEXT, "
            + C_EMAIL + " TEXT, "
            + C_STREET_ADDRESS + " TEXT, "
            + C_CITY + " TEXT, "
            + C_STATE + " TEXT, "
            + C_ZIP + " TEXT, "
            + C_PHONE + " TEXT "
            + ")";

    String CREATE_INVENTORY_TABLE = "CREATE TABLE " + TABLE_INVENTORY + " ("
            + INVENTORY_ID + " INTEGER PRIMARY KEY, "
            + INVENTORY_ITEM + " TEXT, "
            + INVENTORY_XS + " TEXT, "
            + INVENTORY_S + " TEXT, "
            + INVENTORY_M + " TEXT, "
            + INVENTORY_L + " TEXT, "
            + INVENTORY_XL + " TEXT, "
            + INVENTORY_XXL + " TEXT, "
            + INVENTORY_PRICE + " REAL "
            + ")";

    String CREATE_INVOICE_TABLE = "CREATE TABLE " + TABLE_INVOICE + " ("
            + INVOICE_ID + " INTEGER PRIMARY KEY, "
            + INVOICE_DATE + " DATETIME, "
            + C_CUSTOMER_ID + " INTEGER, "
            + "FOREIGN KEY(" + C_CUSTOMER_ID + ") REFERENCES " + TABLE_CUSTOMER + " (" + C_CUSTOMER_ID + "));";

    String CREATE_ORDERED_TABLE = "CREATE TABLE " + TABLE_ORDERED + " ("
            + ORDERED_ID + " INTEGER PRIMARY KEY, "
            + ORDERED_ITEM + " TEXT, "
            + ORDERED_SIZE + " TEXT, "
            + ORDERED_QUANTITY + " INTEGER, "
            + ORDERED_TOTAL + " REAL, "
            + INVENTORY_ID + " INTEGER, "
            + "FOREIGN KEY(" + INVENTORY_ID + ") REFERENCES " + TABLE_INVENTORY + " (" + INVENTORY_ID + "));";

    db.execSQL(CREATE_CUSTOMER_TABLE);
    db.execSQL(CREATE_INVENTORY_TABLE);
    db.execSQL(CREATE_INVOICE_TABLE);
    db.execSQL(CREATE_ORDERED_TABLE);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CUSTOMER);

    //create tables again
    this.onCreate(db);
}

public Cursor totalPrice()
{
    //open database
    SQLiteDatabase db = this.getWritableDatabase();

    Cursor res = db.rawQuery("SELECT " + ORDERED_QUANTITY + ", " + INVENTORY_PRICE + ", " +
            ORDERED_QUANTITY + " * " + INVENTORY_PRICE + " AS " + ORDERED_TOTAL +
            " FROM " + TABLE_ORDERED + " INNER JOIN " + TABLE_INVENTORY +
            " ON Ordered." + INVENTORY_ID + " = Inventory." + INVENTORY_ID, null);
    return res;
}

我有另一个类在按钮单击中调用该方法。

public class AddInvoice extends AppCompatActivity {
Button addInvoice;
DbHelper db;
EditText date, cid, item, size, invID, quantity;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_invoice);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    db = new DbHelper(this);

    addInvoice = (Button) findViewById(R.id.btnAddToInvoice);
    date = (EditText) findViewById(R.id.etDate);
    cid = (EditText) findViewById(R.id.etCID);
    item = (EditText) findViewById(R.id.ItemName);
    size = (EditText) findViewById(R.id.etSize);
    invID = (EditText) findViewById(R.id.etAddInventoryID);
    quantity = (EditText) findViewById(R.id.etQuantity);

    addInvoice.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
              AddInvoice();
              AddOrderedItem();
              db.totalPrice();
              date.setText("");
              cid.setText("");
              item.setText("");
              size.setText("");
              invID.setText("");
              quantity.setText("");
                }
            }
    );
              getSupportActionBar().setDisplayHomeAsUpEnabled(true);
          }

public void AddOrderedItem() {

    boolean isInserted = db.addOrderedItem(item.getText().toString(), size.getText().toString(), Integer.parseInt(invID.getText().toString()),
            Integer.parseInt(quantity.getText().toString()));
    db.totalPrice();
        if (isInserted == true)
            Toast.makeText(AddInvoice.this, "Item Inserted", Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(AddInvoice.this, "Item not Inserted", Toast.LENGTH_SHORT).show();
        }

public void AddInvoice(){
    boolean isInserted = db.addInvoice(date.getText().toString(), cid.getText().toString());
        if (isInserted == true)
            Toast.makeText(AddInvoice.this, "Invoice Inserted", Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(AddInvoice.this, "Invoice not Inserted", Toast.LENGTH_SHORT).show();
}

}

现在,当我运行代码时,Total Price列中存储的值为null。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我假设你基本上想要执行以下INNER JOIN查询:

SELECT column1 * column2 AS result FROM table1 t1 
  INNER JOIN table2 t2 dt ON t1.key = t2.key

然后您可以在java代码中自由使用此值。