2015-06-11 2 views
-1

Я пытаюсь использовать базу данных, и она жалуется на мой «CREATE TABLE».
Я смотрел на различные посты и «обновил шахту здесь для изменений, которые я сделал в CREATE TABLE).
Это выглядит правильно по сравнению с другими должностями и форумов, так что я не совсем уверен, почему он держит неудачу.
Это только похоже, сбой, когда я пытаюсь вызвать метод «заполняющей игры» в основной операции.
Когда объект только что создан, проблем нет.
Я прочитал что-то о «Когда база данных создается после ее кэширования «и поэтому это не должно повториться.
Итак, я думаю, что мне придется снова сделать базу данных, потому что (возможно) база данных уже кэширована?
Однако w Если объект создан, оператор CREATE TABLE выполняется автоматически, поэтому я не уверен, почему он заворачивается, когда я вызываю метод для заполнения базы данных.Android Studio Создать ошибку базы данных (android.database.sqlite.SQLiteException: near "and": синтаксическая ошибка (код 1):) Подробный анализ

Основная деятельность Класс

package tekvision.codedecrypter; 

import android.content.Intent; 
import android.database.sqlite.SQLiteDatabase; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.Toast; 
import gameInfo.GameDatabase; 


public class MainActivity extends ActionBarActivity { 

//Runs before the application is created 
public Button mCampaignButton; 


//When the application is created 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // 
    // I wanted to call it heat and use it in a toast to make sure its working 
    //Gamedatabase. does not work to find my method 

    // 


    //Keeps screen on so it doesn't fall asleep 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

    //Finding button by button id after application is created 
    mCampaignButton = (Button)findViewById(R.id.campaignButtonID); 

    //Checks if the campaign button is clicked 
    mCampaignButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     //Toast pop up message 
     Toast toast = Toast.makeText(getApplicationContext(), 
      "campaign select", 
       Toast.LENGTH_SHORT); 

     toast.show(); 


     //Intent to go from main activity to campaign Level Select Activity 
     Intent intent = new Intent(MainActivity.this, CampaignSelectLevel.class); 
     startActivity(intent); 


    } 
}); 

}} 

Database Game Class

package gameInfo; 

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

/** 
* Created by User on 06/06/2015. 
*/ 

//Extends the sql database open helper it will be error until the 2 methods  are added plus the constructor 
//the database is saved to a text file 
public class GameDatabase extends SQLiteOpenHelper { 

//Version number of the database 
//Every update to the database will result in going up in the database version number 
private static final int DATABASE_VERSION = 1; 

//Private set of final strings, for the column names in the database 
private static final String DATABASE_NAME = 
    "Database", 
    TABLE_1 = "Answers and Hints", 
    TABLE_2 = "classical", 
    TABLE_3 = "ancient", 
    KEY_ID = "id", 
    KEY_HINT = "hint", 
    KEY_ANSWER = "answer", 
    KEY_QUESTION = "question", 
    KEY_INFO = "info", 
    KEY_IMAGE = "image"; 




    //Database Constructor, sets the databases named and the version of the database 
    public GameDatabase(Context context){ 

super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 


    //Whenever database is created 
//Creating a table with each column and specify each columns type such as text or integer that is the primary key 
@Override 
public void onCreate(SQLiteDatabase db){ 
db.execSQL("CREATE TABLE " + TABLE_1 + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_QUESTION + " TEXT" + KEY_ANSWER + " TEXT" + KEY_IMAGE + "IMAGEVIEW" + KEY_HINT + " TEXT" + KEY_INFO + " TEXT)"); 

} 

//When the database is upgraded 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MODERN); 

onCreate(db); 
} 




//Currently should have ONE row for level on in modern 
public void fillGameDatabase(){ 
    SQLiteDatabase db = getWritableDatabase(); 

    ContentValues values = new ContentValues(); 

    //Fills information for the first row by a few columns 

    //Modern ERA 
    values.put(KEY_QUESTION, "US President"); 
    values.put(KEY_ANSWER, "Barack Obama"); 
    values.put(KEY_HINT, "He is the first African American president"); 
    values.put(KEY_INFO, "Barack Obama is the 44th President of the United States, and the first African American to hold the office. Born in Honolulu, Hawaii, Obama is a graduate of Columbia University and Harvard Law School, where he served as president of the Harvard Law Review. He was a community organizer in Chicago before earning his law degree. He worked as a civil rights attorney and taught constitutional law at University of Chicago Law School from 1992 to 2004. He served three terms representing the 13th District in the Illinois Senate from 1997 to 2004, running unsuccessfully for the United States House of Representatives in 2000."); 
    values.put(KEY_IMAGE, "R.drawable.obama.jpg"); 
    db.insert(TABLE_MODERN, null, values); //inserted a new row into the database 

    db.close(); 

} 


//Gets the answers based on the era nd level provided, 
//db is database extension dont need to pass it 
public Cursor getAnswer(String table, int level){ 
SQLiteDatabase db = getReadableDatabase(); 

Cursor cursor; 

//All one row of data 
String[] projections = {KEY_QUESTION, KEY_ANSWER, KEY_HINT, KEY_INFO, KEY_IMAGE}; 

//Calling query method 
//Pass table name, the projections(names of columns), selection (data argument), selection arguments, group rows 
//filter by row groups, sort order, you can pass null for ones you dont want to enter 
cursor = db.rawQuery("SELECT " + KEY_ANSWER + " FROM " + TABLE_MODERN + " WHERE " + KEY_ID + "=" + level, null); 

db.close(); 
return cursor; 
} 
} 

ответ

1

Ваше имя таблицы содержит пробелы ... так что вы должны заключить его в квадратные скобки, как этот [Answers and Hints].
Или, лучше, использовать подчеркивание, как этот Answers_and_Hints

В противном случае, SQLite DDL (Data Definition Language) будет интерпретировать различные слова как различные команды.

+0

Извините, я не заметил, что пробелы могут повлиять на имена таблиц в базе данных. Это похоже на то, что мой сырой запрос в getAnswer приносит странный код вместо строкового текста. например 3313b4 –

+1

Мне нужно подождать предельное время, прежде чем я смогу принять –

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