androidsqlite:调用onCreate方法并传入对象

androidsqlite:调用onCreate方法并传入对象,android,sqlite,Android,Sqlite,我正在为我正在开发的Android应用程序创建一个数据库。我正在尝试学习如何按照正确的标准编写代码,我在DbHelper类的onCreate方法中读到了这一点,您可以在其中创建数据库。我还了解到,应该在onCreate方法中使用数据填充数据库。这是正确的吗?如果是这样的话,我如何将一个对象传递给onCreate方法,这样我就可以循环遍历它并填充数据库 public class DbHelper extends SQLiteOpenHelper { private static String D

我正在为我正在开发的Android应用程序创建一个数据库。我正在尝试学习如何按照正确的标准编写代码,我在DbHelper类的onCreate方法中读到了这一点,您可以在其中创建数据库。我还了解到,应该在onCreate方法中使用数据填充数据库。这是正确的吗?如果是这样的话,我如何将一个对象传递给onCreate方法,这样我就可以循环遍历它并填充数据库

public class DbHelper extends SQLiteOpenHelper 
{
private static String DATABASE_NAME = "FodoSubstitutes.db";
private static String FOOD_TABLE = "Food";

//Creates the database with db name and calls onCreate(). 
public DbHelper(Context context) 
{
    super(context, DATABASE_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) 
{
    //System.out.println("in onCreate");
    //assocID   food    healthierFood category  description count submittedBy
    String sql = "CREATE TABLE IF NOT EXISTS " + FOOD_TABLE +
                "(Food_ID integer primary key, " + 
                "Food_Name string not null, " +
                "Food_Aliases string, " + 
                "Hints string, " +
                "Category string, " + 
                "Subcategory string, " +
                "Description string, " + 
                "Submission_ID int, " +
                "Comment_ID int, " + 
                "Count int); ";
   db.execSQL(sql);

}
}
我的想法是这样做。
DbHelper.onCreate(Food myFoodObj)

但这是行不通的。有什么想法吗?这一定是我忽略的简单而明显的事情

public class DBAdapter {

 String sql = "CREATE TABLE IF NOT EXISTS " + FOOD_TABLE +
                "(Food_ID integer primary key, " + 
                "Food_Name string not null, " +
                "Food_Aliases string, " + 
                "Hints string, " +
                "Category string, " + 
                "Subcategory string, " +
                "Description string, " + 
                "Submission_ID int, " +
                "Comment_ID int, " + 
                "Count int); ";
private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

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

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

        }

        public void onCreate(SQLiteDatabase db) {
            db.execSQL(sql );

        }

        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DELETE FROM" + DATABASE_USERSTATUS);
            onCreate(db);
        }
    }

    // ---opens the database---
    public SecureSMSDBAdapterAES open() throws SQLException {
        db = DBHelper.getWritableDatabase();

        return this;
    }

    // ---closes the database---
    public void close() {
        DBHelper.close();
    }

    // ---insert values into the database---

    public long insertDataByQuery(String q) {

        db.execSQL(q);

        return 0;
    }
}
在你想要实例化数据库的类中

DBAdapter DBAdapter=新的DBAdapter(此); dbAdapter.open(); //如果有任何疑问,请写在这里 dbadapter.close()

你可以学习这个教程


否无需在
onCreate()中用数据填充数据库。onCreate()仅用于创建数据库和表

我的想法是这样做。DbHelper.onCreate(食物) myFoodObj)

这是错误的,您不需要调用onCreate()
onCreate()
当您仅引用使用数据库类的类的实例时,将调用自身

DbHelper dbhelper = new DbHelper(this);

SQLiteOpenHelper中的onCreate方法用于创建数据库。。。我认为用onCreate方法填充数据库是没有用的。。 正如user1203673所说,您可以将这部分代码添加到DBAdapter类中以填充数据库

public void createcustom(String category,String subcategory){
ContentValues values = new ContentValues(2);
values.put(Category string,category);
values.put(Subcategory string,subcategory);
long insertId = customdb.insert(sqliteplaylist.LIBRARY, null,values);

} 

从您的活动中将其命名为“DBAdapter.createcustom(foodname,foodcategory);”

以下是我最后要做的。我创建了一个DataLyaer类,它与DbHelper一起工作,如下所示

public class DataLayer 
{

private DbHelper _dbHelper;

public DataLayer(Context c) 
{
    _dbHelper = new DbHelper(c);
}


public void populateMyDB(Table myTables ) 
{
    SQLiteDatabase db = _dbHelper.getWritableDatabase();
    try 
    {
        //do stuff. 

    }
    finally
    {
        if (db != null)
            db.close();
    }

}
}
然后我通过这样做调用我的数据层

DataLayer d = new DataLayer(context);
d.populateMyDB(myFood);

谢谢你的帮助。问题是我不知道如何在onCreate()方法中,甚至在我的DbHelper类中添加这些内容。我想我真不敢相信有人在网上发东西

把它分成两部分。第一部分:创建数据库。第二部分:创建一个使用对象更新数据库的方法,比如创建一个名为“addFood”的方法,在该方法中执行适当的
db.execSQL
db.query
等等。您可能还需要一些助手方法,用于检查数据库是否存在等等。此外,请记住这一点: