2013-11-28 105 views
0

我正在關注使用Android Java設置SQLite數據庫的教程。我創建了一個數據庫和一個簡單的表格來包含關於食物和卡路里的數據。我已經設置了幾個按鈕,可以輸入數據,查看,獲取有關特定條目的信息,修改和刪除它們。SQLite數據庫:無法獲取特定的條目數據

除了獲取特定條目的按鈕外,其他所有功能都可以正常工作。當我點擊「獲取信息」按鈕時,根據我放的行ID,它應該返回食物名稱和卡路里值。

任何人都可以幫助看看我的代碼在這裏,檢查什麼是錯的或失蹤?

這裏是類的代碼。我排除了一些不相關的部分。 創建數據庫:

public class FormDatabase 
{ 
public static final String KEY_ROWID = "_id"; 
public static final String KEY_FOOD = "food_name"; 
public static final String KEY_CALORIE = "food_calories"; 

private static final String DATABASE_NAME = "Calories"; 
private static final String DATABASE_TABLE = "FoodTable"; 
private static final int DATABASE_VERSION = 2; 

private DbHelper ourHelper; 
private final Context ourContext; 
private SQLiteDatabase ourDatabase; 

private static class DbHelper extends SQLiteOpenHelper 
{ 

    public DbHelper(Context context) 
    { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
     KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT , " + 
     KEY_FOOD + " TEXT NOT NULL , " + 
     KEY_CALORIE + " TEXT NOT NULL);"   
     ); 
    } 

public String getFood(long l) throws SQLException{ 
    // get data of food name 
    String[] columns = new String[]{ KEY_ROWID, KEY_FOOD, KEY_CALORIE}; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + l, null, null, null, null); 
    if (c != null){ 
     c.moveToFirst(); 
     String food = c.getString(1); 
     return food; 
    } 
    return null; 
} 

public String getCalorie(long l) throws SQLException{ 
    // get data of food calorie 
    String[] columns = new String[]{ KEY_ROWID, KEY_FOOD, KEY_CALORIE}; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + 
l, null, null, null, null); 
    if (c != null){ 
     c.moveToFirst(); 
     String calorie = c.getString(2); 
     return calorie; 
    } 
    return null; 
} 

設置主頁另一類:

public class DatabaseMain extends Activity implements OnClickListener{ 

Button sqlUpdate, sqlView, sqlModify, sqlGetInfo, sqlDelete; 
EditText sqlFood, sqlCalorie, sqlRow; 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.database_main); 
    sqlUpdate = (Button) findViewById(R.id.bSQLUpdate); 
    sqlFood = (EditText) findViewById(R.id.etSQLFood); 
    sqlCalorie = (EditText) findViewById(R.id.etSQLCalorie); 

    sqlView = (Button) findViewById (R.id.bSQLopenView); 
    sqlView.setOnClickListener(this); 
    sqlUpdate.setOnClickListener(this); 

    sqlRow = (EditText) findViewById(R.id.etSQLrowInfo); 
    sqlModify = (Button) findViewById(R.id.bSQLmodify); 
    sqlGetInfo = (Button) findViewById(R.id.bgetInfo); 
    sqlDelete = (Button) findViewById(R.id.bSQLdelete); 
    sqlDelete.setOnClickListener(this); 
    sqlModify.setOnClickListener(this); 
    sqlDelete.setOnClickListener(this); 
} 

public void onClick(View arg0) 
{ 
    // When click on buttons, data entry into database, view, modify and 
delete row 
    switch (arg0.getId()) 
    { 
case R.id.bgetInfo: 
     try { 
     String s = sqlRow.getText().toString(); 
     long l = Long.parseLong(s); 
     FormDatabase foodcal = new FormDatabase(this); 
     foodcal.open(); 
     String returnedFood = foodcal.getFood(l); 
     String returnedCalories = foodcal.getCalorie(l); 
     foodcal.close(); 

     sqlFood.setText(returnedFood); 
     sqlCalorie.setText(returnedCalories); 

     }catch (Exception e) 
     {   
      String error = e.toString(); 
      Dialog d = new Dialog(this); 
      d.setTitle("This is an error!"); 
      TextView tv = new TextView(this); 
      tv.setText(error); 
      d.setContentView(tv); 
      d.show(); 
     } 

     break; 
} 
} 

的database_main佈局的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width ="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:id="@+id/textView1" 
    android:text="Food" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceSmall"/> 

<EditText 
    android:id="@+id/etSQLFood" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="text" > 
</EditText> 

<TextView 
    android:id="@+id/textView3" 
    android:text="Food Calorie" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</TextView>  

<EditText 
    android:id="@+id/etSQLCalorie" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="number" > 
</EditText> 

<Button 
    android:text="Update SQLite Database" 
    android:id="@+id/bSQLUpdate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</Button> 

<Button 
    android:text="View" 
    android:id="@+id/bSQLopenView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</Button> 

<TextView 
    android:id="@+id/textView2" 
    android:text="Enter Row ID" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</TextView>  

<EditText 
    android:id="@+id/etSQLrowInfo" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="number" > 
    <requestFocus></requestFocus>   
</EditText> 

<Button 
    android:text="Get Information" 
    android:id="@+id/bgetInfo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</Button> 

<Button 
    android:text="Edit Entry" 
    android:id="@+id/bSQLmodify" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</Button> 

<Button 
    android:text="Delete Entry" 
    android:id="@+id/bSQLdelete" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</Button> 
</LinearLayout> 
+0

你得到什麼錯誤,或者是它什麼都不做? – domskey

+0

沒有錯誤,它只是無所事事。當我點擊'獲取信息'按鈕時,SQLite數據庫中的數據應該顯示在textView區域中。 – Onered

+0

在onClick處理程序中添加一個檢查到您的switch語句以確保它正在被觸發以及哪個對象正在觸發它。 – domskey

回答

0

以支票添加到您的switch語句,加默認情況下:

switch (arg0.getId()) 
{ 
    case R.id.bgetInfo: 
     ... do something... 
     break; 
    default: 
     //this will handle everything else 
     // write out the argument for debugging, eg: 
     Console.WriteLine(arg0.getId().ToString()); 
     break; 
} 

這會告訴你什麼是通過。如果arg0.getId()不是R.id.bgetInfo,該事件將不會觸發...

+0

哦,去吧。謝謝你的幫助。 – Onered

0
Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=" + 
l, null, null, null, null); 

,而不是使用上面的語句使用這個

Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ROWID + "=?", 
       new String[] { String.valueOf(l) }, null, null, null, null);