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.

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();
		}
	}
}
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
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();
	}
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
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();
Lorsque je lance l'application je reçoit le message :
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
Et voici mon log, avec le premier statement que j'envoie "BEGIN TRANSACTION" :

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)
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...

Merci de votre aide.