剛剛開始在Android上,我試圖創建一個簡單的應用程序,它具有用於收集姓名和聯繫人號碼的SQLite數據庫。我創建了一個視圖活動,它將使用simpleCursorAdapter在列表視圖中顯示內容(是的,它的折舊,但我還沒有涉及使用自定義適配器。無論如何,到目前爲止,代碼編譯就好了。當我點擊按鈕開始視圖活動我得到一個SQLiteException沒有這樣的表
SQLite的例外:沒有這樣的表:clientTable(代碼1):在編譯:選擇_id,姓名,手機FROM clientTable
下面是我的數據庫類的代碼。
package com.example.ideahutquizz;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class ClientDatabase extends SQLiteOpenHelper {
public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_MOBILE = "mobile";
public static final String DATABASE_NAME = "clientDatabase";
public static final String TABLE_NAME = "clientTable";
public static final int DATABASE_VERSION = 1;
String CREATE_TABLE = "create table"
+ TABLE_NAME + "("
+ KEY_ROWID + "INTEGER PRIMARY KEY AUTOINCREMENT,"
+ KEY_NAME + "TEXT NOT NULL,"
+ KEY_MOBILE + "TEXT NOT NULL" + ")";
public ClientDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
這裏是視圖活動的代碼
package com.example.ideahutquizz;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class ViewDataActivity extends ActionBarActivity {
Button back;
ListView clientList;
SQLController clientDB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_data);
clientList = (ListView)findViewById(R.id.listView1);
back = (Button)findViewById(R.id.button1);
clientDB = new SQLController(this);
clientDB.open();
Cursor cursor = clientDB.readData();
String[] from = new String[]{ClientDatabase.KEY_ROWID, ClientDatabase.KEY_NAME, ClientDatabase.KEY_MOBILE};
int[] to = new int[]{R.id.textView_id, R.id.textView_name, R.id.textView_mobile};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listview_item_row, cursor, from, to);
adapter.notifyDataSetChanged();
clientList.setAdapter(adapter);
back.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
clientDB.close();
Intent back = new Intent(ViewDataActivity.this, ControlPanel.class);
startActivity(back);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.view_data, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
任何幫助,非常感謝。
更新....
我改變了create table語句如下,但我仍然得到...
private static final String CREATE_TABLE =
"create table " + TABLE_NAME + "("
+ KEY_ROWID + " integer primary key autoincrement,"
+ KEY_NAME + " text not null,"
+ KEY_MOBILE + " text not null" + ")";
還要卸載您的應用程序,以便在重新創建數據庫時'onCreate()'中的問題變得明顯。 http://stackoverflow.com/questions/21881992/when-is-sqliteopenhelper-oncreate-onupgrade-run – laalto 2014-09-02 19:25:09
我在eclipse模擬器上運行這個。我仍然需要卸載嗎? – 2014-09-03 01:51:14
是的,在設備或模擬器上運行並沒有什麼區別。 – laalto 2014-09-03 04:48:16