2016-08-09 3 views
0

À propos de mon application: enregistre les performances d'entraînement - une base de données avec plusieurs tables (une table est un journal d'entraînement). Date est le nom de la table (par exemple d2016_08_09). Lorsque l'utilisateur appuie sur "Enregistrer le bouton", l'application définit le nom de la table.SQLiteLog: aucune table de ce type

public static final String DB_NAME ="db_workout";//name of base 
public static String DB_TABLE ="dateOfWorkout";//name of table 
public static final int DB_VER =1; 

public static void setDbTable(String dbTable) { 
    DB_TABLE = dbTable; 
} 

public Base(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, String db_table_name) { 
    super(context, DB_NAME, null, DB_VER); 
    setDbTable(db_table_name); 
    System.out.println(DB_TABLE); 
} 


@Override 


public void onCreate(SQLiteDatabase db){ 
    db.execSQL(
      "create table IF NOT EXISTS "+ DB_TABLE +"(" 
      + "nr integer primary key autoincrement," 
      + "name text," 
      + "s1 integer," 
      + "s2 integer," 
      + "s3 integer," 
      + "s4 integer," 
      + "s5 integer," 
      + "weight integer);" 
      +""); 

} 

public void addWorkoutPlan(String i, int q, int w, int e, int r, int t, int wt) { 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues wartosci = new ContentValues(); 

    wartosci.put("name", i); 
    wartosci.put("s1", q); 
    wartosci.put("s2", w); 
    wartosci.put("s3", e); 
    wartosci.put("s4", r); 
    wartosci.put("s5",t); 
    wartosci.put("weight",wt); 



    db.insertOrThrow(DB_TABLE, null, wartosci); 
} 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    //uzupelnic 

} 

et la classe où j'utilise ajouter la date à fonder

sNameTable = "d"+sNameTable; 
    db= new Base(this,null,null,0,sNameTable); 

    bAddDate = (Button) findViewById(R.id.bAddDate); 



    bAddDate.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      setValues(); // setting values 





       for (int i = 0; i < 1; i++) { 

        db.addWorkoutPlan(
          tName[0][i].toString(),//nazwa cwiczenia 
          Integer.parseInt(tSeries[0][i].getText().toString()),//1. seria 
          Integer.parseInt(tSeries[1][i].getText().toString()), 
          Integer.parseInt(tSeries[2][i].getText().toString()), 
          Integer.parseInt(tSeries[3][i].getText().toString()), 
          Integer.parseInt(tSeries[4][i].getText().toString()), 
          Integer.parseInt(tWeight[0][i].getText().toString()) 

        ); 
       } 

       Context context = getApplicationContext(); 
       CharSequence text = "Trening dodany"; 
       int duration = Toast.LENGTH_SHORT; 
       Toast toast = Toast.makeText(context, text, duration); 
       toast.show(); 


     } 
    }); 
} 

quand j'appuyez sur le bouton pour ajouter la date, application se bloque et obtenir ce journal Android Studio:

23190-23190/com.example.konra_000.workoutplan E/SQLiteLog: (1) aucune table de ce type: d2016_08_09

23190-23190/com.example.konra_000.workoutplan E/AndroidRuntime: EXCEPTION FATAL: principal processus: com.example.konra_000.workoutplan, PID: 23190 android.database.sqlite.SQLiteException: pas de tableau: d2016_08_09 (code 1), lors de la compilation: INSERT INTO d2016_08_09 (nom, s3, poids, s2, s1, s5, s4) VALUES (?,?,?,?,?,?,?)

+1

Vous ne devriez jamais mettre des informations dans le nom de la table. Faites de la date une colonne supplémentaire. –

Répondre

0

Lorsque vous faites fils passe à la base de données SQLite, parfois les changements Je ne peux pas voir parce que votre logique pour créer une base de données n'est pas optimisée.

Si une ancienne version de la base de données est probablement installée sur votre appareil, désinstallez et réinstallez l'application.