简体   繁体   English

SQLiteAssetHelper和getWritableDatabase

[英]SQLiteAssetHelper and getWritableDatabase

I'm having have some trouble with my Database activity. 我的数据库活动遇到了一些麻烦。 I am unable to write to the database and view the database using the following code. 我无法使用以下代码写入数据库并查看数据库。

my Database activity: 我的数据库活动:

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 void close(Database database) {
            // TODO Auto-generated method stub

        }




    public Database(Context c){
        ourContext = c;
    }

    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 iRow = c.getColumnIndex(KEY_PRODUCT);
        int iName = c.getColumnIndex(KEY_EENHEID);
        int iHotness = c.getColumnIndex(KEY_KCAL);

        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
            result = result + c.getString(iRow) + " " + c.getString(iName) + " " + c.getString(iHotness) + "\n";


        }

        return result;
    }
}

My SQLView activity: 我的SQLView活动:

package com.jacob.eindproject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SQLView extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sqlview);
        TextView tv = (TextView) findViewById(R.id.tvSQLinfo);
        Database info = new Database(this);
        info.open();
        String data = info.getData();
        info.close();
        tv.setText(data);





    }

}

SQLite activity: SQLite活动:

package com.jacob.eindproject;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.View.OnClickListener;


public class SQLite extends Activity implements View.OnClickListener {

    Button sqlUpdate, sqlView;
    EditText sqlVoeding, sqlKcal, sqlEenheid;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sqllite);
        sqlUpdate = (Button) findViewById(R.id.bSQLUpdate);
        sqlVoeding = (EditText) findViewById(R.id.etSQLVoeding);
        sqlEenheid = (EditText) findViewById(R.id.etSQLEenheid);
        sqlKcal = (EditText) findViewById(R.id.etSQLKcal);

        sqlView = (Button) findViewById(R.id.bSQLopenView);
        sqlView.setOnClickListener((android.view.View.OnClickListener) this);
        sqlUpdate.setOnClickListener((android.view.View.OnClickListener) this);
    }

    public void onClick(View arg0) {
        switch (arg0.getId()) {
        case R.id.bSQLUpdate:


            boolean didItWork = true;
            try{            
            String voeding = sqlVoeding.getText().toString();
            String Kcal = sqlKcal.getText().toString();
            String eenheid = sqlEenheid.getText().toString();

            Database entry = new Database(SQLite.this);
            entry.open();
            entry.createEntry(voeding, Kcal, eenheid);
            entry.close();

            }catch (Exception e ){
                didItWork = false;

            }finally{
                if (didItWork){
                    Dialog d = new Dialog(this);
                    d.setTitle("Heak Yeay");
                    TextView tv = new TextView(this);
                    tv.setText("Succes");
                    d.setContentView(tv);
                    d.show();
            }
        }

            break;
        case R.id.bSQLopenView:
            Intent i = new Intent(this, SQLView.class);
            startActivity(i);


        }
        }

    public void onClick(DialogInterface arg0, int arg1) {
        // TODO Auto-generated method stub

    }

    }

I am having my database file(Voedsel.rar), in assets/databases/Voedsel.rar . 我的资产/数据库/Voedsel.rar中有我的数据库文件(Voedsel.rar)。

To write to your database, try a method like this: 要写入数据库,请尝试以下方法:

public void insertVoeding(String product, String eenheid, String kcal) {
    ourDatabase.execSQL("INSERT INTO Voeding (Product, Eenheid, Kcal) VALUES (?, ?, ?)",
              new String[] {product, eenheid, kcal});
}

The question marks are replaced by the values in the string array. 问号将替换为字符串数组中的值。 Your column names cannot be inserted using the string array, because the execSQL method puts quotation marks around these values. 您不能使用字符串数组插入列名,因为execSQL方法会在这些值前后加上引号。 The query will fail if you try. 如果尝试,查询将失败。

There are two ways to read from a database (may even be two ways to write to it, too). 有两种读取数据库的方法(甚至可能有两种写入数据库的方法)。 I personally prefer using raw queries, like this one to get the entire database: 我个人更喜欢使用原始查询,像这样的查询来获取整个数据库:

public Cursor getEntireDB() {
    return ourDatabase.rawQuery("SELECT * FROM Voeding");
}

You can then use the cursor in a CursorAdapter to create a list. 然后,您可以在CursorAdapter中使用光标来创建列表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM