Bonjour,
j'essaie de récupérer un fichier SQL depuis les assets. J'ai suivit le tutorial suivant :
http://www.julienlabeaume.com/blog/7...nees-statiques
Ma classe gérant la connexion avec la BD.
La seconde gérant les insert/update... :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 package historySensei.SenseiDev.bd; import java.io.InputStream; import tools.FileHelper; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class HistoryDbHelper extends SQLiteOpenHelper { private static final String TABLE_PLAYER = "table_player"; private static final String COL_ID = "_id"; private static final String COL_ID_PLAYER = "id_player"; private static final String COL_EPOCH = "epoch"; private static final String COL_SCORE = "score"; private Context myContexte; private static final String CREATE_BDD = "CREATE TABLE " + TABLE_PLAYER + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_ID_PLAYER + " NUMERIC, " + COL_EPOCH + " NUMERIC, " + COL_SCORE + " NUMERIC);"; public HistoryDbHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); myContexte = context; } @Override public void onCreate(SQLiteDatabase db) { Log.v("Debug", "On create 1"); //db.execSQL(CREATE_BDD); try { InputStream is = myContexte.getResources().getAssets().open("install.sql"); Log.v("Debug", "On create 2"); String[] statements = FileHelper.parseSqlFile(is); for (String statement : statements) { Log.v("Debug", "" + statement); db.execSQL(statement); } } catch (Exception ex) { ex.printStackTrace(); } } }
Et l'activité utilisant la bd :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package historySensei.SenseiDev.bd; // Import / nom colonnes enlevé pour la lisibilité. public class PlayerDb { // private Context myContext; private HistoryDbHelper m_historyDb; private SQLiteDatabase m_bdd; public PlayerDb(Context _context) { Log.v("Debug", "Constructeur"); m_historyDb = new HistoryDbHelper(_context, NOM_BDD, null, VERSION_BDD); m_historyDb.onCreate(m_bdd); } public void open() { Log.v("Debug", "open"); m_bdd = m_historyDb.getWritableDatabase(); } public void close() { m_bdd.close(); }
Lorsque je lance l'application je reçoit le message :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class ActStoryMode extends Activity { private PlayerDb playerDb; /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.storymode); Log.v("Debug", "New player"); playerDb = new PlayerDb(this); Log.v("Debug", "Open"); playerDb.open();
Et voici mon log, avec le premier statement que j'envoie "BEGIN TRANSACTION" :08-25 16:51:03.354: I/Database(32491): sqlite returned: error code = 1, msg = statement aborts at 2: [BEGIN TRANSACTION] cannot start a transaction within a transaction
Si j'utilise la méthode standard (sans source d'un fichier), cela fonctionne bien. Je suis complétement perdu, et je ne trouve rien sur google...08-25 16:51:03.344: V/Debug(32491): On create 1
08-25 16:51:03.344: V/Debug(32491): On create 2
08-25 16:51:03.354: V/Debug(32491): BEGIN TRANSACTION
08-25 16:51:03.354: I/Database(32491): sqlite returned: error code = 1, msg = statement aborts at 2: [BEGIN TRANSACTION] cannot start a transaction within a transaction
08-25 16:51:03.354: E/Database(32491): Failure 1 (cannot start a transaction within a transaction) on 0x2e4270 when executing 'BEGIN TRANSACTION'
08-25 16:51:03.354: W/System.err(32491): android.database.sqlite.SQLiteException: cannot start a transaction within a transaction: BEGIN TRANSACTION
08-25 16:51:03.354: W/System.err(32491): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
08-25 16:51:03.354: W/System.err(32491): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1771)
08-25 16:51:03.354: W/System.err(32491): at historySensei.SenseiDev.bd.HistoryDbHelper.onCreate(HistoryDbHelper.java:56)
08-25 16:51:03.354: W/System.err(32491): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:126)
Merci de votre aide.
Partager