Проблема переменной SQLiteDatabase для Android - PullRequest
1 голос
/ 01 мая 2011

Я использую базу данных для своего проекта, и я сделал большинство частей для базы данных.Но когда я объявляю переменную «SQLiteDatabase db» для использования метода «getWritableDatabase», программа перестает работать и выдает ошибку.Я пробовал разные способы решения проблемы, но никто не работал.

Это мой класс DBhelper:

public class DBhelper extends SQLiteOpenHelper {

// Database name
static final String dbAdi = "data.db";
static final Integer version = 1;

static final String userTable = "Personal Info";
static final String userID = "User_ID";
static final String userName = "Name";
static final String userAge = "Age";
static final String userHeight = "Height";
static final String userWeight = "Weight";

public DBhelper(Context context, String name, CursorFactory factory,int version) {
    super(context, dbAdi, null, version);

}

@Override
public void onCreate(SQLiteDatabase db) {

      db.execSQL("CREATE TABLE "+ userTable +" (" + userID+" INTEGER PRIMARY KEY AUTOINCREMENT, "
              + userName +" TEXT NOT NULL, " + userAge +" INTEGER NOT NULL," 
              + userHeight + "INTEGER NOT NULL, " + userWeight +" REAL NOT NULL," );
}

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

}

}

Это мой класс DBquery:

public class DBquery extends PersonalInfoRecord {

   private DBhelper helper;

   private SQLiteDatabase db;


    public void save(PersonalInfo person)
    { 

        helper = new DBhelper(null, DBhelper.dbAdi, null, DBhelper.versiyon);
                db = helper.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(DBhelper.userName, person.getName());
        values.put(DBhelper.userHeight, person.getHeight());
        values.put(DBhelper.userWeight, person.getWeight());
        values.put(DBhelper.userAge, person.getAge());

        try
        {
           db.insert(DBhelper.userTable, null, values);
           db.close();
           return 1;
        }
        catch(Exception e)
        {
           return 0;
        }

    } 

И мой класс активности:

public class PersonalInforRecord extends Activity implements OnClickListener{

    public static final int USER_OPTIONS_SESSION = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.kisisel);  // layout name


        Button record = (Button) findViewById(R.id.btnrcd);   
        final EditText nameEdit = (EditText) findViewById(R.id.editname);
        final EditText ageEdit = (EditText) findViewById(R.id.editage);
        final EditText weightEdit = (EditText) findViewById(R.id.editwgt);
        final EditText heightEdit = (EditText) findViewById(R.id.edithgt);


        record.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                DBquery dbq = new DBquery();

                PersonalInfo person = new PersonalInfo();
                person.setName(nameEdit.getText().toString());
                person.setAge(Integer.parseInt(ageEdit.getText().toString()));
                person.setWeight(Double.parseDouble(weightEdit.getText().toString()));
                person.setHeight(Integer.parseInt(heightEdit.getText().toString()));


                dbq.save(person);


            }
        });

    }

1 Ответ

0 голосов
/ 01 мая 2011

Похоже, вы передаете пустой контекст. Вам нужно передать контекст вашему классу DBQuery. Также обратите внимание на написание на DBHelper.version

Когда вы создаете экземпляр помощника, измените этот код:

helper = new DBhelper(null, DBhelper.dbAdi, null, DBhelper.versiyon);
        db = helper.getWritableDatabase();

к этому:

helper = new DBhelper(context, DBhelper.dbAdi, null, DBhelper.version);
        db = helper.getWritableDatabase();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...