2013-06-06 3 views
0

У меня ошибка в моем логарифме. ЗдесьКак получить определенные данные в базе данных sqlite в android?

Caused by: android.database.sqlite.SQLiteException: table japanesebaybayin already exists (code 1): , while compiling: CREATE TABLE japanesebaybayin (_id INTEGER, language_japaneseTEXT, language_japaneseeaTEXT, language_tagalogTEXT, language_definitionTEXT); 

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

Это мой код:

public class TranslationActivity extends Activity implements OnClickListener{ 

protected SQLiteDatabase db; 
protected EditText txtenglishAplha; 
protected TextView tvdefinition; 
protected TextView tvtagalog; 
public static final String KEY_ROWID="_id"; 
public static final String KEY_JAPANESE="language_japanese"; 
public static final String KEY_JAPANESEEA="language_japaneseea"; 
public static final String KEY_TAGALOG="language_tagalog"; 
public static final String KEY_DEFINITION="language_definition"; 

private final String DATABASE_NAME = "mydb"; 
private final String DATABASE_TABLE = "japanesebaybayin"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.translation_main); 

    db = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null); 

    //db.execSQL("CREATE TABLE IF NOT EXISTS " + 
    //  DATABASE_TABLE + 
    //  " (rowid INTEGER, japancharacter VARCHAR," + 
    //  " japanalphabet VARCHAR, tagalog VARCHAR, " + 
    //  " definition VARCHAR);"); 

    db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
      KEY_ROWID + " INTEGER, "+ 
      KEY_JAPANESE + "TEXT, " + 
      KEY_JAPANESEEA + "TEXT, " + 
      KEY_TAGALOG + "TEXT, " + 
      KEY_DEFINITION + "TEXT);" 
    ); 

    db.execSQL("INSERT INTO " + 
      DATABASE_TABLE + 
      " Values (1,'\u3042\u308A\u304C\u3068\u3046','arigato','salamat','giving thanks');"); 
    db.execSQL("INSERT INTO " + 
      DATABASE_TABLE + 
      " Values (2,'\u3042\u308A\u304C\u3068\u3046','sayonara','paalam','giving goodbye');"); 

    //Buttons 
    Button btnsearch = (Button) findViewById(R.id.btnsearch); 
    btnsearch.setOnClickListener(this); 

    //Edit Texts 
    txtenglishAplha = (EditText) findViewById(R.id.txtenglishAlpha); 
    txtenglishAplha.requestFocus(); 

    //Text Views 
    tvdefinition = (TextView) findViewById(R.id.tvdefinition); 
    tvtagalog = (TextView) findViewById(R.id.tvtagalog); 


} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.translation, menu); 
    return true; 
} 

@Override 
public void onClick(View view) { 
    // TODO Auto-generated method stub 
    String tagalog="", definition="", japanalpha; 
    Cursor cursor; 
    switch (view.getId()){ 
    case R.id.btnsearch: 

     japanalpha = txtenglishAplha.getText().toString(); 
     String[] columns = new String[] {KEY_JAPANESEEA, KEY_TAGALOG, KEY_DEFINITION}; 
      cursor = db.query(DATABASE_TABLE, columns, KEY_JAPANESEEA + "='"+japanalpha+"'", null, null, null, null); 

     //String qjoiner = "SELECT japanalphabet, tagalog, definition from " +DATABASE_TABLE+ " where japanalphabet ='"+japanalpha+"';"; 
     //Log.i("-----search table joiner----- ",qjoiner); 
     // cursor=db.rawQuery(qjoiner, null); 
     if(cursor != null){ 
      cursor.moveToFirst(); 
      tagalog = cursor.getString(cursor.getColumnIndex(KEY_TAGALOG)).toString(); 
      definition = cursor.getString(cursor.getColumnIndex(KEY_DEFINITION)).toString(); 
      tvtagalog.setText(tagalog); 
      tvdefinition.setText(definition); 
     }else{ 
       tvtagalog.setText(tagalog); 
       tvdefinition.setText(definition); 
     } 

    break; 
    } 

} 

} 

ответ

0

Вы пытаетесь создать таблицу базы данных каждый раз, когда запускается активность/фрагмента.

Вы должны создать его только один раз, так как иначе вы получите сообщение об ошибке, которое вы указали, что таблица уже существует.

Вы должны прочитать документацию для SqliteOpenHelper и использовать это, поскольку он отделяет ваш код базы данных от вашего кода активности и позволяет обрабатывать обновления базы данных и т. Д.

+0

Фактически я уже дважды переименовывал DATABASE_TABLE, но то же сообщение показывало мой логарифм. Можете ли вы мне помочь, для чего это подходящий код? –

+0

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

+0

это еще одно сообщение logcat, с которым я столкнулся. Знаете ли вы, что я должен делать с этим? android.database.sqlite.SQLiteException: нет такого столбца: language_japaneseea (код 1): при компиляции: SELECT language_japaneseea, language_tagalog, language_definition FROM japanesebaybayin WHERE language_japaneseea = 'arigato'; –

