Android SQLite创建表语句

时间:2014-12-14 19:40:17

标签: android mysql sqlite oncreate create-table

我有一个问题,那就是在android中根本没有创建这个表 这是整个MyDBHandler:

package com.example.plrardiakao;

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

public class MyDBHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "MudeDB.db";
    public static final String TABLE_ITEMS = "Items";

    //helper for types
    public static final String VARCHAR_TYPE = " VARCHAR(50)";
    public static final String BOOL_TYPE = " BOOLEAN";
    public static final String INT_TYPE = " INTEGER";

    //helper for column names
    public static final String COLUMN_ENTRY_ID = "id"; //integer
    public static final String COLUMN_TITLE = "itemtitle"; //varchar(50)
    public static final String COLUMN_AUTHOR = "author"; //varchar(50)
    public static final String COLUMN_CATEGORY = "category"; //varchar(50)
    public static final String COLUMN_DATE = "date"; //int
    public static final String COLUMN_TYPE = "type"; //varchar(50)
    public static final String COLUMN_COUNTRY = "country"; //varchar(50)
    public static final String COLUMN_COLOUR = "colour"; //varchar(50)
    public static final String COLUMN_MATERIAL = "material"; //varchar(50)
    public static final String COLUMN_FAVOURITE = "is_favourite"; //boolean
    public static final String COLUMN_IMGRES = "imgres"; //varchar(50)
    public static final String COLUMN_NUMBER_OF_PICS = "nr_of_pics"; // integer

    public MyDBHandler(Context context, String name, 
            CursorFactory factory, int version) {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_ITEMS_TABLE = "CREATE TABLE " + TABLE_ITEMS + 
                "("
                     + COLUMN_ENTRY_ID      + INT_TYPE +" PRIMARY KEY AUTOINCREMENT," 
                     + COLUMN_TITLE         + VARCHAR_TYPE  + ","
                     + COLUMN_AUTHOR        + VARCHAR_TYPE  + ","
                     + COLUMN_CATEGORY      + VARCHAR_TYPE  + ","
                     + COLUMN_DATE          + INT_TYPE      + ","
                     + COLUMN_TYPE          + VARCHAR_TYPE  + ","
                     + COLUMN_COUNTRY       + VARCHAR_TYPE  + ","
                     + COLUMN_COLOUR        + VARCHAR_TYPE  + ","
                     + COLUMN_MATERIAL      + VARCHAR_TYPE  + ","
                     + COLUMN_FAVOURITE     + BOOL_TYPE     + ","
                     + COLUMN_IMGRES        + VARCHAR_TYPE  + ","
                     + COLUMN_NUMBER_OF_PICS + INT_TYPE + 
                ")";
          db.execSQL(CREATE_ITEMS_TABLE);
    }
    //CREATE TABLE Items(id INTEGER PRIMARY KEY AUTOINCREMENT, itemtitle VARCHAR(50),author)
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_ITEMS);
          onCreate(db);
    }

    public void addItem(Item item) {

        ContentValues values = new ContentValues();
        values.put(COLUMN_TITLE, item.getItemTitle());
        values.put(COLUMN_AUTHOR, item.getAuthor());
        values.put(COLUMN_CATEGORY, item.getCategory());
        values.put(COLUMN_DATE, item.getDate());
        values.put(COLUMN_TYPE, item.getType());
        values.put(COLUMN_COUNTRY, item.getCountry());
        values.put(COLUMN_COLOUR, item.getColour());
        values.put(COLUMN_MATERIAL, item.getMaterial());
        values.put(COLUMN_FAVOURITE, item.getFavourite());
        values.put(COLUMN_IMGRES, item.getImgres());
        values.put(COLUMN_NUMBER_OF_PICS, item.getNumberOfPics());

        SQLiteDatabase db = this.getWritableDatabase();

        db.insert(TABLE_ITEMS, null, values);
        db.close();

    }

    public int findPictureNumber(String itemtitle) {
        String query = "SELECT nr_of_pics FROM " + TABLE_ITEMS + " WHERE " +COLUMN_TITLE + "=" + "'"+itemtitle+"'" ;
        SQLiteDatabase db = this.getWritableDatabase();

        Cursor cursor = db.rawQuery(query, null);


        int PicsNumber=0;

        if (cursor.moveToFirst()) {
            cursor.moveToFirst();
            PicsNumber=Integer.parseInt(cursor.getString(0));
            cursor.close();
            return PicsNumber;
        } else {
            //wtf?
        }
            db.close();
            return 0;
    }

    public void changeFavourite(String itemtitle, boolean isFavourite)
    {

        SQLiteDatabase db = this.getWritableDatabase();
        String strSQL = "UPDATE "+TABLE_ITEMS+" SET "+COLUMN_FAVOURITE +"="+ isFavourite +" WHERE columnId = "+ "'"+itemtitle+"'";

        db.execSQL(strSQL);

    }

    public String AuthorName(String itemtitle) {
        String query = "SELECT " +COLUMN_AUTHOR+ " FROM " + TABLE_ITEMS + " WHERE " +COLUMN_TITLE + "=" + "'"+itemtitle+"'" ;

        SQLiteDatabase db = this.getWritableDatabase();

        Cursor cursor = db.rawQuery(query, null);

        String authorname="error1";

        if (cursor.moveToFirst()) {
            cursor.moveToFirst();
            authorname=cursor.getString(0);
            cursor.close();
        } else {
            //wtf?
        }
            db.close();
        return authorname;
    }

} 

有一个错误,可能在Create_table的某个地方,但我不知道在哪里。我知道该表未创建,之前的占位符表存在,并且在执行时它显示某些列不存在的错误;不存在。怎么了?

2 个答案:

答案 0 :(得分:0)

转到Android手机的应用经理。删除与您的应用相关的所有数据。然后尝试运行你的app agian。在CREATE TABLE语句中,您的列名和列类型之间也需要空格。

答案 1 :(得分:0)

为什么你没有发布错误?你可以发布吗?此外,如果您在db表中进行了更改,则必须增加db版本