2016-04-19 3 views
-1

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

04-19 13:47:00.492 26807-26807/com.example.bash1.sqlitediss E/OpenGLRenderer: Getting MAX_TEXTURE_SIZE from GradienCache 
04-19 13:47:00.500 26807-26807/com.example.bash1.sqlitediss E/OpenGLRenderer: MAX_TEXTURE_SIZE: 16384 
04-19 13:47:00.520 26807-26807/com.example.bash1.sqlitediss E/OpenGLRenderer: Getting MAX_TEXTURE_SIZE from Caches::initConstraints() 
04-19 13:47:31.164 26807-26807/com.example.bash1.sqlitediss E/SQLiteLog: (1) near "tablestock_table": syntax error 
04-19 13:47:31.164 26807-26807/com.example.bash1.sqlitediss E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.bash1.sqlitediss, PID: 26807 
android.database.sqlite.SQLiteException: near "tablestock_table": syntax error (code 1): , while compiling: create tablestock_table (IDNameDatereceivedExpirydate) 

Моя функция Код выглядит следующим образом ..

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 { 
public static final String DATABASE_STOCKDB = "Stock.db"; 


public static final String DATABASE_STOCKDB = "Stock.db"; 
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 + COL_2 + COL_3 + COL_4 + ")"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS TABLE_NAME" + 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; 

} 



} 
+1

'create tablestock_table (IDNameDatereceivedExpirydate)' неправильный синтаксис, он должен быть 'create table stock_table (IDNameDatereceivedExpirydate)' .. – Virus

+0

Я не могу найти бит, о котором вы говорите? –

+0

проверить ответ ниже .. это поможет вам. – Virus

ответ

1
db.execSQL("create table " + TABLE_NAME + " (" + COL_1 + COL_2 + COL_3 + COL_4 + ")"); 

просто добавить пробел после "создать таблицу"

+0

Спасибо, Это, казалось, устранило проблему, однако теперь передаю ее, im получая сообщение об ошибке. 'Ошибка вставки Name = e Datereceived = e Expirydate = e' ' android.database.sqlite.SQLiteException: таблица stock_table не имеет столбец с именем Name (код 1): при компиляции: INSERT INTO stock_table (Name, Datereceived, Expirydate) VALUES (?,?,?) ' –

+0

проверить этот учебник, ваш SQL-запрос имеет неправильный синтаксис http://www.androidhive.info/2013/09/android-sqlite-database-with-multiple-tables/ –

+0

проверка ниже ответа. Я упомянул, что не так с вашим кодом. – Virus

1

Проверьте ниже методы в коде

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table " + TABLE_NAME + " (" + COL_1 + " TEXT, " + 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); 
} 
  • В методе OnCreate вы не добавили пространство между create table И TABLE_NAME.

  • В методе onCreate вы не указали тип данных столбцов.

  • В методе onUpgrade вы добавили TABLE_NAME в запрос с переменной TABLE_NAME.

Надеюсь, это поможет.

+0

Все это очень полезно, благодаря его медленной фиксации моей проблемы! Я не понимаю, что вы подразумеваете под методом onUpgrade, но не следует ли его называть TABLE_NAME? –

+0

Это просто означает, что вы выполняете запрос 'DROP TABLE IF EXISTS TABLE_NAME" + TABLE_NAME' в 'onUpgrade()' method..which является неправильным форматом запроса drop table .. потому что во время выполнения он превратится в 'DROP TABLE IF EXISTS TABLE_NAMEstock_table', который приведет к исключению. – ELITE

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