1

我在我现有的数据库中创建了一个名为“exercise”的新表,另外两个表 food 和 users 是正常创建的,但是在使用 SqliteDatabase Browser 时我看不到表练习。我已经升级了我的数据库的版本并确保 create_table 以正确的方式完成,但是没有,你能帮我找出为什么没有创建该表吗?

public class DatabaseAdapter {

public static final String COLUMN_ID = "ID";
public static final String COLUMN_NAME = "Name";
public static final String COLUMN_AGE = "Age";
public static final String COLUMN_GENDER = "Gender";
public static final String COLUMN_WEIGHT = "Weight";
public static final String COLUMN_HEIGHT = "Height";
public static final String COLUMN_ACTIVITY = "Activitylevel";
public static final String COLUMN_CALORIES = "numCal";
public static final String FOOD_ID = "food_ID";
public static final String FOOD_NAME = "food_name";
public static final String FOOD_CALS = "food_cals";
public static final String FOOD_FAT = "food_fat";
public static final String FOOD_PRO = "food_protein";
public static final String FOOD_CRAB = "food_crabs";
public static final String EXERCISE_NAME = "exercise_name";
public static final String EXERCISE_CALS = "exercise_cals";
public static final String EXERCISE_ID = "exercise_ID";

public static final String TABLE_USERS = "users";
public static final String TABLE_FOOD = "food";
public static final String TABLE_EXERCISE = "exercise";
private static final int DATABASE_VERSION = 10;
private static final String DATABASE_NAME = "nutriwellness.db";

private static final String CREATE_TABLE_USERS = "create table users( id integer primary key autoincrement, "
        + "Name text, Age integer, Gender text, Weight text, Height text, Activitylevel text, numCal float );";

private static final String CREATE_TABLE_FOOD = "create table food( food_ID integer primary key,"
        + "food_name text,food_cals real, food_fat real, food_protein real, food_crabs real );";

private static final String CREATE_TABLE_EXERCISE = "create table exercise( exercise_ID integer primary key,"
        + "exercise_name text,exercise_cals real );";

private SQLiteDatabase database;
private DatabaseHelper dbHelper;

private String[] allColumnsofuserstable = { COLUMN_ID, COLUMN_NAME,
        COLUMN_AGE, COLUMN_GENDER, COLUMN_WEIGHT, COLUMN_HEIGHT,
        COLUMN_CALORIES };

private String[] allColumnoffoodtable = { FOOD_ID, FOOD_NAME, FOOD_FAT,
        FOOD_PRO, FOOD_CRAB };
private String[] allColumnofexercisetable = { EXERCISE_ID, EXERCISE_NAME,
        EXERCISE_CALS };

public DatabaseAdapter(Context context) {

    dbHelper = new DatabaseHelper(context);
}

public static class DatabaseHelper extends SQLiteOpenHelper {

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 12);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(CREATE_TABLE_USERS);
            db.execSQL(CREATE_TABLE_FOOD);
            db.execSQL(CREATE_TABLE_EXERCISE);
        } catch (SQLException e) {

            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(DatabaseHelper.class.getName(),
                "Upgrading database from version " + oldVersion
                        + "to version " + newVersion);

        db.execSQL("DROP TABLE IF EXISTS users");
        db.execSQL("DROP TABLE IF EXISTS food");
        db.execSQL("DROP_TABLE IF EXISTS exercise");

        onCreate(db);

    }

}

public DatabaseAdapter open() throws SQLException {
    database = dbHelper.getWritableDatabase();
    return this;
}

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

// create a user
public long createUser(String name, String age, String gender,
        String weight, String height, String level, float calnum) {

    ContentValues values = new ContentValues();
    values.put(COLUMN_NAME, name);
    values.put(COLUMN_AGE, age);

    values.put(COLUMN_GENDER, gender);

    values.put(COLUMN_WEIGHT, weight);
    values.put(COLUMN_HEIGHT, height);
    values.put(COLUMN_ACTIVITY, level);
    values.put(COLUMN_CALORIES, calnum);

    return database.insert(TABLE_USERS, COLUMN_ID, values);
}

// delete a user by ID
public boolean deleteUser(long rowId) {
    return database.delete(TABLE_USERS, COLUMN_ID + "=" + rowId, null) > 0;
}

// retrieve a list of all users
public Cursor getAllUsers() {
    return database.query(TABLE_USERS, allColumnsofuserstable, null, null,
            null, null, null);

}

