2013-05-29 5 views
4

Я создаю свое первое приложение для Android, и у меня возникают проблемы с созданием второй таблицы в моей базе данных.Android/SQLite/Несколько таблиц

Это мой код:

(DatabaseHelper.java)

public class DataBaseHelper extends SQLiteOpenHelper { 
    public DataBaseHelper(Context context, String name,CursorFactory factory, int version) 
    { 
       super(context, name, factory, version); 
    } 
    // Called when no database exists in disk and the helper class needs 
    // to create a new one. 
    @Override 
    public void onCreate(SQLiteDatabase _db) 
    { 
      _db.execSQL(DatabaseFunc.DATABASE_CREATE); 
      _db.execSQL(DatabaseFunc.DATABASE_CREATE2); 

    } 
    // Called when there is a database version mismatch meaning that the version 
    // of the database on disk needs to be upgraded to the current version. 
    @Override 
    public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) 
    { 
      // Log the version upgrade. 
      Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " +_newVersion + ", which will destroy all old data"); 

      // Upgrade the existing database to conform to the new version. Multiple 
      // previous versions can be handled by comparing _oldVersion and _newVersion 
      // values. 
      // The simplest case is to drop the old table and create a new one. 
      _db.execSQL("DROP TABLE IF EXISTS " + "LOGIN"); 
      _db.execSQL("DROP TABLE IF EXISTS " + "SMSREG"); 
      // Create a new one. 
      onCreate(_db); 
    } 

} 

(DatabaseFunc.java)

