2014-02-13 24 views
0

大家好很多天過去了,我再次閱讀了大量的實例和線程。但是我又是新手,請不要狠狠地踢我。我認爲問題不是很好,但我要解釋我在android數據庫有3個表。
這三個表商品如何保存到第二個表,並在保存之前把它的第一臺

  1. TABLE_ITEMS
  2. TABLE_PRIHOD(它的輸入)
  3. TABLE_RASHOD(它的輸出)。

我想使用id_goods所有產品名稱,但我沒有實踐。

現在我可以,我必須在不同的2個表中保存DB,並採取不同的列表視圖

我想保存在TABLE_ITEMS首先id_goods並保存到TABLE_PRIHOD後,因爲我想如果我有所有商品名的更容易在DB工作。我知道我做錯了。

這裏是實施例

  • 保存在TABLE_PRIHOD(輸入)id爲1本書籍2014年2月12日500件2 $。
  • 之前保存到TABLE_PRIHOD我要救書TABLE_ITEMS把它作爲id_goods。
  • 使用它來TABLE_PRIHOD(輸入),不能寫書籍,但寫從TABLE_ITEMS其ID。

它我想象: (ID)1(id_goods)1(日)2014年2月12日。 (量)500(成​​本)2

My full CODE is here in this LINK pastie

public class DBHandlerImpl extends SQLiteOpenHelper implements DBHandler<Goods>{ 
    // all DB-variabls here 


public DBHandlerImpl(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String query = "create table " + TABLE_ITEMS + "(" + ID + " integer primary key autoincrement, " + ID_GOODS + " integer);"; 
    db.execSQL(query); 

    query = "create table " + TABLE_PRIHOD + "(" + ID_PRIHOD + " integer primary key autoincrement, " + 
                GOODS + " TEXT, " + 
                DATE + " TEXT, " + 
                AMOUNT + " INTEGER, " + 
                COST + " INTEGER);"; 
    db.execSQL(query); 

    query = "create table " + TABLE_RASHOD + "(" + ID_PRODANO + " integer primary key autoincrement, " + 
                PRODANO + " TEXT, " + 
                PRODANO_DATE + " TEXT, " + 
                PRODANO_AMOUNT + " INTEGER, " + 
                PRODANO_COST + " INTEGER);"; 
    db.execSQL(query); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int i, int i2) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_ITEMS); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRIHOD); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_RASHOD); 
    onCreate(db); 
} 

@Override 
public void addItemsId(Goods goods) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(GOODS, goods.getName_goods()); 
    db.insert(TABLE_ITEMS, null, values); 
    db.close(); 
} 

@Override 
public void addPrihod(Goods goods) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
// values.put(ID, goods.getId()); 
    values.put(GOODS, goods.getName_goods()); 
    values.put(DATE, goods.getDate()); 
    values.put(AMOUNT, goods.getAmount()); 
    values.put(COST, goods.getCost()); 
    db.insert(TABLE_PRIHOD, null, values); 
    db.close(); 
} 

@Override 
public void addRashod(Goods goods) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(PRODANO, goods.getName_goods()); 
    values.put(PRODANO_DATE, goods.getDate()); 
    values.put(PRODANO_AMOUNT, goods.getAmount()); 
    values.put(PRODANO_COST, goods.getCost()); 
    db.insert(TABLE_RASHOD, null, values); 
    db.close(); 
} 
public class Prihod extends Activity{ 
    //all variables are here 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.prihod); 
    //initialize code here 
    //findViewById also located here 


} 

public void saveTovar(View v){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(Prihod.this); 
    builder.setTitle("Потдвердить сохранение..."); 
    builder.setMessage("Вы уверены, что хотите сохранить?"); 
    builder.setIcon(R.drawable.save); 
    builder.setPositiveButton("Да", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      goods = new Goods(1,edtTovar.getText().toString(), 
           editDate.getText().toString(), 
           editAmount.getText().toString(), 
           editCost.getText().toString()); 
      db.addPrihod(goods); 
      Toast.makeText(getApplicationContext(), "Новый товар сохранен!", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    builder.setNegativeButton("Нет", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
     } 
    }); 

    builder.show(); 
}` `public class Rashod extends Activity{ 
private DBHandler<Goods> db; 
private Goods goods; 
private EditText editRashod; 
private EditText editDateRashod; 
private EditText editAmountRashod; 
private EditText editCostRashod; 
private Button btn_rashod_save; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.rashod); 
    TextView textTovar = (TextView)findViewById(R.id.textTovar); 
    TextView textDate = (TextView)findViewById(R.id.textDate); 
    TextView textAmount = (TextView)findViewById(R.id.textAmount); 
    TextView textCost = (TextView)findViewById(R.id.textCost); 
    editRashod = (EditText)findViewById(R.id.editRashod); 
    editDateRashod = (EditText)findViewById(R.id.editDateRashod); 
    editAmountRashod = (EditText)findViewById(R.id.editAmountRashod); 
    editCostRashod = (EditText)findViewById(R.id.editCostRashod); 
    btn_rashod_save = (Button)findViewById(R.id.btn_rashod_save); 
    db = new DBHandlerImpl(this); 
} 
+0

哦,一個代碼完整的歷史...... !!! – user3301551

+0

因此,我知道我需要幫助,請如何先保存到TABLE_ITEM的所有商品和之後也許TABLE_PRIHOD你是另一種更簡單的方法 – Akramjon

回答

0

如果我理解正確的話,你要插入的貨物先TABLE_ITEMS,然後用在TABLE_PRIHOD插入TABLE_ITEM記錄的ID?

如果是這樣,你可以在addItemsId返回插入的ID,因爲db.insert返回新插入的行的id http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang.String,%20java.lang.String,%20android.content.ContentValues)

這將是這個樣子,然後

@Override 
public long addItemsId(Goods goods) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(GOODS, goods.getName_goods()); 
    long goods_id = db.insert(TABLE_ITEMS, null, values); 
    db.close(); 

    return goods_id; 
} 

@Override 
public void addPrihod(Goods goods) { 

    long goods_id = addItemsId(goods); 
    // -1 means an error occured 
    if(goods_id != -1){ 

     goods.setId(goods_id); 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 

     values.put(ID_GOODS, goods_id); 
     values.put(GOODS, goods.getName_goods()); 
     values.put(DATE, goods.getDate()); 
     values.put(AMOUNT, goods.getAmount()); 
     values.put(COST, goods.getCost()); 
     db.insert(TABLE_PRIHOD, null, values); 
     db.close(); 
    } 
} 
+0

哥哥感謝你明白我想要什麼你的回答將幫助我,我希望我會盡力感謝 – Akramjon

+0

@索爾-QUA公共接口DBHandler {public int addItemsId(T t);'to'public interface DBHandler {0} {0} {0} public long addItemsId(T t);公共類DBHandlerImpl上的錯誤擴展SQLiteOpenHelper實現DBHandler 解決現在存在的方法public void addPrihod(商品貨物)的錯誤,我無法找到錯誤改變INT長字符串,但不解決 – Akramjon

+0

錯誤是在這裏'貨物。SETID(goods_id); '請在方法上有什麼不對,請解釋'@Override public void addPrihod(Goods goods){0} {0} {0}長goods_id = addItemsId(貨物); // -1表示發生錯誤 if(goods_id!= -1)goods.setId(goods_id); SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues();' – Akramjon

相關問題