2016-04-28 20 views
0

私はsqliteファイルをチェックしても、上記のエラーが発生していますが、テーブルにエントリがないのにウォッチリストテーブルが含まれています。android.database.sqlite.SQLiteException:いいえそのようなテーブル:

DBAdapter.java

package hp.vamazon; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DBAdapter { 

    private static final String TAG = "DBAdapter"; //used for logging database version changes 

    // Field Names: 
    public static final String bookID = "bookid";//==KEYROW_ID 
    public static final String bookName = "bookname";//==KEY_TASK 
    public static final String bookPrice = "bbp";//==KEY_DATE 
    public static final String storeName = "storename"; 

    public static final String[] ALL_KEYS = new String[] {bookID,bookPrice,bookName,storeName}; 

    // Column Numbers for each Field Name: 
    public static final int COL_ROWID = 0; 
    public static final int COL_TASK = 1; 
    public static final int COL_DATE = 2; 
    public static final int COL_STORE = 3; 

    // DataBase info: 
    public static final String DATABASE_NAME = "bookstore"; 
    public static final String DATABASE_TABLE = "watchlist"; 
    public static final int DATABASE_VERSION = 2; // The version number must be incremented each time a change to DB structure occurs. 

    //SQL statement to create database 
    private static final String DATABASE_CREATE_SQL = 
      "CREATE TABLE " + DATABASE_TABLE 
      + " (" + bookID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + bookName + " TEXT NOT NULL, " 
      + bookPrice + " TEXT, " 
      + bookPrice + " TEXT " 
      + ");"; 

    private final Context context; 
    private DatabaseHelper myDBHelper; 
    private SQLiteDatabase db; 


    public DBAdapter(Context ctx) { 
     this.context = ctx; 
     myDBHelper = new DatabaseHelper(context); 
    } 

    // Open the database connection. 
    public DBAdapter open() { 
     db = myDBHelper.getWritableDatabase(); 
     return this; 
    } 

    // Close the database connection. 
    public void close() { 
     myDBHelper.close(); 
    } 

    // Add a new set of values to be inserted into the database. 
    public long insertRow(String bookname, String price,String id ,String store) { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(bookID,id); 
     initialValues.put(bookPrice,price); 
     initialValues.put(bookName,bookname); 
     initialValues.put(storeName,store); 
     // Insert the data into the database. 
     return db.insert(DATABASE_TABLE, null, initialValues); 
    } 

    // Delete a row from the database, by rowId (primary key) 
    public boolean deleteRow(long rowId) { 
     String where = bookID + "=" + rowId; 
     return db.delete(DATABASE_TABLE, where, null) != 0; 
    } 

    public void deleteAll() { 
     Cursor c = getAllRows(); 
     long rowId = c.getColumnIndexOrThrow(bookID); 
     if (c.moveToFirst()) { 
      do { 
       deleteRow(c.getLong((int) rowId));    
      } while (c.moveToNext()); 
     } 
     c.close(); 
    } 

    // Return all data in the database. 
    public Cursor getAllRows() { 
     String where = null; 
     Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, where, null, null, null, null, null); 
     if (c != null) { 
      c.moveToFirst(); 
     } 
     return c; 
    } 

    // Get a specific row (by rowId) 
    public Cursor getRow(long rowId) { 
     String where = bookID + "=" + rowId; 
     Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, 
         where, null, null, null, null, null); 
     if (c != null) { 
      c.moveToFirst(); 
     } 
     return c; 
    } 

    // Change an existing row to be equal to new data. 
    public boolean updateRow(long rowId, String task, String date) { 
     String where = bookID + "=" + rowId; 
     ContentValues newValues = new ContentValues(); 
     newValues.put(bookName, task); 
     newValues.put(bookPrice, date); 
     // Insert it into the database. 
     return db.update(DATABASE_TABLE, newValues, where, null) != 0; 
    } 


    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 
     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase _db) { 


db.execSQL(DATABASE_CREATE_SQL); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) { 
       } 
    } 


} 

hp.vamazon.Watchlist.populatListViewFromDBでhp.vamazon.DBAdapter.getAllRowsでWatchlist.java

package hp.vamazon; 

import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v4.widget.SimpleCursorAdapter; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView;  
import android.widget.ListView; 

public class Watchlist extends Activity { 


