所以在我的應用程序中,我使用get和set方法。當它執行set方法時,應用程序不會崩潰,但當它到達get方法時,它會崩潰。我發現當它到達get方法中的db.query()行時它崩潰了,但我認爲問題也可能在set方法中,因爲它們都給出錯誤消息。插入和執行查詢在android的sqlite數據庫錯誤
這裏是我的代碼:
公共類MyDBHandler擴展SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static final String COLUMN_ID = "_id";
public static final String TABLE_VALUES = "values";
public static final String COLUMN_TARGET = "target";
public static final String COLUMN_CURRENT = "current";
public MyDBHandler(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String query1 = "CREATE TABLE " + TABLE_VALUES + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
COLUMN_TARGET + " INT, " +
COLUMN_CURRENT + " INT);";
db.execSQL(query1);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_VALUES);
onCreate(db);
}
public void setTarget(int tar){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(COLUMN_TARGET, tar);
values.put(COLUMN_CURRENT, 0);
db.insert(TABLE_VALUES, null, values);
db.close();
}
public int getTarget() {
SQLiteDatabase db = this.getReadableDatabase();
int targetVal=0;
String[] columns = {COLUMN_TARGET};
Cursor c = db.query(TABLE_VALUES, columns, null, null, null, null, String.valueOf(1));
if(c.getCount()>0)
{
c.moveToFirst();
targetVal=c.getInt(0);
}
db.close();
c.close();
return targetVal;
}
}
設定功能用在這裏:
public class home extends AppCompatActivity {
MyDBHandler db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
db = new MyDBHandler(this);
}
public void enter(View view)
{
EditText target = (EditText) findViewById(R.id.target);
TextView warning = (TextView) findViewById(R.id.warning);
String check = target.getText().toString();
if(check.equals("")) {
// Intent a = new Intent(this, MainActivity.class);
//startActivity(a);
warning.setText("Please enter a value");
return;
}
else {
int input = Integer.parseInt(check);
Log.d("tag", "111\n");
db.setTarget(input);
Log.d("tag", "222\n");
//int i = db.getTarget();
//Log.d("tag","input is " + i);
Intent a = new Intent(this, MainActivity.class);
startActivity(a);
}
}
}
get函數在這裏使用:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onTrack(View view){
Log.d("tag", "traaaack\n");
Intent i = new Intent(this, Track.class);
startActivity(i);
}
}
,這裏是來自日誌的錯誤消息部分。
這是當集方法被稱爲:
E/SQLiteLog:(1)附近的 「值」:語法錯誤 E/SQLiteDatabase:錯誤插入電流= 0的目標= 2000 android.database.sqlite .SQLiteException:近 「值」:語法錯誤(代碼1):在編譯:INSERT INTO值(電流,目標)VALUES
這是當get方法被調用(?,?):
E/SQLiteLog:(1)接近「值」:語法錯誤 E/AndroidRuntime:FATAL EX CEPTION:main java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.user.calorietracker/com.example.user.calorietracker.Track}:android.database.sqlite.SQLiteException:near「values」:語法錯誤(代碼1):,編譯時:SELECT target FROM values LIMIT 1
我已經嘗試了很多東西來解決它,但無法弄清楚我做錯了什麼。從字面上來說,任何建議都會有所幫助!謝謝
將您的表的名稱從'values'更改爲其他名稱或使用雙引號來轉義表名:'「values」' – Dekel