2012-04-30 4 views
0

Как тема подразумевает, что у меня есть несколько проблем с созданием новой таблицы в sqlite. что я делаю с моим кодом, я не могу создать новую таблицу в db. если я смотрю на db, есть только android_metadata tb и ничего больше. код для создания нового является:не может создать таблицу SQLite/Android

... 
this.createTable(R.string.nametable, "_id INT PRIMARY KEY, " + "parentID INT, " + "name TEXT"); 
... 

public void createTable(int id, String sql) { 
     String table = this.getStringById(id); 
     String _sql = "CREATE TABLE " + table + "(" + sql + ")"; 
     Log.d("Controller.createTable", _sql); 
     this.mCurrentConnection.rawQuery(_sql, null); 
     try { 
      Cursor c = this.Select(id, "*", null); 
      c.close(); 
      Log.d("Controller.createTable", "create finished"); 
     } catch (Exception e) { 
      Log.d("Controller.createTable", "can't create table: " + table); 
     } 
    } 

я открыть или создать БД в застройщик моего приложения

if(this.mCurrentConnection == null || !this.mCurrentConnection.isOpen()) { 
      this.mCurrentConnection = this.mContext.openOrCreateDatabase(this.mDB, Context.MODE_PRIVATE , null); 
     } 

Я пробовал все: изменение названия дб/ТБ, переустановите приложение , размещение ";" или нет в конце команды, попробовал его с новым чистым vm. Я не нашел полезного существующего сообщения/ответа, которые исправить мою проблему. если я выполнить оператор _sql

CREATE TABLE name_table(_id INT PRIMARY KEY, parentID INT, name TEXT) 

в PHPMyAdmin (MySQL) все работает отлично.

Я буду рад, если вы поможете мне.

С уважением Алекс

EDIT: (ответ на комментарии ниже)

@VikramBodicherla: это Проб. сама постановка-постановщик не вызвала никакого изъятия. Выбрать (чек) оператор делает бросить

04-30 07: 34: 14,834: E/базы данных (305): Ошибка вставки ParentId = -1 имя = BlaBla 04-30 07: 34: 14,834 : Е/базы данных (305): android.database.sqlite.SQLiteException:

нет такой таблицы: name_table:, во время компиляции: INSERT INTO name_table (ParentId, имя) ЗНАЧЕНИЯ (?,?); 04-30 07: 34: 14.834: E/Database (305): at android.database.sqlite.SQLiteProgram.native_compile (родной метод) 04-30 07: 34: 14.834: E/Database (305): at android.database.sqlite.SQLiteProgram.compile (SQLiteProgram.java:110) 04-30 07: 34: 14.834: E/Database (305): at android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:59) 04-30 07: 34: 14.834: E/Database (305): at android.database.sqlite.SQLiteStatement. (SQLiteStatement.java:41) 04-30 07: 34: 14.834: E/Database (305)): at android.database.sqlite.SQLiteDatabase.compileStatement (SQLiteDatabase.java:1027) 04-30 07: 34: 14.834: E/Database (305): at android.database.sqlite.SQLi teDatabase.insertWithOnConflict (SQLiteDatabase.java:1413) 04-30 07: 34: 14.834: E/Database (305): at android.database.sqlite.SQLiteDatabase.insert (SQLiteDatabase.java:1286) 04-30 07 : 34: 14.834: E/Database (305): at unicorn.Heurazio.Controller.addName (Controller.java:156) 04-30 07: 34: 14.834: E/Database (305): at unicorn.Heurazio .Controller.install (Controller.java:135) 04-30 07: 34: 14.834: E/Database (305): at unicorn.Heurazio.StartUpActivity.onCreate (StartUpActivity.java:22) 04-30 07: 34: 14.834: E/Database (305): at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 04-30 07: 34: 14.834: E/Database (305): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2459) 04-30 07: 34: 14.834: E/Database (305): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2512) 04-30 07: 34: 14.834: E/Database (305): at android.app.ActivityThread.access $ 2200 (ActivityThread.java:119) 04-30 07:34: 14.834: E/Database (305): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1863) 04-30 07: 34: 14.834: E/Database (305): at android.os. Handler.dispatchMessage (Handler.java:99) 04-30 07: 34: 14.834: E/Database (305): at android.os.Looper.loop (Looper.java:123) 04-30 07:34: 14.834: E/Database (305): at android.app.ActivityThread.main (ActivityThread.java:4363) 04-30 07: 34: 14.834: E/Database (305): at java.lang.reflect .Method.invokeNative (Native M этад) 04-30 07: 34: 14.834: E/Database (305): at java.lang.reflect.Method.invoke (Method.java:521) 04-30 07: 34: 14.834: E/Database (305): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.runZygoteInit.java: 860) 04-30 07: 34: 14.834: E/Database (305): at com.android.internal.os .ZygoteInit.main (ZygoteInit.java:618) 04-30 07: 34: 14,834: E/База данных (305): в dalvik.system.NativeStart.main (Native Method)

+0

Вы пробовали использовать это: http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html – xandy

+0

Можете ли вы также опубликовать logcat stacktrace, пожалуйста? Я предполагаю, что вы работаете с исключением. –

+0

да пробовал тоже. но я думаю, что мне не нужен, поэтому я пропустил этот подход. исправьте меня, если я ошибаюсь. afaik SQLiteOpenHelper - это для Upgrades. – Alex

ответ

1

Вы действительно очень действительно хотите использовать класс SQLiteOpenHelper и связанный с ним pattern: он предназначен не только для апгрейдов, но и для обработки с чисто созданием таблицы (таблиц).

Кроме того, ваше заявление должно создать, вероятно, выглядеть следующим образом:

CREATE TABLE name_table (_id INTEGER PRIMARY KEY AUTOINCREMENT, parentID INTEGER, name TEXT) 

EDIT: от вашего следа, ваш CREATE TABLE не запуская (следовательно, таблица не существует). используйте функцию SQLiteOpenHelper и функцию execSQL, чтобы создать таблицу, и все должно быть установлено.

+0

каждый primkey - автоинкремент в sqlite [ссылка] (http://www.sqlite.org/faq.html#q1). hmmmm kay Я попробую (опять) – Alex

+0

ладно, теперь я знаю, почему это не сработало. я попробовал два подхода 1: реализована SQLiteOpenHelper (так же, как пример) -> работал 2: попробовал снова без SQLiteOpenHelper но с ExecSQL (не rawQuery) -> также работал ошибка была с помощью " rawQuery "вместо" execSQL ". я подумал, что «CREATE TABLE ...» возвращает что-то вроде истины при успешном завершении. но, по-видимому, это не так. благодарит за помощь – Alex

0

04-30 07: 34: 14.834: E/Database (305): Ошибка ввода parentid = -1 name = blabla 04-30 07: 34: 14.834: E/Database (305): android.database.sqlite .SQLiteException:

В соответствии с вашей ошибкой вы пытаетесь вставить -1 в качестве родительского? parentid является Первичным ключом и не принимает отрицательное значение

+0

CREATE TABLE имя_таблицы (_id INT PRIMARY KEY, parentID INT, name TEXT) | это не primkey;) _id is ...;) – Alex

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