2014-09-02 4 views
0

только что начал на Android, и я пытаюсь создать простое приложение, которое имеет базу данных SQLite для сбора имен и контактов. Я создал активность представления, которая будет отображать содержимое в виде списка с помощью simpleCursorAdapter (да, его обесценили, но я еще не рассмотрел использование пользовательских адаптеров. Во всяком случае, пока код компилируется просто отлично. Его, когда я нажимаю кнопку, чтобы начать вид деятельности я получаю исключениеSQLiteException нет такой таблицы

SQLite: нет такой таблицы: clientTable (код 1):, при компиляции: SELECT _id, имя, мобильный ОТ clientTable

ниже код для моего класса базы данных.

package com.example.ideahutquizz; 

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

public class ClientDatabase extends SQLiteOpenHelper { 

    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_NAME = "name"; 
    public static final String KEY_MOBILE = "mobile"; 

    public static final String DATABASE_NAME = "clientDatabase"; 
    public static final String TABLE_NAME = "clientTable"; 
    public static final int DATABASE_VERSION = 1; 

    String CREATE_TABLE = "create table" 
      + TABLE_NAME + "(" 
      + KEY_ROWID + "INTEGER PRIMARY KEY AUTOINCREMENT," 
      + KEY_NAME + "TEXT NOT NULL," 
      + KEY_MOBILE + "TEXT NOT NULL" + ")"; 

    public ClientDatabase(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      db.execSQL(CREATE_TABLE); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
      onCreate(db); 
     } 
} 

и вот код для вида деятельности

package com.example.ideahutquizz; 

import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 

public class ViewDataActivity extends ActionBarActivity { 

    Button back; 
    ListView clientList; 
    SQLController clientDB; 

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

     clientList = (ListView)findViewById(R.id.listView1); 
     back = (Button)findViewById(R.id.button1); 
     clientDB = new SQLController(this); 
     clientDB.open(); 


     Cursor cursor = clientDB.readData(); 
     String[] from = new String[]{ClientDatabase.KEY_ROWID, ClientDatabase.KEY_NAME, ClientDatabase.KEY_MOBILE}; 
     int[] to = new int[]{R.id.textView_id, R.id.textView_name, R.id.textView_mobile}; 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listview_item_row, cursor, from, to); 
     adapter.notifyDataSetChanged(); 
     clientList.setAdapter(adapter); 

     back.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       clientDB.close(); 
       Intent back = new Intent(ViewDataActivity.this, ControlPanel.class); 
       startActivity(back); 
      } 
     }); 
    } 

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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

любая помощь очень ценится.

обновленный ....

Я изменил создать таблицу заявление следующим образом, но я все еще получаю ту же ошибку ...

private static final String CREATE_TABLE = 
     "create table " + TABLE_NAME + "(" 
     + KEY_ROWID + " integer primary key autoincrement," 
     + KEY_NAME + " text not null," 
     + KEY_MOBILE + " text not null" + ")"; 
+0

Также удалите приложение, чтобы проблемы в 'onCreate()' становились очевидными при воссоздании базы данных. http://stackoverflow.com/questions/21881992/when-is-sqliteopenhelper-oncreate-onupgrade-run – laalto

+0

Я запускаю это на эмуляторе eclipse. Нужно ли еще деинсталлировать? –

+0

Да, работа на устройстве или эмуляторе там не влияет. – laalto

ответ

1

таблица не создается:

String CREATE_TABLE = "create table" 
     + TABLE_NAME + "(" 

будет производить эту строку:

String CREATE_TABLE = "create tableclientTable(" 

Вам необходимо добавить пробел после таблицы создания:

String CREATE_TABLE = "create table " 
     + TABLE_NAME + "(" 

То же самое относится и к именам полей

Таким образом, в конце концов, строка будет:

String CREATE_TABLE = "CREATE TABLE " + 
    TABLE_NAME + " (" + 
    KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
    KEY_NAME + " TEXT NOT NULL, " + 
    KEY_MOBILE + " TEXT NOT NULL" + ")"; 
+0

было бы слишком много, если бы я спросил, можете ли вы переписать весь оператор CREATE_TABLE, потому что я изменил, как вы уже упоминали, но я все еще получаю ошибку. –

+0

Отредактировано решение –

+0

Спасибо, сработало. –

1

Ваш СОЗДАТЬ Заявление TABLE не будет выполнено из-за некоторых недостающих пробелов;

String CREATE_TABLE = "create table" 
     + TABLE_NAME + "(" 
     + KEY_ROWID + "INTEGER PRIMARY KEY AUTOINCREMENT," 
     + KEY_NAME + "TEXT NOT NULL," 
     + KEY_MOBILE + "TEXT NOT NULL" + ")"; 

... приведет к чему-то вроде

create tableclientTable(
    _idINTEGER PRIMARY KEY AUTOINCREMENT, 
    nameTEXT NOT NULL, 
    mobileTEXT NOT NULL) 

... что вызовет синтаксическую ошибку и не создать таблицу.

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