Java &引用;调用Landroid/database/sqlite/SQLiteOpenHelper;时堆栈溢出&书信电报;初始化>;:VLLLI“;

Java &引用;调用Landroid/database/sqlite/SQLiteOpenHelper;时堆栈溢出&书信电报;初始化>;:VLLLI“;,java,android,sqlite,Java,Android,Sqlite,Android开发和Java都是新手,尝试将我的查询分离为从数据库管理QueryBase.Java文件继承的查询/命令文件。当我运行应用程序时,出现以下错误: QueryBase上的第18行是: super(context, DATABASE_NAME, null, DATABASE_VERSION); 从QueryBase继承的示例命令文件如下所示: public class QueryBase extends SQLiteOpenHelper { private static fina

Android开发和Java都是新手,尝试将我的查询分离为从数据库管理QueryBase.Java文件继承的查询/命令文件。当我运行应用程序时,出现以下错误:

QueryBase上的第18行是:

super(context, DATABASE_NAME, null, DATABASE_VERSION);
从QueryBase继承的示例命令文件如下所示:

public class QueryBase extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "icantalk.db";
private static final int DATABASE_VERSION = 1;

protected SQLiteDatabase sqdb;
protected QueryBase sqh;

public QueryBase(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION);  

    this.sqh = new QueryBase(context);
    this.sqdb = sqh.getWritableDatabase();
}

@Override
public void onCreate(SQLiteDatabase db) {           
}

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

}
}
public class ChildCommands extends QueryBase  {

public ChildCommands(Context context) {
    super(context);     
}

public long addChild(String name)
{
    ContentValues cv = new ContentValues();     
    cv.put(ChildrenTable.NAME, name);       
    SQLiteDatabase sd = super.getWritableDatabase();        
    long result = sd.insert(ChildrenTable.TABLE_NAME, ChildrenTable.NAME, cv);

    return result;
}   
}
此方法的示例调用如下所示:

private ChildCommands command;
.....

this.command = new ChildCommands(this);
command.addChild(childsNameValue);
这将导致在创建QueryBase的新对象时创建QueryBase的新对象。这是一个永无止境的电话

使用以下命令:

public QueryBase(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION);  

    this.sqh = this;
    this.sqdb = sqh.getWritableDatabase();
}

编辑:顺便说一句,
sqh
不需要,因为这个变量包含它所在的同一个实例(非静态!),所以
sqh==this

ahh我完全忽略了这一点,在构造函数gargh中创建了一个新实例。谢谢,我会试一试的!
public QueryBase(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION);  

    this.sqh = new QueryBase(context);
    this.sqdb = sqh.getWritableDatabase();
}
public QueryBase(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION);  

    this.sqh = this;
    this.sqdb = sqh.getWritableDatabase();
}