Вторая таблица Android не создана - PullRequest
0 голосов
/ 22 ноября 2011

Сначала я создал одну таблицу, которая работала. Во-вторых, я сделал то же самое, но выдает ошибку: нет такой таблицы my_contacts.

Так вот код:

[в основной деятельности]

DBOperations.insert(this, TABLE_MY_CONTACTS, fields, vals);

Где класс DBOperations выглядит так:

public class DBOperations implements Tables {

// inserting 1 contact into a table
public static boolean insert (Context context, String table, ArrayList <String> fields, ArrayList <String> vals) {

    if (fields.size() != vals.size())
        return false;

    MySQLite_methods mysql = new MySQLite_methods (context, table); // creates the table!!!!!!!!!
    ContentValues values = new ContentValues();

    for (int i=0; i<fields.size(); i++)
        values.put(fields.get(i), vals.get(i));

    // checking if the card for that ulink already existed (if so, overwrite)
    String[] COLUMNS = {ULINK};
    SQLiteDatabase dbr = mysql.getReadableDatabase();
    Cursor cursor = dbr.query(table, COLUMNS, null, null, null, null, null);

    SQLiteDatabase dbw = mysql.getWritableDatabase();
    if (cursor == null || cursor.moveToFirst() == false)                
         dbw.insertOrThrow(table, null, values);
    else
        if (cursor.moveToFirst()) {
            String value_ulink = cursor.getString(0);
            Log.d("geo", "val="+value_ulink);
            dbw.update(table, values, ULINK+"='"+value_ulink+"'", null);
        }

    return true;
}

    // ....
}

Класс MySQLite_methods расширяет SQLiteOpenHelper и выглядит следующим образом:

открытый класс MySQLite_methods расширяет SQLiteOpenHelper реализует таблицы {

private static final String DATABASE_NAME = "my_database.db" ;
private static final int DATABASE_VERSION = 1;
private String TABLE_NAME;

/** Create a helper object for the Events database */
public MySQLite_methods (Context ctx, String table_name) 
{
    super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
    this.TABLE_NAME = table_name;
}

@Override
public void onCreate(SQLiteDatabase db) 
{       
    String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + 
                    " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +               
                    NAME + " TEXT NOT NULL," + 
                    PHONE + " TEXT NOT NULL,"+
                    EMAIL + " TEXT NOT NULL,"+                      
                    FACEBOOK + " TEXT,"+
                    WEBSITE + " TEXT,"+
                    MAJOR + " TEXT NOT NULL,"+
                    ULINK + " TEXT NOT NULL" + ");" ;

    Log.d("geo", sql);

    db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}

}

И, наконец, интерфейс Tables выглядит следующим образом:

public interface Tables extends BaseColumns {

/*
 * From the BaseColumns interface we inherit the constants:
 * _ID - The unique ID for a row.
 * _COUNT - The count of rows in a directory.
 */

//tables name
public static final String TABLE_MY_CARD= "my_card" ;
public static final String TABLE_MY_CONTACTS = "my_contacts" ;

// Columns
public static final String NAME = "name" ;
public static final String PHONE = "phone" ;
public static final String EMAIL = "email";

public static final String FACEBOOK = "facebook";
public static final String WEBSITE = "web";
public static final String MAJOR = "major";
public static final String ULINK = "ulink";

}

С теми же шагами я создал другую таблицу, которая была успешной. Но этот я не могу создать вообще!

1 Ответ

2 голосов
/ 22 ноября 2011

Я думаю, что onUpgrade и onCreate не работают так, как вы думаете.

onCreate будет выполняться только тогда, когда необходимо создать файл БД.

onUpgrade on запускается по мере необходимости (т.е. newVersion> oldVersion)

Я полагаю, что происходит то, что первая таблица создается, потому что выполняется onCreate, поскольку БД еще не существует. Затем, когда вы пытаетесь создать вторую таблицу, она не работает, потому что не вызывается ни onCreate, ни onUpgrade.

Вы должны создать все свои таблицы во время onCreate и обрабатывать любую логику обновления, необходимую во время onUpgrade.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...