0

我正在尝试插入此数据库,但会出现错误。关于我做错了什么的任何想法?当我尝试加载此片段时,这是一个空异常错误。

助手类:

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL( "CREATE TABLE " + DATABASE_TABLE + " (" +
                                    KEY_ROWID + " INTEGER AUTOINCREMENT, " +
                                    KEY_CHARTING_DATE + " TEXT NOT NULL, " +
                                    KEY_NAME + " TEXT, " +
                                    KEY_CHARTING_TEMPERATURE + " INTEGER, " +
                                    KEY_CHARTING_STAMPS  + " INTEGER, " +
                                    KEY_CHARTING_FERTILE + " TEXT, " +
                                    KEY_CHARTING_NOTES + " TEXT, " +
                                    KEY_CHARTING_PROC + ", " +
                                    "PRIMARY KEY (" + KEY_ROWID + ", " + KEY_CHARTING_DATE + ") ); "
                );
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE + ";");
        onCreate(db);
    }

public long createEntry(String date, String temperature, String fertile, String notes) {
    ContentValues cv = new ContentValues();
    cv.put(KEY_CHARTING_DATE, date);
    cv.put(KEY_CHARTING_TEMPERATURE, temperature);
    cv.put(KEY_CHARTING_FERTILE, fertile);
    cv.put(KEY_CHARTING_NOTES, notes);
    return ourDatabase.insert(DATABASE_TABLE, null, cv);

}

另一个类中的更新按钮:

@Override
public void onClick(View v) {
    sqlDate = (EditText) getView().findViewById(R.id.dateselected);
    sqlTemperature = (EditText) getView().findViewById(R.id.tempvalue);
    sqlFertile = (Switch) getView().findViewById(R.id.fertileswitch);
    sqlNotes = (EditText) getView().findViewById(R.id.chartingnote);

    switch (v.getId()) {
        case R.id.chartingupdate:

            boolean success = true;

            try{
            String date = sqlDate.getText().toString();
            String temperature = sqlTemperature.getText().toString();
            String fertile = sqlFertile.getText().toString();
            String notes = sqlNotes.getText().toString();

            SQLHelper entry = new SQLHelper(getActivity());

            entry.open();
            entry.createEntry(date, temperature, fertile, notes);
            entry.close();
            } catch (Exception e ) {
                success = false;

                String err_msg = e.toString();
                Dialog d = new Dialog(getActivity());
                d.setTitle("Error Inserting");
                TextView tv = new TextView(getActivity());
                tv.setText(err_msg);
                d.setContentView(tv);
                d.show();

            } finally {
                if (success) {
                    Context context = getActivity();
                    Toast.makeText(context, "Charting Successful", Toast.LENGTH_LONG).show();
                } else {
                    Context context = getActivity();
                    Toast.makeText(context, "Charting Unsuccessful", Toast.LENGTH_LONG).show();
                }
            }

            break;
        case R.id.pickdate:
            Context context2 = getActivity();
            Toast.makeText(context2, "Hello toast 2!", Toast.LENGTH_LONG).show();
            break;
    }

}

编辑:

public SQLHelper open() throws SQLException{
    ourHelper = new DbHelper(ourContext);
    ourDatabase = ourHelper.getWritableDatabase();
    return this;
}

错误说:05-12 19:56:23.218: E/SQLiteLog(791): (1) 在“AUTOINCREMENT”附近:语法错误

问题是我的表创建.... PK 在两列上。一个是 AUTOINCREMENT,另一个是日期字段。由于某种原因它不喜欢它。如果我将 PK 更改为只有一个 AUTOINCREMENT 列,它可以工作......我猜我必须将它设置为日期字段。

4

2 回答 2

1

您需要将 KEY_ROWID 声明为主

KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
于 2013-05-12T20:40:18.770 回答
0

您没有提供初始化的代码,ourDatabase但如果您没有正确执行,它必须是:

SQLiteDatabse ourDatabase = getWritableDatabase();

还要使用调试器检查您发送到的所有字段createEntry都不为空(date, temperature, fertile, notes

于 2013-05-11T17:59:46.080 回答