的onCreate()不调用getWritableDatabase() [英] onCreate() is not called by getWritableDatabase()

查看:150
本文介绍了的onCreate()不调用getWritableDatabase()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写在我的Andr​​oid应用程序的数据库,但没有被创建我的表。我加了破发点,在我的onCreate方法,和我的getWriteableDatabase,并getWritableDatabase叫,但的onCreate不是。

 包com.fslade.app;

进口android.content.Context;
进口android.database.sqlite.SQLiteDatabase;
进口android.database.sqlite.SQLiteOpenHelper;
进口android.util.Log;

公共类DatabaseHelper扩展SQLiteOpenHelper {
    私有静态最后弦乐DATABASE_NAME =的ApplicationData;
    私有静态最终诠释DATABASE_VERSION = 1;
    公共静态最后弦乐DATABASE_TABLE =peopleT;

    //数据库创建SQL语句
    私有静态最后弦乐DATABASE_CREATE =创建表+ DATABASE_TABLE +(_id整数主键自动增量,
            +COMPANY_NAME文字不为空,名称文本不为空,全市文字不为空,垂直文本不为空,标题文本不为空,电子邮件文本不为空,生物文本不为空,图片文字不为空,状态文本不为空);;

    公共DatabaseHelper(上下文的背景下){
        超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
    }

    //方法是创建数据库的过程中调用
    @覆盖
    公共无效的onCreate(SQLiteDatabase数据库){
        database.execSQL(DATABASE_CREATE);
    }

    //方法是数据库,如的升级过程中调用如果增加
    //数据库版本
    @覆盖
    公共无效onUpgrade(SQLiteDatabase数据库,诠释oldVersion,
            INT动态网页){
        Log.w(DatabaseHelper.class.getName(),
                + oldVersion +到从版本升级数据库
                        +动态网页+,这将销毁所有旧数据);
        database.execSQL(DROP TABLE IF EXISTS待办事项);
        的onCreate(数据库);
    }
}
 

和我的数据库帮助我叫getWriteableDatabse():

 包com.fslade.app;

进口android.content.ContentValues​​;
进口android.content.Context;
进口android.database.Cursor;
进口android.database.SQLException;
进口android.database.sqlite.SQLiteDatabase;

公共类ContentStorageHelper {
    公共静态最后弦乐KEY_ID =_id;
    公共静态最后弦乐KEY_COMPANY_NAME =COMPANY_NAME;
    公共静态最后弦乐KEY_PERSON_NAME =名;
    公共静态最后弦乐KEY_CITY =城市;
    公共静态最后弦乐KEY_VERTICAL =垂直;
    公共静态最后弦乐KEY_TITLE =称号;
    公共静态最后弦乐KEY_EMAIL =电子邮件;
    公共静态最后弦乐KEY_BIO =生物;
    公共静态最后弦乐KEY_PHOTO =照片;
    公共静态最后弦乐KEY_STATUS =状态;

    私有静态最后的String []柱= {KEY_ID,KEY_COMPANY_NAME,
            KEY_PERSON_NAME,KEY_CITY,KEY_VERTICAL,KEY_TITLE,KEY_EMAIL,
            KEY_BIO,KEY_PHOTO,KEY_STATUS};

    私人上下文的背景下;
    私人SQLiteDatabase数据库;
    私人DatabaseHelper dbHelper;

    公共ContentStorageHelper(上下文的背景下){
        this.context =背景;
    }

    公共ContentStorageHelper的open()抛出的SQLException {
        dbHelper =新DatabaseHelper(上下文);
        数据库= dbHelper.getWritableDatabase();
        // dbHelper.onCreate(数据库);
//我说这的onCreate(),看看它是否帮助了,但是当我跑了
//它表示已经创建了数据库
        回到这一点;
    }

    公共无效的close(){
        dbHelper.close();
    }

/ **
 *创建一个新的人如果这个人是成功创建返回新
 * ROWID的那个人,否则返回-1表示失败。
 * /
众长createPerson(COMPANY_NAME字符串,字符串名称,字符串的城市,
        垂直字符串,字符串名称,字符串email,字符串生物,
        字符串的照片,字符串状态){
    ContentValues​​ initialValues​​ = createContentValues​​(COMPANY_NAME,姓名,
            城市,垂直,标题,电子邮件,生物,照片,状态);

    返回database.insert(DatabaseHelper.DATABASE_TABLE,空,
            initialValues​​);
}

/ **
 *返回游标在所有的人在数据库中的表
 *
 * @返回光标在所有笔记
 * /
公共光标fetchPeopleByVertical(字符串垂直){
    串选择= KEY_VERTICAL +=+垂直;
        游标结果= database.query(DatabaseHelper.DATABASE_TABLE,列,
                选择,NULL,NULL,NULL,NULL);
        返回结果;
    }

    私人ContentValues​​ createContentValues​​(COMPANY_NAME字符串,字符串名称,
            字符串市,字符串垂直,标题字符串,字符串电子邮件,
            生物字符串,字符串的照片,字符串状态){
        ContentValues​​值=新ContentValues​​();
        values​​.put(KEY_COMPANY_NAME,COMPANY_NAME);
        values​​.put(KEY_PERSON_NAME,姓名);
        values​​.put(KEY_CITY,市);
        values​​.put(KEY_VERTICAL,垂直);
        values​​.put(KEY_TITLE,职称);
        values​​.put(KEY_EMAIL,电子邮件);
        values​​.put(KEY_BIO,生物);
        values​​.put(KEY_PHOTO,照片);
        values​​.put(KEY_STATUS,状态);
        System.out.print(测试+状态);
        返回值;
    }
}
 

