2017-05-20 9 views
-1

という名前の列はありません。私はアンドロイド開発で新しく、簡単な作業を進めています。Sqliteテーブルには

public class DBHandler extends SQLiteOpenHelper { 

// Database Version 
private static final int DATABASE_VERSION = 1; 
// Database Name 
private static final String DATABASE_NAME = "myDB"; 
// Accounts table name 
private static final String TABLE_ACCOUNTS = "Accounts"; 
// Account Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "NameAndSurname"; 
private static final String KEY_EMAIL = "Email"; 
private static final String KEY_PASSWORD = "Password"; 
private static final String KEY_AGE = "Age"; 
private static final String KEY_TOD = "TypeOfDiabetes"; 
private static final String KEY_GENDER = "Gender"; 
private static final String KEY_HEIGHT = "Height"; 
private static final String KEY_WEIGHT = "Weight"; 

public DBHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_ACCOUNTS_TABLE = "CREATE TABLE " + TABLE_ACCOUNTS + "(" 

      + KEY_ID + " INTEGER PRIMARY KEY," 
      + KEY_NAME + " TEXT," 
      + KEY_EMAIL + " TEXT," 
      + KEY_PASSWORD + "TEXT," 
      + KEY_AGE + "INTEGER," 
      + KEY_TOD + "TEXT," 
      + KEY_GENDER + "TEXT," 
      + KEY_HEIGHT + "INTEGER," 
      + KEY_WEIGHT + "INTEGER" 
      +")"; 
    db.execSQL(CREATE_ACCOUNTS_TABLE); 
} 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
// Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_ACCOUNTS); 
// Creating tables again 
    onCreate(db); 
} 

public void addAccount(Account account) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(KEY_ID,account.getId()); 
    values.put(KEY_NAME, account.getNameAndSurname()); 
    values.put(KEY_EMAIL, account.getEmail()); 
    values.put(KEY_PASSWORD, account.getPassword()); 
    values.put(KEY_AGE, account.getAge()); 
    values.put(KEY_TOD , account.getTypeOfDiabetes()); 
    values.put(KEY_GENDER , account.getGender()); 
    values.put(KEY_HEIGHT , account.getHeight()); 
    values.put(KEY_WEIGHT , account.getWeight()); 
// Inserting Row 
    db.insert(TABLE_ACCOUNTS, null, values); 
    db.close(); // Closing database connection 
} 
// Getting one Account 
public Account getAccount(int id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.query(TABLE_ACCOUNTS, new String[] { KEY_ID, 
        KEY_NAME, KEY_EMAIL , KEY_PASSWORD , KEY_AGE, KEY_TOD, KEY_GENDER, KEY_HEIGHT, KEY_WEIGHT }, KEY_ID + "=?", 
      new String[] { String.valueOf(id) }, null, null, null, null); 
    if (cursor != null) 
     cursor.moveToFirst(); 
    Account acc = new Account(Integer.parseInt(cursor.getString(0)), //id 
      cursor.getString(1), //name 
      cursor.getString(2), //mail 
      cursor.getString(3), //pass 
      Integer.parseInt(cursor.getString(4)), //age 
      cursor.getString(5), //TOD 
      cursor.getString(6), //gender 

      Integer.parseInt(cursor.getString(7)), //Height 
      Integer.parseInt(cursor.getString(8))); //Weight 

// return Account 
    return acc; 
} 
// Getting All Accounts 
public List<Account> getAllAccounts() { 
    List<Account> accountList = new ArrayList<Account>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + TABLE_ACCOUNTS; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      Account account = new Account(); 
      account.setId(Integer.parseInt(cursor.getString(0))); 
      account.setNameAndSurname(cursor.getString(1)); 
      account.setEmail(cursor.getString(2)); 
      account.setPassword(cursor.getString(3)); 
      account.setAge(Integer.parseInt(cursor.getString(4))); 
      account.setTypeOfDiabetes(cursor.getString(5)); 
      account.setGender(cursor.getString(6)); 

      account.setHeight(Integer.parseInt(cursor.getString(7))); 
      account.setWeight(Integer.parseInt(cursor.getString(8))); 
    // Adding account to list 
      accountList.add(account); 
     } while (cursor.moveToNext()); 
    } 
    // return account list 
    return accountList; 
} 

// Getting accounts Count 
public int getAccountsCount() { 
    String countQuery = "SELECT * FROM " + TABLE_ACCOUNTS; 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(countQuery, null); 
    cursor.close(); 
// return count 
    return cursor.getCount(); 
} 

// Updating an account 
public int updateAccount(Account account) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, account.getNameAndSurname()); 
    values.put(KEY_EMAIL,account.getEmail()); 
    values.put(KEY_PASSWORD,account.getPassword()); 
    values.put(KEY_AGE,account.getAge()); 
    values.put(KEY_TOD,account.getTypeOfDiabetes()); 
    values.put(KEY_GENDER,account.getGender()); 

    values.put(KEY_HEIGHT,account.getHeight()); 
    values.put(KEY_WEIGHT,account.getWeight()); 
// updating row 
    return db.update(TABLE_ACCOUNTS, values, KEY_ID + " = ?", 
      new String[]{String.valueOf(account.getId())}); 
} 
// Deleting an account 
public void deleteAccount(Account account) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_ACCOUNTS, KEY_ID + " = ?", 
      new String[] { String.valueOf(account.getId()) }); 
    db.close(); 
} 
} 

と私のメインの活動に:私は、データベースクラスを持っている私のようにエラーを取得しています

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    try { 
     DBHandler db = new DBHandler(this); 
     // Inserting Account/Rows 
     Log.d("Insert: ", "Inserting .."); 
     db.addAccount(new Account(1, "Admin", "[email protected]", "admin", 23, "Type 1","Male", 180, 70)); 
     // Reading all accounts 
     Log.d("Reading: ", "Reading all accounts.."); 
     List<Account> accounts = db.getAllAccounts(); 
     for (Account account : accounts) { 
      String log = "Id: " + account.getId() + " ,Name: " + account.getNameAndSurname(); 
     // Writing accounts to log 
      Log.d("Account: : ", log); 
     } 
     TextView tx = (TextView) findViewById(R.id.txt); 
     tx.setText(db.getAccount(1).getNameAndSurname()); 

    } catch (Exception e) { 
     String log = e.toString(); 
     Log.d("ERROR: ", e.toString()); 
    } 
} 
} 

テーブルアカウントは性別

= 23パスワード性別=男性TypeOfDiabetes =タイプ1のid = 1 [email protected] NameAndSurname =管理体重= 70身長= 180年齢を挿入するエラー=管理者

という名前の列がありません

いいえ、そのようなコラム:パスワード

答えて

0

エラー: 変数definitonとその型指定の間にスペースなし。

CREATE_ACCOUNTS_TABLE エラーKEY_GENDER + "TEXT"。 エラーKEY_GENDER + "TEXT"がありません。

続行するには、アプリをアンインストールします。インストールされたデータベースが必要な定義を満たしていないためです。

+0

あなたは最高です! –

関連する問題