2016-04-01 14 views
0

私はあるテーブルの在庫の数量を別のテーブルのアイテムの価格で掛けて合計を別のカラムに格納するSQL Androidアプリケーションを作成しようとしています。私が読んだことに基づいて、それはかなりシンプルなようですが、私のために働いていません。私は複数のソリューションを試しましたが、この時点では、SQLコードを別のメソッドのボタンクリックで呼び出されるtotalPrice()という別のメソッドに入れています。2つのテーブルからSQLカラムを掛けて別々のカラムに挿入するには?

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(); 
} 

}

私は、コードを実行すると合計価格列に格納された値はnullです。助けてくれてありがとう。

答えて

0

私はあなたが基本的にINNER JOINのクエリを次のように実行したいと仮定します。

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

そして、あなたはあなたのJavaコードでこの値を自由に使用できます。

+0

はい、ただし、列には「null」が格納されます。私がCursorメソッドまたはrawQueryメソッドを実行している方法が原因である可能性がありますか?私はContentValues.putメソッドを使用しようとしましたが、 "[email protected]"を格納するvalueOf()メソッドでラップしない限り、2番目のパラメータとしてメソッドを使用することはできません –

+0

多分問題カーソルの使用に関連しています。私はカーソルを欲するという経験はありません。本当に必要な場合を除いて、まったく使用しないことをお勧めします。 – rxn1d

関連する問題