解决方案

创建仅发生一次(这是一个数据库,帮助整个意义上的)。

你检查是否已创建数据库?它位于 /data/data/your.package.name/databases/dbname

如果您清除在Android应用程序设置应用程序的数据,你的的onCreate 应再次呼吁...

I am writing a database in my android app, but my tables aren't being created. I added break points at my onCreate method, and my getWriteableDatabase, and getWritableDatabase is called, but onCreate is not.

package com.fslade.app;

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

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "applicationdata";
    private static final int DATABASE_VERSION = 1;
    public static final String DATABASE_TABLE = "peopleT";

    // Database creation sql statement
    private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE + " (_id integer primary key autoincrement, "
            + "company_name text not null, name text not null, city text not null, vertical text not null, title text not null, email text not null, bio text not null, photo text not null, status text not null);";

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

    // Method is called during creation of the database
    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(DATABASE_CREATE);
    }

    // Method is called during an upgrade of the database, e.g. if you increase
    // the database version
    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion,
            int newVersion) {
        Log.w(DatabaseHelper.class.getName(),
                "Upgrading database from version " + oldVersion + " to "
                        + newVersion + ", which will destroy all old data");
        database.execSQL("DROP TABLE IF EXISTS todo");
        onCreate(database);
    }
}

And in my database helper I call getWriteableDatabse():

package com.fslade.app;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class ContentStorageHelper {
    public static final String KEY_ID = "_id";
    public static final String KEY_COMPANY_NAME = "company_name";
    public static final String KEY_PERSON_NAME = "name";
    public static final String KEY_CITY = "city";
    public static final String KEY_VERTICAL = "vertical";
    public static final String KEY_TITLE = "title";
    public static final String KEY_EMAIL = "email";
    public static final String KEY_BIO = "bio";
    public static final String KEY_PHOTO = "photo";
    public static final String KEY_STATUS = "status";

    private static final String[] COLUMNS = { KEY_ID, KEY_COMPANY_NAME,
            KEY_PERSON_NAME, KEY_CITY, KEY_VERTICAL, KEY_TITLE, KEY_EMAIL,
            KEY_BIO, KEY_PHOTO, KEY_STATUS };

    private Context context;
    private SQLiteDatabase database;
    private DatabaseHelper dbHelper;

    public ContentStorageHelper(Context context) {
        this.context = context;
    }

    public ContentStorageHelper open() throws SQLException {
        dbHelper = new DatabaseHelper(context);
        database = dbHelper.getWritableDatabase();
        // dbHelper.onCreate(database);
// I added this onCreate() to see if it helped, but when I ran it
// it said that the database had already been created
        return this;
    }

    public void close() {
        dbHelper.close();
    }

/**
 * Create a new person If the person is successfully created return the new
 * rowId for that person, otherwise return a -1 to indicate failure.
 */
public long createPerson(String company_name, String name, String city,
        String vertical, String title, String email, String bio,
        String photo, String status) {
    ContentValues initialValues = createContentValues(company_name, name,
            city, vertical, title, email, bio, photo, status);

    return database.insert(DatabaseHelper.DATABASE_TABLE, null,
            initialValues);
}

/**
 * Return a Cursor over the list of all people in the database
 * 
 * @return Cursor over all notes
 */
public Cursor fetchPeopleByVertical(String vertical) {
    String selection = KEY_VERTICAL+"="+vertical;
        Cursor result = database.query(DatabaseHelper.DATABASE_TABLE, COLUMNS,
                selection, null, null, null, null);
        return result;
    }

    private ContentValues createContentValues(String company_name, String name,
            String city, String vertical, String title, String email,
            String bio, String photo, String status) {
        ContentValues values = new ContentValues();
        values.put(KEY_COMPANY_NAME, company_name);
        values.put(KEY_PERSON_NAME, name);
        values.put(KEY_CITY, city);
        values.put(KEY_VERTICAL, vertical);
        values.put(KEY_TITLE, title);
        values.put(KEY_EMAIL, email);
        values.put(KEY_BIO, bio);
        values.put(KEY_PHOTO, photo);
        values.put(KEY_STATUS, status);
        System.out.print("test: " + status);
        return values;
    }
}

解决方案

The creation only happens once (that's the whole sense of an database helper).

Did you check whether your database was created? It's located at /data/data/your.package.name/databases/dbname.

If you clear your application data in the android application settings, your onCreate should be called again...

这篇关于的onCreate()不调用getWritableDatabase()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