我的数据库活动遇到了一些麻烦。
我有我的数据库(Voedsel.rar),在assets-databases-Voedsel.rar。
我还有一个SQLView活动,它应该能够查看数据库。此外,我有SQLite活动(用于编写新产品。)和我的常规数据库活动。我想写入数据库,并查看数据库。
有3列,Product,Eenheid(翻译为'unit')和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
}
}
答案 0 :(得分:2)
您需要调用超级构造函数。来自this site的示例如下:
super(context, DATABASE_NAME, null, DATABASE_VERSION);
在构造函数中第一行添加此行似乎应该删除错误。
public Database(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
其次,你似乎有一个内在的SQLiteHelp。我无法想象为什么需要它,所以我只是删除它。
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
}
}
最后,我会把你的课程称为与数据库不同的东西。我认为你可能会在某个地方混淆课程,这可能会对你的问题负责。