2013-11-27 2 views
0

Я пытаюсь настроить базу данных SQLite, содержащую некоторую информацию о еде и ее теплотворной способности. Однако, когда я вставляю информацию и нажимаю кнопку для просмотра, таблица просто ничего не показывает. Информация, которую я сейчас вставляю, не появляется. Я не могу понять, где проблема. Нужна помощь, чтобы посмотреть код и сообщить мне, что там не так.Ввод данных в таблицу SQLite Database не отображается

Создание базы данных:

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 = 1; 

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

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE); 
     onCreate(db); 
    } 
} 

public FormDatabase(Context c){ 
     ourContext = c; 
    } 

public FormDatabase open() throws SQLException { 
     ourHelper = new DbHelper(ourContext); 
     ourDatabase = ourHelper.getWritableDatabase(); 
     return this; 
    } 

public void close(){ 
    ourHelper.close(); 
} 

public long createEntry(String food, String calorie) { 
    // TODO Auto-generated method stub 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_FOOD, food); 
    cv.put(KEY_CALORIE, calorie); 
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 
} 

public String getData() { 
    // TODO Auto-generated method stub 
    String [] columns = new String[]{ KEY_ROWID, KEY_FOOD, KEY_CALORIE}; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null, null); 
    String result = ""; 

    int iRow = c.getColumnIndex(KEY_ROWID); 
    int iFood = c.getColumnIndex(KEY_FOOD); 
    int iCalorie = c.getColumnIndex(KEY_CALORIE); 

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){ 
     result = result + c.getString(iRow) + " " + c.getString(iFood) + " " + c.getString(iCalorie) + "\n"; 
    } 
    return result; 
} 
} 

Update и просмотреть базу данных:

public class DatabaseMain extends Activity implements OnClickListener{ 

Button sqlUpdate, sqlView; 
EditText sqlFood, sqlCalorie; 

@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); 

} 

public void onClick(View arg0) 
{ 
    // TODO Auto-generated method stub 
    switch (arg0.getId()) 
    { 
    case R.id.bSQLUpdate: 

     boolean didItWork = true; 
     try 
     { 
     String food = sqlFood.getText().toString(); 
     String calorie = sqlCalorie.getText().toString(); 

     FormDatabase entry = new FormDatabase(DatabaseMain.this); 
     entry.open(); 
     entry.createEntry(food, calorie); 
     entry.close(); 
     } 
     catch (Exception e) 
     { 
      didItWork = false; 
      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(); 
     } 
     finally 
     { 
      if (didItWork) 
      { 
       Dialog d = new Dialog(this); 
       d.setTitle("Notice"); 
       TextView tv = new TextView(this); 
       tv.setText("Update success"); 
       d.setContentView(tv); 
       d.show(); 
      } 
     } 
     break; 

    case R.id.bSQLopenView: 
     Intent i = new Intent("com.example.setupdatabase.SQLVIEW"); 
     startActivity(i); 
     break; 
    } 
} 
} 

SQLiteView:

public class SQLView extends Activity 
{ 
@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sqlview); 
    TextView tv = (TextView) findViewById(R.id.tvSQLinfo); 
    FormDatabase info = new FormDatabase(this); 
    info.open(); 
    String data = info.getData(); 
    info.close(); 
    tv.setText(data); 
} 
} 

расположение XML SQLView:

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

<TableLayout 
    android:id="@+id/tableLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<TableRow> 
    <TextView 
    android:text="Food" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1"> 
    </TextView> 

    <TextView 
    android:text="Calories" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1"> 
    </TextView>  
</TableRow> 
</TableLayout> 

<TextView 
    android:text="get info from db" 
    android:id="@+id/tvSQLinfo" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"></TextView> 

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:inputType="numberSigned" > 

    <requestFocus /> 
</EditText> 

</LinearLayout> 

ответ

0

Во-первых: вы должны регистрировать свои исключения, чтобы получить полезные сообщения об ошибках и трассировку стека в вашем логарифме. Также полезно включать трассировку стека в поставленные вами вопросы.

Есть некоторые ошибки в коде вы в курсе, например:

public static final String KEY_FOOD = "food name"; 

Вы не можете иметь пробелы в именах столбцов, то это приведет к ошибкам синтаксиса SQL.

db.execSQL("DROP TABLE IF EXIST " + DATABASE_TABLE); 

Это также недопустимый SQL. Должно быть EXISTS не EXIST.

+0

Спасибо за ваш совет. Я только что отредактировал это. И теперь это дает мне ошибку, когда я пытаюсь просмотреть данные. Проверка в LogCat говорит, что это из-за «food_name» не существует. Как мне исправить это? – Onered

Смежные вопросы