2014-01-29 3 views
2

Я разработчик php, пытаясь изучить android, и я пытаюсь настроить БД и вставить некоторые данные.Android APP разбивается на getWritableDatabase() или getReadableDatabase()

Я следил за некоторыми учебниками, но мое приложение застревает, когда я использую getWritableDatabase() или getReadableDatabase().

Ниже приведен код для моего DBHelper Я создал.

package com.example.bootstart;

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DBHelper extends SQLiteOpenHelper { 
    private static final String LOGTAG = "THEDBHELPER"; 

    private static final String DATABASE_NAME = "geolocation.db"; 
    private static final int DATABASE_VERSION = 1; 

    private static final String TABLE_LOCATIONS = "locations"; 
    private static final String COLUMN_ID = "id"; 
    private static final String COLUMN_welawa = "welawa"; 
    private static final String COLUMN_lati = "latitude"; 
    private static final String COLUMN_longi = "longitude"; 

    private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_LOCATIONS + " (" 
      + COLUMN_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_welawa + " TEXT, " + COLUMN_lati 
      + " TEXT, " + COLUMN_longi + " TEXT)"; 


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

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(TABLE_CREATE); 
     Log.i(LOGTAG, "TABLE HAS BEEN CREATED"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOCATIONS); 
     onCreate(db); 
    } 

} 

Доступ к нему осуществляется через мой класс MainActivity.

package com.example.bootstart; 

import android.os.Bundle; 
import android.widget.Toast; 
import android.app.Activity; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 


public class MainActivity extends Activity { 
    SQLiteOpenHelper dbhelper; 
    SQLiteDatabase database; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toast.makeText(getApplicationContext(), "Main Activity", Toast.LENGTH_LONG).show(); 

     dbhelper = new DBHelper(this); 
      //Works upto here 
     database = dbhelper.getReadableDatabase(); //App crashes on this line 


    } 
} 

Мой эмулятор падает при каждом запуске, поэтому я застрял на тестировании с помощью своего телефона.

Мой мини-SDK - 8, если он имеет любую помощь.

Любая помощь очень ценится парням.

+0

Я не знаю, является ли это причиной вашего сбоя, но ваш оператор CREATE недействителен. У «id» нет места после него, поэтому ваша строка будет ... «.... idINTEGER PRIMARY ....». Сначала исправьте это и повторите попытку. – Larry

+0

сообщение logcat –

+0

@ Larry, глупый меня. это сработало. спасибо, ларри. Положите это на ответ? : P –

ответ

2

Просто добавьте пробел после «ид» в

private static final String COLUMN_ID = "id"; 

Я всегда печатать мои команды БД, построенной в коде в журнале, чтобы проверить, как я всегда делаю ошибки с пробел, скобки или запятые. Сохраняет много душевной боли.

+1

+1 команда печати - это хорошая идея, чтобы понять, как этот запрос действительно будет выполнен. –

+0

Хороший совет. На самом деле я спас меня. –

1

Как предложил @Larry, у вас есть проблемы в вашем запросе. Используйте это

private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_LOCATIONS + " (" 
      + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_welawa + " TEXT, " + COLUMN_lati 
      + " TEXT, " + COLUMN_longi + " TEXT)"; 

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

создайте свои методы в DBHelper class и используйте dbhelper.getReadableDatabase();. Например, если вы хотите получить итоговые записи в своем столе. Добавьте следующий код в класс DBHelper.

public int getTotalRecords() { 
     SQLiteDatabase sqLiteDatabase = this.getReadableDatabase(); 
     Cursor cursor = sqLiteDatabase.query(TABLE_LOCATIONS, null, null, null, null, null, null, null); 
     return cursor.getCount(); 
    } 

Затем в MainActivity получите общее количество. записей, как этот

dbhelper = new DBHelper(this); 
int count = dbhelper.getTotalRecords(); 
+0

Благодарим вас за советы. Будем иметь в виду. : D –

+0

Методы создания @ElaBuwa в вашем классе базы данных позволят вам использовать его во многих видах деятельности, а в больших приложениях вам потребуется 100%. Так что лучше делать хорошие привычки, а затем изучать их с трудом позже. –

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