SQLiteデータベースを作成して、データを初期設定しています。私は、Eclipseでのデバッガを介して、プログラムを実行すると、画面に何も表示されませんが、私はLogCatから次を得る:SQLiteでテーブルが作成されていません
sqlite returned: error code = 1, msg = no such table: Issues
は、ここでは、コードの一部です(私は必要なのものだけを表示するようにしようとするでしょうが、あなたが必要な場合は詳細を参照するために、plzは)私に知らせてください:
MainActivity.java IssueInfoCreatorため
public class MainActivity extends Activity {
//TAG for LogCat.
public static final String TAG = "SQLiteDebug";
private ListView mListViewIssues;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Load listview control.
mListViewIssues = (ListView)findViewById(R.id.listIssues);
//Create Data Creator.
IssueInfoCreator creator = new IssueInfoCreator(this);
creator.open();
try {
creator.insertRandomData();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//add data to listview through adapter.
mListViewIssues.setAdapter(new IssueInfoAdapter(this, creator.queryAll()));
//Close connection.
creator.close();
}
}
コード:
public class IssueInfoCreator {
//DB Adapter.
private DBAdapter mDBAdapter;
//Constructor.
public IssueInfoCreator(Context c){
mDBAdapter = new DBAdapter(c);
}
//Open DBAdapter.
public void open(){
mDBAdapter.open();
}
//Insert Random Data to get started.
public void insertRandomData() throws ParseException{
long i = 999;
Date dtDate = new Date();
dtDate.parse("1/12/2012");
mDBAdapter.insertIssue(i++, dtDate, "This is my ticket. I'm having trouble starting my sim.");
mDBAdapter.insertIssue(i++, dtDate, "I can't my sim to turn on, please help.");
mDBAdapter.insertIssue(i++, dtDate, "Aircraft is not responding to callsign.");
mDBAdapter.insertIssue(i++, dtDate, "TTS is not recognising when we attempt to land an aircraft.");
}
//Get all Issues from DB.
public List<IssueInfo> queryAll(){
return mDBAdapter.fetchAllIssues();
}
//close connection.
public void close(){
mDBAdapter.close();
}
}
DBAdapterため
コード:
public class DBAdapter {
//Database fields.
public static final String ISSUES_TABLE = "Issues";
public static final String COL_ISSUE_ID = "_id";
public static final String COL_DATE_RECEIVED = "DateReceived";
public static final String COL_ISSUE_SUMMARY = "IssueSummary";
//Declarations.
private Context mContext;
private SQLiteDatabase mDB;
private DBHelper mDBHelper;
//Constructor.
public DBAdapter(Context c){
mContext = c;
}
//Open DB Connection.
public DBAdapter open() throws SQLException{
mDBHelper = new DBHelper(mContext);
mDB = mDBHelper.getWritableDatabase();
return this;
}
//Close DB Connection.
public void close(){
mDBHelper.close();
}
//remaining code omitted for brevity...
}
し、最終的にDBHelperのためのコード:
public class DBHelper extends SQLiteOpenHelper {
//Constants
private static final String DB_NAME = "dbOpenIssues";
private static final int DB_VERSION = 1;
private static final String CREATE_DB_SQL =
"CREATE TABLE Issues (" +
"_id int PRIMARY KEY, " +
"DateReceived datetime NOT NULL, " +
"IssueSummary text NOT NULL " +
");";
private static final String DROP_TABLE =
"DROP TABLE IF EXISTS Issues";
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_DB_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DROP_TABLE);
onCreate(db);
}
}
私は付属のエミュレータでそれを実行した場合、私はDBは、ファイルエクスプローラではなく、私がある場合に作成されることがわかりますそれをローカルにプルダウンしてSQLiteManで開くと、android_metadataテーブルのみが表示されます。
アイデア?もう一度、長いポストにごめんなさい、何も残したくないので、10回別々に再投稿しなければなりません。
UPDATE:私が試した
ことの一つは、LogCatでSQL文を印刷しましたが、私はと呼ばれることは決してありません(DBHelper中)のonCreateに気づい:
public void onCreate(SQLiteDatabase db){
Log.e("DB ERROR -- ", CREATE_DB_SQL);
db.execSQL(CREATE_DB_SQL);
}
でもこれを試しましたが運がありません....同じエラーです。 – Robert
ファイルシステムからデータベースを削除し、再度アプリケーションを実行してみてください。 – Yury
DBを削除してプログラムを再度実行すると、問題が解決されました。信じられないほど、笑...助けてくれてありがとう、私はこれに何時間も執着していた。このアプリはデータを表示していない(しかし、SQLiteManを通してそこにあることを確認した)が、私はそれを理解できると信じている。 エミュレータはDBをメモリなどにキャッシュしていますか? – Robert