    DBAdapter myDb; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_watchlist); 

     openDb(); 
     populatListViewFromDB(); 
    } 
    private void openDb() { 
     myDb=new DBAdapter(this); 
     myDb.open();   
    } 

    private void populatListViewFromDB() { 


     Cursor cursor=myDb.getAllRows(); 

     startManagingCursor(cursor); 

     String []fromFieldNames=new String[]{DBAdapter.bookName,DBAdapter.bookPrice,DBAdapter.storeName}; 
     int []toViewIDs=new int[]{R.id.item_name,R.id.item_price,R.id.item_store}; 

     SimpleCursorAdapter myCursorAdapter=new SimpleCursorAdapter(this,R.layout.cartitem_view 
       ,cursor,fromFieldNames,toViewIDs); 


     ListView myList=(ListView)findViewById(R.id.listView1); 
     myList.setAdapter(myCursorAdapter); 

    } 
    private void registerClickCallback() 
    { 
     ListView myList=(ListView)findViewById(R.id.listView1); 
     myList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Cursor cursor=myDb.getRow(id); 
      if(cursor.moveToFirst()) 
      { 
       myDb.deleteRow(id); 
       populatListViewFromDB(); 
      } 
      cursor.close(); 
      } 
     }); 
    } 

} 

(DBAdapter.java:93)
( Watchlist.java:37)

+0

あなたの努力のおかげで、私は自分自身で問題を解決しました。問題は、データベースを持っていないので、データベースの例外をスローするコードを引き起こしていたすべての関数で、SQLiteデータベースの新しいインスタンスを定義しなかったことです。 –

答えて

2

SQLiteOpenHelperを拡張するクラスは、onCreateの方法でcqlコマンドを実行する必要があります。はい確かにあなたがテーブルを作成するために、最終的な文字列DATABASE_CREATE_SQLとしてコマンドを作成している。しかし、そのテーブルが作成されていないので、executeにこれを忘れてしまっています

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(DATABASE_CREATE_SQL); 
} 

のように、テーブルをreate。あなたに気づかせるには、onCreateonUpgradeのメソッドは空です。

hereDatabaseHelperSQLiteOpenHelperをどのように作成したかを参照してください。

+0

onCreate()メソッドで上記の行を追加して、テーブルが存在し、onUpdate()内でonCreate()を呼び出すと、コードは同じエラーを表示します。 –

+0

私のアプリケーションのsqliteデータベースは、テーブルが空であるにもかかわらず、(sqliteブラウザで検証された)テーブルを既に含んでいます –

+0

Bro、私は本当に私が2日間休暇中で、あなたのテーブルは何でも作成されていないことを確認してください。 –

0

android.database.sqlite.SQLiteException:あなたの場合には、そのようなテーブル

あなたが任意のテーブルを作成していませんでしたので、これはocurringされます。 DatabaseHelperにはonCreate()を含める必要があります。ドキュメントから

:データベースが初めて作成されたときに呼び出され

。これは、テーブルの作成とテーブルの初期の集計が行われる場所です。

次のようにして、そこにテーブルを作成する必要があります。

db.execSQL(DATABASE_CREATE_SQL); //It will create the table 
+0

私のアプリケーションのsqliteデータベースは、テーブルが空であるにもかかわらずsqliteブラウザによって検証されたテーブルを既に含んでいます。 –

+0

@vibhorvaishあなたの問題を解決しましたか? –

0

をあなたはDatabaseHelperクラスにあるのOnCreateとONUPGRADE方法で任意のコードを持っていません。あなたがテーブルを作成するためには、ExecSQLコマンドを実行する必要があり まず:

@Override 
     public void onCreate(SQLiteDatabase _db) {  
_db.execSQL(DATABASE_CREATE_SQL); 
     } 

そしてONUPGRADEのMethodeのは、次のコードを参照してください:

 @Override 
    public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) { 

     String Query = "DROP TABLE IF EXISTS Your_Table_Name" 
     _db.execSQL(Query); 
     onCreate(_db); 

       } 
+0

onCreate()メソッドで上記の行を追加し、テーブルが存在し、onUpdate()内でonCreate()を呼び出す場合でも、コードは同じエラーを表示します。 –

+0

私のアプリケーションのsqliteデータベースは、テーブルが空ですが(sqliteブラウザによって検証された)テーブルを既に含んでいます。 –

0

を私はものの、質問にあなたの努力の人たちに感謝し、自分自身を解決しました。問題は、データベースを持っていないので、データベースの例外をスローするコードを引き起こしていたすべての関数で、SQLiteデータベースの新しいインスタンスを定義しなかったことです。

関連する問題