public class DatabaseFunc 
{ 
     static final String DATABASE_NAME = "login.db"; 
     static final int DATABASE_VERSION = 1; 
     public static final int NAME_COLUMN = 1; 
     // TODO: Create public field for each column in your table. 
     // SQL Statement to create a new database. 
     static final String DATABASE_CREATE = "create table "+"LOGIN"+ 
            "(" +"ID"+" integer primary key autoincrement,"+ "USERNAME text,PASSWORD text, TEAMID text) "; 
     static final String DATABASE_CREATE2 = "create table "+"SMSREG"+"" + 
       "(" +"ID"+" integer primary key autoincrement,"+ "TONUM text, MESSAGE text, SUCCESS text) "; 
     // Variable to hold the database instance 
     public SQLiteDatabase db; 
     // Context of the application using the database. 
     private final Context context; 
     // Database open/upgrade helper 
     private DataBaseHelper dbHelper; 
     public DatabaseFunc(Context _context) 
     { 
      context = _context; 
      dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 
     public DatabaseFunc open() throws SQLException 
     { 
      db = dbHelper.getWritableDatabase(); 
      return this; 
     } 
     public void close() 
     { 
      db.close(); 
     } 

     public SQLiteDatabase getDatabaseInstance() 
     { 
      return db; 
     } 

     public void insertEntry(String userName,String password) 
     { 
      ContentValues newValues = new ContentValues(); 
      // Assign values for each row. 
      newValues.put("USERNAME", userName); 
      newValues.put("PASSWORD",password); 
      newValues.put("TEAMID", "0"); 

      // Insert the row into your table 
      db.insert("LOGIN", null, newValues); 
      ///Toast.makeText(context, "Reminder Is Successfully Saved", Toast.LENGTH_LONG).show(); 
     } 

     public void insertNewSMS(String SMSNumber, String Message, String Success) { 
      ContentValues SMSPut = new ContentValues(); 
      SMSPut.put("TONUM", SMSNumber); 
      SMSPut.put("MESSAGE", Message); 
      SMSPut.put("SUCCESS", Success); 
      db.insert("SMSREG", null, SMSPut); 
     } 

     public String DisplaySMS() { 

      String tempholder = ""; 
      Cursor cursor1=db.query(false, "SMSREG", null, null, null, null, null, null, null); 
      cursor1.moveToFirst(); 
      while (cursor1.isAfterLast() == false) 
      { 
       tempholder += ""+ cursor1.getString(cursor1.getColumnIndex("TONUM")) + ":@[email protected]:" + cursor1.getString(cursor1.getColumnIndex("MESSAGE")) + ":@[email protected]:" + cursor1.getString(cursor1.getColumnIndex("SUCCESS")) + ":@[email protected]:"; 
       cursor1.moveToNext(); 
      } 

      cursor1.close(); 
      return tempholder; 
     } 
     public int deleteEntry(String UserName) 
     { 
      //String id=String.valueOf(ID); 
      String where="USERNAME=?"; 
      int numberOFEntriesDeleted= db.delete("LOGIN", where, new String[]{UserName}) ; 
      // Toast.makeText(context, "Number fo Entry Deleted Successfully : "+numberOFEntriesDeleted, Toast.LENGTH_LONG).show(); 
      return numberOFEntriesDeleted; 
     } 
     public String getSinlgeEntry() 
     { 
      Cursor cursor=db.query(false, "LOGIN", null, null, null, null, null, null, null); 
      if(cursor.getCount()<1) // UserName Not Exist 
      { 
       cursor.close(); 
       return "NOT EXIST"; 
      } 
      cursor.moveToFirst(); 
      String password= cursor.getString(cursor.getColumnIndex("PASSWORD")); 
      String username= cursor.getString(cursor.getColumnIndex("USERNAME")); 
      String teamids = cursor.getString(cursor.getColumnIndex("TEAMID")); 
      cursor.close(); 
      return username + ":@[email protected]:" + password + ":@[email protected]:" + teamids;    
     } 
     public void updateEntry(String userName,String password) 
     { 
      // Define the updated row content. 
      ContentValues updatedValues = new ContentValues(); 
      // Assign values for each row. 
      updatedValues.put("USERNAME", userName); 
      updatedValues.put("PASSWORD",password); 
      updatedValues.put("TEAMID", "0"); 

      String where="USERNAME = ?"; 
      db.update("LOGIN",updatedValues, null, null);    
     } 

     public void updateTeamID(String TeamID) 
     { 
      // Define the updated row content. 
      ContentValues updatedValuesa = new ContentValues(); 
      // Assign values for each row. 
      updatedValuesa.put("TEAMID", TeamID); 
      db.update("LOGIN",updatedValuesa, null, null);    
     } 
} 

Логин стол отлично работает, он создает, получает данные введены в это нормально, и он извлечен ОК, но в соответствии с редактором SQLite, доступным для эмулятора, таблица SMSREG никогда не создается ... Надеюсь, кто-то может посоветовать, поскольку я тянул за волосы RS !! :)

Я попытался добавить и удалить полуточку в конце SQL-выражений, но это, похоже, не имеет значения.

Ваша помощь в продвинутой работе будет очень оценена.

+0

Я просто попробовал свой код на реальном устройстве. Создал экземпляр DatabaseFunc и вызвал open(). Проверяли файл базы данных с помощью корневого браузера, эти две таблицы создаются правильно ... –

ответ

2

Try изменения

static final int DATABASE_VERSION = 1; 

в

static final int DATABASE_VERSION = 2; 

Я подозреваю, что вы запускали код после того, как вы создали только первую таблицу, а затем добавили код, чтобы создать второй. Поскольку номер версии не изменился, он считает, что он уже создан версии 1, поэтому не запускает создание. В качестве альтернативы вы можете удалить базу данных с устройства, а затем сохранить ее в версии 1 будет нормально.

Приращивание DATABASE_VERSION приведет к запуску метода onUpgrade, который в свою очередь вызывает onCreate.

+0

Это ошибка и исправлена ​​проблема - Большое вам спасибо. Часы вытягивания волос и одно целое изменение! Хотел бы я проголосовать за ваш ответ, но я не могу, поскольку я новичок. – user2434123

+0

Это похоже на многие вещи, это легко, когда вы знаете, как это сделать. Рад помочь. – HexAndBugs

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