2011-07-09 7 views
0

こんにちはを呼び出すときSqliteOpenHelperそれは私がMyDatabaseというマネージャークラスのオブジェクトを作成していたときにSqliteOPenHelperののonCreate()メソッドが呼び出されますときに私が知りたいのOnCreate()メソッド

質問私はアプリを実行すると、データベースを作成することですが、テーブルは作成されず、例外テーブルはスローされません。

package pk.com.db; 

import org.apache.http.Header; 

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

public class AdatabaseManager { 

    // Constant through out the class we use 

    private SQLiteDatabase sqlitedatabase; //reference to the database manaager 
    private final String DB_NAME = "MYBooks"; 
    private final int DB_VERSION= 1; 


    //Now table name and it's fields 

    private final String DB_TABLE="Book_Details"; //this all constant are use as Key 
    private final String FK_ID="ID"; 
    private final String Field_ONE="NAME"; 
    private final String Field_TWO="PRICE"; 
    private final String Field_THREE="AUTHER"; 
    private CustomSqliteOpenHelper helper; 

    private static final String DATABASE_CREATE = 
      "create table if not exites Book_Details(_id integer primary key autoincrement, " 
      + "NAME text not null,PRICE text not null, " 
      + "AUTHER text not null);"; 



    public AdatabaseManager(Context context){ 
     helper=new CustomSqliteOpenHelper(context); 
     this.sqlitedatabase=helper.getReadableDatabase(); 


    } 
    public void openDb(){ 
     try 
     { 
      this.sqlitedatabase=helper.getWritableDatabase(); 



     }catch (Exception e) { 

      Log.i(getClass().getName(), e.toString()); 
      System.out.print(e); 
     } 

    } 
    public void closedb(){ 
     try{ 
      helper.close(); 

     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    public void addRow(String strName,String strPrice,String strAuother){ 
     try{ 

      ContentValues values=new ContentValues(); 
      values.put(Field_ONE,strName); 
      values.put(Field_TWO,strPrice); 
      values.put(Field_THREE,strAuother); 

      sqlitedatabase.insert(DB_TABLE,null,values); 

     }catch (Exception e) { 
      Log.i(getClass().getName(),e.toString()); 

     }  
    } 

    private class CustomSqliteOpenHelper extends SQLiteOpenHelper 
{ 
    public CustomSqliteOpenHelper(Context context){ 

     super(context,DB_NAME,null,DB_VERSION); 

    } 


    **@Override 
    public void onCreate(SQLiteDatabase db) { 
    try{ 



      db.execSQL(DATABASE_CREATE); 



    }catch (Exception e) { 
     System.out.println("********************************"); 
     System.out.print(e); 
     System.out.println("********************************"); 
    } 

    }** 

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

    } 

} 

}

ここで私が問題の少なくとも一部は、あなたのDATABASE_CREATE文字列のスペルエラーです

//************************************ 
import android.app.Activity; 
import android.os.Bundle; 

public class activity_db extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     AdatabaseManager _adm=new AdatabaseManager(this); //it think it open database 
     /* _adm.openDb(); 
     _adm.addRow("ANDROID EBOOKS","2999","KINGRAJARANN"); 
     _adm.closedb();*/ 


    } 
} 
+0

正しい仮定をしていれば、あなたはCustomSqliteOpenHelperをインスタンス化するとすぐにonCreateが呼び出されます。オーバーライドして自動的にAndroid SDKと呼ばれるコールバックです。 –

+0

しかし、初めてテーブルを作成するときに私の知識に従ってテーブルを作成するときに、テーブルを作成しないでください。 –

答えて

0

私AdatabaseManagerと呼ば:

private static final String DATABASE_CREATE = 
     "create table if not exites Book_Details(_id integer primary key autoincrement, " 
     + "NAME text not null,PRICE text not null, " 
     + "AUTHER text not null);"; 

言葉「が存在します"は" exites "と間違っています。修正され、それは次のようになります。

private static final String DATABASE_CREATE = 
     "create table if not exists Book_Details(_id integer primary key autoincrement, " 
     + "NAME text not null,PRICE text not null, " 
     + "AUTHER text not null);"; 

ところで、あなたのコードは、あなたのopenDBメソッドがどこにも呼ばれているかどうかは表示されません。 onCreateは、openDBメソッドで呼び出されるgetWritableDatabaseを呼び出すまで実際には呼び出されません。