0

我创建了一个类来使我的代码更干净,这就是它的简单之处,我只是不想使用完整的 ORM:

package com.xxx.xxx.db;

public class DatabaseTable {
    private String TABLE_NAME;
    private String[] COLUMN_NAMES;
    private String[] COLUMN_TYPES;
    private String[] COLUMN_SPECS;

    public DatabaseTable(String TABLE_NAME) {
    this.TABLE_NAME = TABLE_NAME;
    }

    public void insertColumn(String COLUMN_NAME, String COLUMN_TYPE, String COLUMN_SPECS) {
        if (COLUMN_NAME != null && COLUMN_TYPE != null) {
            int actualIndex = this.COLUMN_NAMES.length+1;
            this.COLUMN_NAMES[actualIndex] = COLUMN_NAME;
            this.COLUMN_TYPES[actualIndex] = COLUMN_TYPE;
            if (COLUMN_SPECS != null) {
                this.COLUMN_SPECS[actualIndex] = COLUMN_SPECS;
            }
        }
    }

    public String getCreateString() {
        String textoRetorno = "CREATE TABLE IF NOT EXIST " + this.TABLE_NAME + " (";
        for(int i=0;i<=this.COLUMN_NAMES.length;i++) {
            textoRetorno = textoRetorno + this.COLUMN_NAMES[i] + " " + this.COLUMN_TYPES[i];
            if (this.COLUMN_SPECS[i] != null) {
                textoRetorno = textoRetorno + " " + this.COLUMN_SPECS[i];
            }
        }
        textoRetorno = textoRetorno + ");";
        return textoRetorno;
    }
}

这就是我在我的 SQLiteOpenHelper 类中使用它的方式......

package com.xxx.xxx.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.twomadheads.dietcontroller.db.DatabaseTable;

public class DatabaseHelper extends SQLiteOpenHelper {

    static final String DB_NAME = "EDC.db";
    static final int DB_VERSION = 1;

    //TABLES


    public DatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    DatabaseTable produtos = new DatabaseTable("Produtos");
        produtos.insertColumn("id", "INTEGER", "NOT NULL AUTO_INCREMENT");
        produtos.insertColumn("titulo", "TEXT", "NOT NULL");
        produtos.insertColumn("barcode", "TEXT", "NULL");
        produtos.insertColumn("calorias", "REAL", "NULL");
        produtos.insertColumn("carboidratos", "REAL", "NULL");
        produtos.insertColumn("proteinas", "REAL", "NULL");
        produtos.insertColumn("gorduras totais", "REAL", "NULL");
        produtos.insertColumn("gorduras saturadas", "REAL", "NULL");
        produtos.insertColumn("fibras", "REAL", "NULL");
        produtos.insertColumn("sincronizado", "TEXT", "NULL");

        db.execSQL(produtos.getCreateString());
     }
}

我在 LogCat 上看不到任何错误......所以.. :(

4

1 回答 1

1

问题1:

您的 create table 语句中缺少字母。这是:

CREATE TABLE IF NOT EXIST

并且应该是:

CREATE TABLE IF NOT EXISTS

字母 S?

问题 2:数组未初始化。参考问题3。

问题 3:定位超出数组限制的数组元素。试试下面的代码。它可能无法开箱即用,但应该给你一个线索:

import java.util.ArrayList;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseTable {
    private String TABLE_NAME;
    private ArrayList<String> COLUMN_NAMES;
    private ArrayList<String> COLUMN_TYPES;
    private ArrayList<String> COLUMN_SPECS;

    public DatabaseTable(String TABLE_NAME) {
        this.TABLE_NAME = TABLE_NAME;
        COLUMN_NAMES = new ArrayList<String>();
        COLUMN_TYPES = new ArrayList<String>();
        COLUMN_SPECS = new ArrayList<String>();
    }

    public void insertColumn(String COLUMN_NAME, String COLUMN_TYPE, String COLUMN_SPECS) {
        if (COLUMN_NAME != null && COLUMN_TYPE != null) {
            this.COLUMN_NAMES.add(COLUMN_NAME);
            this.COLUMN_TYPES.add(COLUMN_TYPE);
            this.COLUMN_SPECS.add(COLUMN_SPECS);

        }
    }

    public String getCreateString() {
        String textoRetorno = "CREATE TABLE IF NOT EXIST " + this.TABLE_NAME + " (";
        for(int i=0;i<=this.COLUMN_NAMES.size();i++) {
            textoRetorno = textoRetorno + this.COLUMN_NAMES.get(i) + " " + this.COLUMN_TYPES.get(i);
            if (this.COLUMN_SPECS.get(i) != null) {
                textoRetorno = textoRetorno + " " + this.COLUMN_SPECS.get(i);
            }
        }
        textoRetorno = textoRetorno + ");";
        return textoRetorno;
    }

    class DatabaseHelper extends SQLiteOpenHelper {

        static final String DB_NAME = "EDC.db";
        static final int DB_VERSION = 1;

        //TABLES


        public DatabaseHelper(Context context) {
            super(context, DB_NAME, null, DB_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
        DatabaseTable produtos = new DatabaseTable("Produtos");
            produtos.insertColumn("id", "INTEGER", "NOT NULL AUTO_INCREMENT");
            produtos.insertColumn("titulo", "TEXT", "NOT NULL");
            produtos.insertColumn("barcode", "TEXT", "NULL");
            produtos.insertColumn("calorias", "REAL", "NULL");
            produtos.insertColumn("carboidratos", "REAL", "NULL");
            produtos.insertColumn("proteinas", "REAL", "NULL");
            produtos.insertColumn("gorduras totais", "REAL", "NULL");
            produtos.insertColumn("gorduras saturadas", "REAL", "NULL");
            produtos.insertColumn("fibras", "REAL", "NULL");
            produtos.insertColumn("sincronizado", "TEXT", "NULL");

            db.execSQL(produtos.getCreateString());
         }

        @Override
        public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
            // TODO Auto-generated method stub

        }


    }
}
于 2013-02-16T01:21:06.900 回答