Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将两个表中的SQL列相乘并插入到一个单独的列中?_Java_Android_Sql_Sqlite - Fatal编程技术网

Java 如何将两个表中的SQL列相乘并插入到一个单独的列中?

Java 如何将两个表中的SQL列相乘并插入到一个单独的列中?,java,android,sql,sqlite,Java,Android,Sql,Sqlite,我正在尝试编写一个SQLAndroid应用程序,它从一个表中获取库存数量,然后乘以另一个表中项目的价格,得到要存储到另一列中的总量。根据我所读到的,它看起来很简单,但对我来说不起作用。我尝试了多种解决方案,但现在我所做的是将SQL代码放在一个单独的方法totalPrice()中,在另一个方法中单击按钮时调用该方法 public static final String TABLE_INVOICE = "Invoice"; public static final String INVOICE_ID

我正在尝试编写一个SQLAndroid应用程序,它从一个表中获取库存数量,然后乘以另一个表中项目的价格,得到要存储到另一列中的总量。根据我所读到的,它看起来很简单,但对我来说不起作用。我尝试了多种解决方案,但现在我所做的是将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();
}
}


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

我假设您基本上希望执行以下内部联接查询:

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

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

是的,但它仍然在列中存储“null”。这可能是因为我使用游标或rawQuery方法的方式吗?我尝试使用ContentValues.put方法,但我不能将方法用作第二个参数,除非我将其包装在valueOf()方法中,该方法存储“android.database.sqlite”。SQLiteCurser@3558a69Maybe你的问题与游标的使用有关。我没有使用wish游标的经验,我建议不要使用它,除非真的需要它。