// retrieve a particular user
public Cursor getUser(long rowId) throws SQLException {
    Cursor mCursor = database.query(true, TABLE_USERS,
            allColumnsofuserstable, COLUMN_ID + "=" + rowId, null, null,
            null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}

// update a user
public boolean updateUser(long rowId, String Name, int age, String gender,
        String weight, String height, String level, float calnum) {
    ContentValues values = new ContentValues();
    values.put(COLUMN_NAME, Name);
    values.put(COLUMN_AGE, age);

    values.put(COLUMN_GENDER, gender);

    values.put(COLUMN_WEIGHT, weight);
    values.put(COLUMN_HEIGHT, height);
    values.put(COLUMN_ACTIVITY, level);
    values.put(COLUMN_CALORIES, calnum);
    return database.update(TABLE_USERS, values, COLUMN_ID + "=" + rowId,
            null) > 0;
}

// FOOD METHODS !

// Create a new food row
public long createFood(String name, double food_cal, double food_fat,
        double food_proteins, double food_carbs) {
    ContentValues Fvalues = new ContentValues();
    Fvalues.put(FOOD_NAME, name);
    Fvalues.put(FOOD_CALS, food_cal);
    Fvalues.put(FOOD_FAT, food_fat);
    Fvalues.put(FOOD_PRO, food_proteins);
    Fvalues.put(FOOD_CRAB, food_carbs);
    return database.insert(TABLE_FOOD, FOOD_ID, Fvalues);
}

// delete a Food by ID
public boolean deleteFood(long rowId) {
    return database.delete(TABLE_FOOD, FOOD_ID + "=" + rowId, null) > 0;
}

// retrieve a list of all FOOD
public ArrayList<String> getAllfood() {
    Cursor c = database.query(TABLE_FOOD, allColumnoffoodtable, null, null,
            null, null, null);
    ArrayList<String> food = new ArrayList<String>();

    c.moveToFirst();
    while (!c.isAfterLast()) {
        food.add(c.getString(1));
        c.moveToNext();
    }

    return food;

}

// Retrieve a specific Food

public Cursor getFood(long rowId) throws SQLException {
    Cursor mCursor = database.query(true, TABLE_FOOD, allColumnoffoodtable,
            FOOD_ID + "=" + rowId, null, null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}

// Update a food

public boolean updateFood(long rowId, String name, int food_cal,
        int food_fat, int food_proteins, int food_carbs) {
    ContentValues Fvalues = new ContentValues();
    Fvalues.put(FOOD_NAME, name);
    Fvalues.put(FOOD_CALS, food_cal);
    Fvalues.put(FOOD_FAT, food_fat);
    Fvalues.put(FOOD_PRO, food_proteins);
    Fvalues.put(FOOD_CRAB, food_carbs);
    return database
            .update(TABLE_FOOD, Fvalues, FOOD_ID + "=" + rowId, null) > 0;
}

// //////////////////////////////// EXERCISE
// TABLE///////////////////////////////////////////////////

public long createExercise(String name, double exercise_cals) {
    ContentValues Fvalues = new ContentValues();
    Fvalues.put(EXERCISE_NAME, name);
    Fvalues.put(EXERCISE_CALS, exercise_cals);

    return database.insert(TABLE_EXERCISE, EXERCISE_ID, Fvalues);
}

public Cursor getExercise(long rowId) throws SQLException {
    Cursor mCursor = database.query(true, TABLE_EXERCISE,
            allColumnofexercisetable, EXERCISE_ID + "=" + rowId, null,
            null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}

public ArrayList<String> getAllexercise() {
    Cursor c = database.query(TABLE_EXERCISE, allColumnofexercisetable,
            null, null, null, null, null);
    ArrayList<String> exercise = new ArrayList<String>();

    c.moveToFirst();
    while (!c.isAfterLast()) {
        exercise.add(c.getString(1));
        c.moveToNext();
    }

    return exercise;

}

public boolean deleteexercise(long rowId) {
    return database.delete(TABLE_EXERCISE, EXERCISE_ID + "=" + rowId, null) > 0;
}

}

4

2 回答 2

0

就目前而言,您的代码可以正常工作(所有表都在我的测试中正确创建)所以我的假设是您的升级代码导致了问题。

可能是因为您已将版本号 12 硬编码到您的 openhelper 中,并且您之前的数据库也是版本 12,因此没有执行升级,并且数据库处于当前状态。

尝试更改版本号(使用您的类常量)并在更改数据库模式时增加版本号。OnUpgrade仅当指定版本大于数据库版本时才调用。

IE

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

代替

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 12);
    }

此外,“DROP_TABLE IF EXISTS 练习”是无效的 SQL。删除下划线。

于 2012-04-28T10:54:30.343 回答
0

你的代码看起来对我来说很好,但没什么可提的

您已声明数据库版本

私有静态最终 int DATABASE_VERSION = 10;

并在构造函数中使用 12

 public DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, 12);
        }

您可能已经更改了 DATABASE_VERSION 的值,但您在构造函数中使用了静态值。

在升级表中,您在最后一个命令中编写了 DROP_TABLE

    db.execSQL("DROP TABLE IF EXISTS users");
    db.execSQL("DROP TABLE IF EXISTS food");

// here you have used  DROP_TABLE 

    db.execSQL("DROP_TABLE IF EXISTS exercise");

您可以做的是,只需卸载该应用程序并再次安装它就会为您工作。

于 2012-04-28T13:14:30.980 回答