2015-06-17 14 views
-1

База данных SQLite не создается.
Я использовал метод getwritabledatabase(); в основном классе, но появляется только журнал: «Конструктор называется», а затем приложение закрывается.База данных SQLite не создает

Вот мой код

table extends SQLiteOpenHelper class 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 
import android.widget.Toast; 

import java.sql.SQLDataException; 
import java.sql.SQLException; 

public class Table extends SQLiteOpenHelper { 

private static final String DATABASE_NAME = "Hammas's Database"; 
private static final String TABLE_NAME = "Hammas's Table"; 
private static final int DATABASE_VERSION = 1; 
private static final String ID = "_id"; 
private static final String COLNAME = "Names"; 
private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+" ("+ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+COLNAME+" VARCHAR(255));"; 
private static final String DROP_TABLE = "DROP TABLE IF EXIST "+TABLE_NAME+""; 
private static final String TAG = "Hammas"; 
private Context context; 
public Table(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    this.context = context; 
    Message.message(context,"Constructor is called"); 
    Log.i(TAG,"CONSTRUCTOR IS CALLED"); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 

     db.execSQL(CREATE_TABLE); 
     Message.message(context, "onCreate is called"); 


} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL(DROP_TABLE); 
    onCreate(db); 
    Message.message(context,"onUpgrade is called"); 
} 
} 

класс Message только для тостов.
Вот MainClass

enter code here 

public class MainActivity extends ActionBarActivity { 
Table table; 

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

    table = new Table(this); 
    SQLiteDatabase sql= table.getReadableDatabase(); 


} 
+0

Если файл базы данных уже существует, 'onCreate()' не будет вызываться снова. Если у вас есть «сила закрытия», отправьте исключение stacktrace. – laalto

+0

Можете ли вы просмотреть файловую систему и посмотреть, существует ли .db. Это должно быть: – ApolloSoftware

+0

// данные/данные/<ваше-приложение-имя-пакета>/базы данных – ApolloSoftware

ответ

1

Проверьте файловую систему, чтобы обеспечить:

//data/data/<Your-Application-Package-Name>/databases/Hammas's Database.db 

создан и находится там. Он не будет создан снова, если он уже существует.

2

Эта строка не может быть обработана как

private static final String TABLE_NAME = "Hammas's Table"; 

Она должна быть модифицирована, как

private static final String TABLE_NAME = "[Hammas''s Table]"; 

Поскольку

  • Апострофом является строкой разделителя , поэтому его нужно удвоить.
  • Пробел перерыв имя таблицы, поэтому его необходимо заключить в квадратные скобки ([]).

Это также верно для имен столбцов.
Чтобы вставить апострофы в строковые значения, его также нужно удвоить.

+0

Да это единственная проблема. Ты сохранил много времени – Usman

+0

Фантастический. Теперь вы можете принять мой ответ, чтобы удалить этот пост из очереди без ответа. –

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