2014-11-12 3 views
-2

Я читал много учебников, но мне все еще сложно. Затем я скопирую часть в Eclipse, чтобы попробовать, и она не работает. . Я проверяю файл, проверяя, что база данных не создана. Следующее - мой код. пожалуйста, помогите и спасибо.Почему моя база данных SQL не создана? (Android)

Это помощник базы данных.

package com.example.trydb; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 
public class DBHelper extends SQLiteOpenHelper { 
    public static final String TABLE_NAME = "friends"; 
    public static final String NAME = "name"; 
    public static final String TEL = "tel"; 
    public static final String EMAIL = "email"; 
    private final static String DATABASE_NAME = "demo.db"; 
    private final static int DATABASE_VERSION = 1; 
    public DBHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     Log.d("Database operations","Database created "); 
    } 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + NAME + "CHAR," + TEL + "CHAR," +  EMAIL + "CHAR);"); 
     Log.d("Database operations","Database created successfully"); 
    } 
    @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME; 
      db.execSQL(DROP_TABLE);  
      onCreate(db); 
    } 
} 

И это основное мероприятие.

package com.example.trydb; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 


public class MainActivity extends ActionBarActivity { 
    private DBHelper dbhelper ; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     dbhelper = new DBHelper(this); 
     dbhelper.close(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, 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); 
    } 
} 
+1

Вы пропустили пробелы в своем запросе создания. (но ничего, что вы бы не узнали, просто потратив время на чтение stacktrace.) – njzk2

+1

Прежде всего - предоставить журнал. После этого - удалите 'dbhelper.close()'. ** Почему? ** Подробнее о подключении и использовании 'SQLite' в ** Android **. –

ответ

0

Вам необходимо позвонить getWritableDatabase() или getReadableDatabase() на помощнике базы данных на самом деле создать базу данных. Недостаточно одного экземпляра помощника.

Дальнейшее чтение: When is SQLiteOpenHelper onCreate()/onUpgrade() run?

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

1

Попробуйте изменить к этому

@Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" 
     + NAME + " CHAR," 
     + TEL + " CHAR," 
     + EMAIL + " CHAR" 
     + ")"; 
     db.execSQL(CREATE_TABLE); 
     Log.d("Database operations","Database created successfully"); 
    } 
0

Попробуйте добавить пробел между столбцами.

0

С docs метода getWritibleDatabase();

Создание и/или открыть базу данных, которая будет использоваться для чтения и записи. В первый раз, когда это будет вызвано, база данных будет открыта, и будут вызываться onCreate (SQLiteDatabase), onUpgrade (SQLiteDatabase, int, int) и/или onOpen (SQLiteDatabase).

Итак ...

После открытия успешно, база данных в кэше, поэтому вы можете вызывать этот метод каждый раз, когда вам нужно написать в базу данных. (Обязательно вызовите функцию close(), когда вам больше не нужна база данных.) Ошибки, такие как неправильные разрешения или полный диск, могут привести к сбою этого метода, но будущие попытки могут быть успешными, если проблема исправлена.

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