2016-04-19 5 views
-3

Я почти закончил создание своей первой базы данных, однако я думаю, что некоторые из синтаксиса в моем oncreate ошибочны. Я не могу понять, где же? Я пробовал смотреть на учебные пособия и пытался адаптировать свой код к своему, но ничего не работает.Ошибки базы данных SQLite с вводом данных

package com.example.bash1.sqlitediss; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DatabaseHelper extends SQLiteOpenHelper { 
// Database name 
public static final String DATABASE_STOCKDB = "Stock.db"; 
// Column names 
public static final String TABLE_NAME = "stock_table"; 
public static final String COL_1 = "ID"; 
public static final String COL_2 = "Name"; 
public static final String COL_3 = "Datereceived"; 
public static final String COL_4 = "Expirydate"; 

public DatabaseHelper(Context context) { 
    super(context, DATABASE_STOCKDB, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table stock_table " + TABLE_NAME + " (" + COL_1 + "INTEGER PRIMARY KEY,"+ COL_2 + "INTEGER,"+ COL_3 + "INTEGER," + COL_4 +"INTEGER" + ")"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 

    onCreate(db); 
} 

public boolean insertData(String Name, String Datereceived, String Expirydate){ 
SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(COL_2, Name); 
    contentValues.put(COL_3, Datereceived); 
    contentValues.put(COL_4, Expirydate); 
    long result = db.insert(TABLE_NAME,null,contentValues); 

    if (result == -1) 
     return false; 
    else 
     return true; 

    } 
} 

Ошибка заключается в следующем:

Ошибка вставки Имя = SSS DateReceived = s = ExpiryDate s`

android.database.sqlite.SQLiteException: таблица stock_table не имеет столбец с именем Name (код 1):, при компиляции: (??,) INSERT INTO stock_table (имя, DateReceived, ExpiryDate) VALUES

+0

Очевидно, что в вашей таблице stock_table нет столбца с именем Name, только чтение исключения хорошо вас намекает. , , – GingerHead

ответ

0

Вы "create table stock_table" + TABLE_NAME - вы дублируете имя таблицы. Также нет места между именами столбцов и их типом. Попробуйте COL_1 + " INTEGER..." для каждой из ваших колонок.

Кроме того, проверьте, что вы передали значения insertData. Вы проходите в String, но определяете столбцы как INTEGER. Вы уверены, что не хотите ТЕКСТ для столбцов?

Посмотрите на this для дальнейшего ознакомления.

Этот код правильно работал для меня:

public class DatabaseHelper extends SQLiteOpenHelper { 
    // Database name 
    public static final String DATABASE_STOCKDB = "Stock.db"; 
    // Column names 
    public static final String TABLE_NAME = "stock_table"; 
    public static final String COL_1 = "ID"; 
    public static final String COL_2 = "Name"; 
    public static final String COL_3 = "Datereceived"; 
    public static final String COL_4 = "Expirydate"; 


    public DatabaseHelper(Context context) { 
    super(context, DATABASE_STOCKDB, null, 1); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table " + TABLE_NAME + " (" + COL_1 + " INTEGER PRIMARY KEY,"+ COL_2 + " TEXT,"+ COL_3 + " TEXT," + COL_4 +" TEXT" + ")"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 

    onCreate(db); 
    } 

    public boolean insertData(String Name, String Datereceived, String Expirydate){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(COL_2, Name); 
    contentValues.put(COL_3, Datereceived); 
    contentValues.put(COL_4, Expirydate); 
    long result = db.insert(TABLE_NAME,null,contentValues); 
    if (result == -1) 
     return false; 
    else 
     return true; 

    } 

} 

Также в возможно, что база данных находится в неустойчивом состоянии, если вы запустили приложение, а затем изменили базу данных дизайн/схемы и вы не правильно увеличивать номер версии. Попробуйте полностью удалить приложение и переустановить его.

+0

Должен ли я удалить TABLE_NAME из этой строки? –

+0

Удалить «Stock_table». То, что у вас есть сейчас, по существу, «create table stock_table stock_table ...» ' –

+0

Просто удалил его, оставив его как' 'db.execSQL (« create table »+ TABLE_NAME +» («+ COL_1 +» INTEGER PRIMARY KEY, "+ COL_2 +" INTEGER ", + COL_3 +" INTEGER ", + COL_4 +" INTEGER "+") ");' ' Похожая ошибка ...' android.database.sqlite.SQLiteException: table stock_table не имеет столбца с именем Name (код 1): при компиляции: INSERT INTO stock_table (Name, Datereceived, Expirydate) VALUES (?,?,?) ' Еще раз спасибо за помощь –

0

Проблема заключается в том, что ваша команда создания таблицы нет пространства между именем столбца и типом -

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table stock_table " + TABLE_NAME + " (" + COL_1 + "INTEGER PRIMARY KEY,"+ COL_2 + "INTEGER,"+ COL_3 + "INTEGER," + COL_4 +"INTEGER" + ")"); 
} 

Вот почему у вас нет столбца «Имя», а «NameINTEGER». Аналогичная проблема возникает и с другими столбцами. Кроме того, вы вставляете текстовые значения, но у вас есть столбцы целочисленного типа, поэтому меняйте столбцы, кроме первичного ключа, на столбцы типа текста. Измените его на -

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table " + TABLE_NAME + " (" + COL_1 + " INTEGER PRIMARY KEY,"+ COL_2 + " TEXT, "+ COL_3 + " TEXT, " + COL_4 +" TEXT" + ")"); 
} 
+0

Привет, Shadab, изменив его на ... 'db.execSQL (" create table "+ TABLE_NAME +" ("+ COL_1 +" INTEGER PRIMARY KEY, "+ COL_2 +" TEXT ", + COL_3 +" TEXT ", + COL_4 + "TEXT" + ")"); ' Который теперь должен быть прав, показывая сообщение об ошибке, не имеющее коллаборации с именем Name –

+0

Скопируйте тот же код, который я написал, а затем дайте мне знать. , –

+0

Такая же ошибка после ее копирования точно! –

Смежные вопросы