0

Ваша ошибка возникает, потому что каждый раз, когда вы запускаете приложение, вы пытаетесь создать таблицу в базе данных. Но весь смысл использования базы данных - хранить данные (независимо от того, работает ли ваше приложение), так что таблица уже существует.

Быстрое решение состоит в том, чтобы просто «СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ», но лучший способ - изучить, как использовать SQLite dbs с Android, в частности класс OpenHelper. http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

+0

HI Я поставил «CREATE TABLE IF NOT EXISTS», что вы сказали, и больше нет сообщения logcat, как то, что я сказал выше. Но другое сообщение logcat для меня показывается, и это: android.database.sqlite.SQLiteException: нет такого столбца: language_japaneseea (код 1): при компиляции: SELECT language_japaneseea, language_tagalog, language_definition FROM japanesebaybayin WHERE language_japaneseea = 'arigato'; hmm Знаете ли вы, как я могу исправить это. Я просто новичок здесь –

+0

Спасибо за ваш ответ. Сейчас он работает. :) Я просто установил его на другой эмулятор. –

0

OOUUCCH !!! Весь этот сантехнический код не очень хорош. Я знаю, что для SQLite необходимо, но вы можете попробовать ORMLite, который является реализацией «Hibernate» для SQLite.

Проверьте мой пример с использованием всех Crud операций плюс намного больше методов с критериями:

https://github.com/nicolasjafelle/AndroidOrmLiteDemo

Как я сказал, это просто пример приложения, но вы можете скопировать и вставить и использовать его на свой собственный риск = D.

+0

Возможно, для более опытного пользователя, но код предполагает, что она новичок, и поэтому должна понимать основы, прежде чем приступать к использованию фреймворков. – Kuffs

1

Ваш запрос создания таблицы неверен. См. Изображение ниже. Я работаю над решением.

enter image description here

вот код, который вы хотите.

import android.app.Activity; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 


public class Test extends Activity { 


protected SQLiteDatabase db; 
public static final String KEY_ROWID="_id"; 
public static final String KEY_JAPANESE="language_japanese"; 
public static final String KEY_JAPANESEEA="language_japaneseea"; 
public static final String KEY_TAGALOG="language_tagalog"; 
public static final String KEY_DEFINITION="language_definition"; 
private final String DATABASE_NAME = "mydb"; 
private final String DATABASE_TABLE = "japanesebaybayin"; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     db = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);  
     db.execSQL("CREATE TABLE if not exists " + DATABASE_TABLE + " (" + 
       KEY_ROWID + " INTEGER, "+ 
       KEY_JAPANESE + " TEXT, " + 
       KEY_JAPANESEEA + " TEXT, " + 
       KEY_TAGALOG + " TEXT, " + 
       KEY_DEFINITION + " TEXT);" // the wrong which you made is here there was no space between column name and type. 
     ); 

     db.execSQL("INSERT INTO " + 
       DATABASE_TABLE + 
       " Values (1,'\u3042\u308A\u304C\u3068\u3046','arigato','salamat','giving thanks');"); 
     db.execSQL("INSERT INTO " + 
       DATABASE_TABLE + 
       " Values (2,'\u3042\u308A\u304C\u3068\u3046','sayonara','paalam','giving goodbye');"); 





     Cursor mCursor = null; 

     try { 
      mCursor = db.rawQuery(" SELECT * FROM japanesebaybayin where language_japaneseea='arigato'", null); 
      // you can change it above query with dynamic inputs. 


     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 

     if(mCursor != null){ 
      mCursor.moveToFirst(); 

      mCursor.getString(mCursor.getColumnIndex(KEY_DEFINITION)).toString(); 

      System.out.println(" 1111 " + mCursor.getString(mCursor.getColumnIndex(KEY_TAGALOG)).toString()); 
      System.out.println(" 222 " + mCursor.getString(mCursor.getColumnIndex(KEY_JAPANESEEA)).toString()); 
      System.out.println(" 333 " + mCursor.getString(mCursor.getColumnIndex(KEY_JAPANESE)).toString()); 
      System.out.println(" 444 " + mCursor.getString(mCursor.getColumnIndex(KEY_DEFINITION)).toString()); 


     } 


} 


} 
+0

привет спасибо за это изображение. Я добавляю пространство к моему коду только к настоящему времени. BUt У меня снова возникла другая проблема, и это согласно моему logcat. Здесь: android.database.sqlite.SQLiteException: нет такого столбца: language_japaneseea (код 1): при компиляции: SELECT language_japaneseea, language_tagalog, language_definition FROM japanesebaybayin WHERE language_japaneseea = 'arigato'; Можете ли вы сказать мне, что мне следует делать? –

+0

Спасибо за ваш ответ и за ваше изображение. Наконец он работает. :) –

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