Данные не хранятся в таблице Sqlite - PullRequest
0 голосов
/ 14 июля 2011

Может кто-нибудь взглянуть на мой код здесь.Я пытаюсь сохранить некоторые данные из моего основного макета, используя метод onClick.здесь приведены коды для моего метода onClick

private OnClickListener bNextListener = new OnClickListener() {
    public void onClick(View v) {
        name=txt1.getText().toString();
        email=txt2.getText().toString();
            date = txtv.getText().toString();
            gender = b4.getText().toString();
        dbHelper.addProfiles(name, date, email, gender);
};

Каждый раз, когда я запускаю свое приложение, оно падает, потому что не удается сохранить данные метода addProfiles в моем классе dbHelper.Вот мой открытый класс класса dbHelper. SqlHelper extends SQLiteOpenHelper {public static final String DATABASE_PATH = "/data/data/com.and.profile/databases/";public static final String DATABASE_NAME = "profiledatabase.db";private static final int DATABASE_VERSION = 2;

public static final String PROFILES_TABLE = "profiles";
public static final String COLUMN_PROFILE_ID = "profile_id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_BIRTHDAY = "birthday";
public static final String COLUMN_EMAIL = "email";
public static final String COLUMN_GENDER = "gender";

public static final String INTERESTS_TABLE = "interests";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_TITLE = "title";
public static final String COLUMN_SELECTED = "selected";

private static final String CREATE_TABLE_1 =
        " create table " + PROFILES_TABLE +
        " (" + COLUMN_PROFILE_ID + " integer primary key autoincrement," +
               COLUMN_NAME + " name text not null, "+ 
               COLUMN_BIRTHDAY +" birthday date not null, " + 
               COLUMN_EMAIL + "email text not null, " + 
               COLUMN_GENDER +" gender text not null);";

private static final String CREATE_TABLE_2 =
        " create table " + INTERESTS_TABLE +
        " (" + COLUMN_ID + " integer primary key autoincrement," +
           COLUMN_TITLE + " name text not null, "+ 
           COLUMN_SELECTED +" selected integer);";

public SQLiteDatabase dbSqlite;
//private boolean dbExist = true;
private final Context myContext;

public SqlHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    this.myContext = context;
}

@Override
public void onCreate(SQLiteDatabase db) {
    // check if exists and copy database from resource
    //createDB();
db.execSQL(CREATE_TABLE_1);
db.execSQL(CREATE_TABLE_2);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w("SqlHelper", "Upgrading database from version " + oldVersion
            + " to " + newVersion + ", which will destroy all old data");
    onCreate(db);
}

public void createDataBase() throws IOException{

    boolean dbExist = CheckDataBase();

    if(dbExist){
        //do nothing - database already exist
    }else{

        //By calling this method and empty database will be created into the default system path
           //of your application so we are gonna be able to overwrite that database with our database.
        this.getWritableDatabase();

        copyDBFromResource();
    }

}

boolean CheckDataBase() {
    SQLiteDatabase checkDB = null;
    try {
        String databasePath = DATABASE_PATH + DATABASE_NAME;
        checkDB = SQLiteDatabase.openDatabase(databasePath, null,
                SQLiteDatabase.OPEN_READWRITE);
        checkDB.setLocale(Locale.getDefault());
        checkDB.setLockingEnabled(true);
        checkDB.setVersion(1);
    } catch (SQLiteException e) {
        Log.e("SqlHelper", "database not found");
    }
    if (checkDB != null) {
        checkDB.close();
    }
    return checkDB != null ? true : false;
}

private void copyDBFromResource() {
    InputStream inputStream = null;
    OutputStream outStream = null;
    String dbFilePath = DATABASE_PATH + DATABASE_NAME;
    try {
        inputStream = myContext.getAssets().open(DATABASE_NAME);
        outStream = new FileOutputStream(dbFilePath);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) > 0) {
            outStream.write(buffer, 0, length);
        }
        outStream.flush();
        outStream.close();
        inputStream.close();
    } catch (IOException e) {
        throw new Error("Problem copying database from resource file.");
    }
}

public void openDataBase() throws SQLException {
    String myPath = DATABASE_PATH + DATABASE_NAME;
    dbSqlite = SQLiteDatabase.openDatabase(myPath, null,
            SQLiteDatabase.OPEN_READWRITE);
}

@Override
public synchronized void close() {
    if (dbSqlite != null)
        dbSqlite.close();
        super.close();
}

public void addProfiles( String name, String date, String email, String gender) {
    System.out.println("addProfiles");
    System.out.println("entre2");
    dbSqlite.execSQL("INSERT INTO " + PROFILES_TABLE + " ('name','date','email','gender') values ('" +
          COLUMN_NAME + "', '" + COLUMN_BIRTHDAY + "', '" + COLUMN_EMAIL + "', '" + COLUMN_GENDER + "')");

      }

}

Я буду очень рад, если эксперты предоставят вам быструю помощь.Кстати, я использую файл базы данных в папке активов, если это необходимо.

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

Насколько я могу судить, в addProfiles ваше утверждение задом наперед, и, хотя я думаю, что вы хотите получить доступ к параметрам, переданным методу, вы на самом деле просто обращаетесь к ним как к строкам.Это должно быть Вставить в (Database.Table) -> (Столбцы) -> Значения.На самом деле колонки вам тоже не нужны.

0 голосов
/ 14 июля 2011

Это большой код, который нужно пройти, но просто посмотрите на последний метод:

dbSqlite.execSQL("INSERT INTO " + PROFILES_TABLE + " ('name','date','email','gender') values ('" +
          COLUMN_NAME + "', '" + COLUMN_BIRTHDAY + "', '" + COLUMN_EMAIL + "', '" + COLUMN_GENDER + "')");

Это не имеет особого смысла:

  • вы вообще не используете переданные переменные
  • вы жестко (без кавычек) цитируете имена столбцов в строке
  • вы используете ваши константы в качестве значений для вставки
  • после этого вы не проверяете ошибки.

Очистите это и убедитесь, что вы распечатываете любые сообщения об ошибках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...