Android SQLite datatabse:我是否只需要创建一个DBHelper对象并实例化它来创建一个数据库?

Android SQLite datatabse:我是否只需要创建一个DBHelper对象并实例化它来创建一个数据库?,android,database,sqlite,file,Android,Database,Sqlite,File,SQLite的新特性。只要一个简单的问题,给定我的DBHelper.java,我是否只需要添加以下代码: DBHelper dbhelper= new DBHelper(MainActivity.this); 在my MainActivity.java中创建我的letterhunter.db 不需要调用onCreate方法吗 这是我的DBHelper.java public class DBHelper extends SQLiteOpenHelper { private static fin

SQLite的新特性。只要一个简单的问题,给定我的DBHelper.java,我是否只需要添加以下代码:

DBHelper dbhelper= new DBHelper(MainActivity.this);
在my MainActivity.java中创建我的letterhunter.db

不需要调用onCreate方法吗

这是我的DBHelper.java

public class DBHelper extends SQLiteOpenHelper {
private static final String TAG = "WordDatabase";

//Table names;
public static final String T_NAME = "WORDS";
public static final String T2_NAME = "SCORE";

//Column names
public static final String C_WKEYS = "Word Keys";
public static final String C_WORDS = "List of Words";
public static final String C_SKEYS = "Score Keys";
public static final String C_SCORE = "Score";

//Database info
public static final String DB_NAME = "letterhunter.db";
public static final int DB_VERSION = 1;

private final Context context;
private SQLiteDatabase db;

public DBHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
    this.context = context;
        // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    String sql = String.format("create table %s " + "(%s integer primary key autoincrement, %s text)" , T_NAME, C_WKEYS, C_WORDS);
    Log.d (TAG , "create sql "+sql);    
    db.execSQL(sql);
    fillDB();
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("drop if exists " + T_NAME);
    onCreate(db);
}

private void fillDB(){
    new Thread(new Runnable(){

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                loadWords();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }).start();

}

//Get the listed words in raw/words.txt and insert to the database  
private void loadWords() throws IOException{
    Resources resources = context.getResources();
    InputStream is = resources.openRawResource(R.raw.words);
    BufferedReader br = new BufferedReader(new InputStreamReader(is));      

        String word;
        try {
            while((word=br.readLine()) != null){
                ContentValues values = new ContentValues();
                values.put(C_WORDS, word);

                db.insert(T_NAME, null, values);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    br.close();
    is.close(); 
}   

}
另外,当我在MainActivity中添加上述代码时,我的logcat正在不间断地运行,并且似乎找不到我放在onCreate按钮中的log.d

我是否只需要创建一个DBHelper对象并实例化它来创建一个数据库

实例化帮助程序并对其调用
getWritableDatabase()
,以创建数据库

不需要调用onCreate方法吗


当第一次调用
getWritableDatabase()
并且数据库文件不存在时,框架会调用它。

我通常会将以下方法添加到我的DB helper类中

private SQLiteDatabase db;
...

public void init() {
    if (db == null) {
        db = getWritableDatabase();
    }
}

是的,您只需要实例化它并将上下文作为参数传递,并且无论在哪里调用
getWritableDatabase()
,都会显式地调用onCreate或onUpgrade方法(无论哪个方法是必要的)

PS。当我在MainActivity中添加上述代码时,我的logcat正在不间断地运行,并且似乎找不到日志。d我将其放在onCreate按钮中。
我想建议您解决此问题的方法, 您的Log.i/d/e/v可以通过以下步骤在logcat中轻松跟踪

Log.i/e/v/d
接受两个参数
TAG
String
,其中
String
是可在logcat中显示的消息,
TAG
是可跟踪此消息的标记。在eclipse的logcat视图中,您将发现
+
,如下图所示 单击此图标,它将显示以下窗口。在此窗口中,您只需输入所需的任何过滤器名称,并需要在“按日志标记”字段中输入
标记
。例如,我已输入
Setu
,如果您想跟踪特定日志,还可以添加更多详细信息。在最后一个字段
按日志级别
中,您可以根据您在代码中编写的内容进行适当选择,例如
Log.i的信息
Log.e的错误等; 现在,根据这个例子,只要在我的代码中有以下日志,我就可以通过我指定的过滤器名称在“保存的过滤器”选项卡中跟踪它们。e、 g

Log.i("Setu","This is just and example");
Log.e("Setu","Error occurred here");
Log.d("Setu","Bla... Bla.. Bla...");

您可以创建任意数量的筛选器并跟踪日志

无需调用onCreate方法?
否。它由DBHelper构造函数调用。
DBHelper DBHelper=new DBHelper(ManAcitivty.this)维护性
在my main activityt.java中创建
main activityt?我猜这些是打字错误。。。