Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的SQLite数据库中的上下文有问题,但我可以';我找不到。(使用SQLiteAssetHelper)_Java_Android_Sql_Database_Sqlite - Fatal编程技术网

Java 我的SQLite数据库中的上下文有问题,但我可以';我找不到。(使用SQLiteAssetHelper)

Java 我的SQLite数据库中的上下文有问题,但我可以';我找不到。(使用SQLiteAssetHelper),java,android,sql,database,sqlite,Java,Android,Sql,Database,Sqlite,我的数据库活动有一些问题 我的数据库(Voedsel.rar)位于assets-databases-Voedsel.rar中 我还有一个SQLView活动,它应该能够查看数据库。此外,我还有SQLite活动(用于向其中写入新产品)和常规数据库活动。我想写入数据库,并查看数据库 共有3列,Product、Eenheid(翻译为“单位”)和Kcal(特定食品特定单位的千卡量)。希望你们都能理解我。:) 我将添加我的活动。若需要布局文件,请毫不犹豫地询问 因此,第一个问题是: 如何修复第46行中的错误

我的数据库活动有一些问题

我的数据库(Voedsel.rar)位于assets-databases-Voedsel.rar中

我还有一个SQLView活动,它应该能够查看数据库。此外,我还有SQLite活动(用于向其中写入新产品)和常规数据库活动。我想写入数据库,并查看数据库

共有3列,Product、Eenheid(翻译为“单位”)和Kcal(特定食品特定单位的千卡量)。希望你们都能理解我。:)

我将添加我的活动。若需要布局文件,请毫不犹豫地询问

因此,第一个问题是:

如何修复第46行中的错误(请参见注释!)?

上下文有什么问题吗

我的数据库活动:

    package com.jacob.eindproject;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

import java.sql.*;

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

public class Database extends SQLiteAssetHelper {

    public static final String KEY_PRODUCT = "Product";
    public static final String KEY_EENHEID = "Eenheid";
    public static final String KEY_KCAL = "Kcal";

    private static final String DATABASE_NAME = "Voedsel";
    private static final String DATABASE_TABLE = "Voeding";
    private static final int DATABASE_VERSION = 1;

    private DbHelper ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDatabase;

    private static class DbHelper extends SQLiteAssetHelper{

        public DbHelper(Context context) {
            super(context, DATABASE_NAME, context.getExternalFilesDir(null).getAbsolutePath(), null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

    }

        @Override
        public void onUpgrade(SQLiteDatabase Voedsel, int oldVersion, int newVersion) {
            Voedsel.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
            onCreate(Voedsel);
        }



    public Database(Context ourContext){ 

//Here is my error. It says: 
//Implicit super constructor 
//SQLiteAssetHelper() is undefined. Must explicitly invoke another constructor

        Context = ourContext;
    }

    public Database open() throws SQLException{
        ourHelper = new DbHelper(ourContext);
        ourDatabase = ourHelper.getWritableDatabase();
        return this;        
    }

    public void close() {

    ourHelper.close();
}



    public long createEntry(String product, String kcal, String eenheid) {
        ContentValues cv = new ContentValues();
        cv.put(KEY_PRODUCT, product);
        cv.put(KEY_EENHEID, eenheid);
        cv.put(KEY_KCAL, kcal);
        return ourDatabase.insert(DATABASE_TABLE, null, cv);

    }

    public String getData() {
        // TODO Auto-generated method stub
        String[] columns = new String[]{ KEY_PRODUCT, KEY_EENHEID, KEY_KCAL};
        Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null);
        String result = "";

        int iProduct = c.getColumnIndex(KEY_PRODUCT);
        int iEenheid = c.getColumnIndex(KEY_EENHEID);
        int iKcal = c.getColumnIndex(KEY_KCAL);

        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
            result = result + c.getString(iProduct) + " " + c.getString(iEenheid) + " " + c.getString(iKcal) + "\n";


        }

        return result;
    }

    public void close(Database database) {
        // TODO Auto-generated method stub

    }



}

您需要调用超级构造函数。下面是一个例子:

super(context, DATABASE_NAME, null, DATABASE_VERSION);
将这一行添加为构造函数中的第一行似乎可以删除错误

public Database(Context context){ 
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
其次,你似乎有一个内在的帮助。我无法想象为什么需要这样做,所以我就把它去掉

private static class DbHelper extends SQLiteAssetHelper{

    public DbHelper(Context context) {
        super(context, DATABASE_NAME, context.getExternalFilesDir(null).getAbsolutePath(), null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

}

最后,我会称你们的类为与数据库不同的类。我认为您可能在某些地方混淆了类,这可能是您的问题的原因。

当我这样做时:公共数据库(上下文ourContext){super(ourContext,Database_NAME,null,Database_VERSION)}我得到错误:“最后一个空白字段ourContext可能没有初始化。”但我已经,对吗?@user3104217:应该可以。你有解决办法吗?@user3104217:编辑了我的答案。