Bonjour,

J'ai créer une base de données que j'ai mis dans le repertoire Asset de l'application.

Lors du premier lancement de l'application, cela devrait copier la base de donnée dans /data/data/NOM_PACKAGE/databases/

ma base de données s'appelle produits.db

MAIS cela ne copie pas je pense car il m'indique cette erreur:

08-13 22:02:09.923: ERROR/Database(29474): sqlite3_open_v2("/data/data/com.monapplication/databases/produits.db", &handle, 1, NULL) failed


voici mon code:

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
 
public class DBAdapter {
 
	DatabaseHelper DBHelper;
	Context context;
	SQLiteDatabase db;
	private static String DB_PATH = "/data/data/com.monapplication/databases/";
 
	private static String DB_NAME = "produits.db";
 
	private String myPath = DB_PATH + DB_NAME;
	private final String MY_DATABASE_TABLE = "matable";
 
	public String columnName;
 
	public DBAdapter(Context context) {
		this.context = context;
		DBHelper = new DatabaseHelper(context);
 
	}
 
	public class DatabaseHelper extends SQLiteOpenHelper {
 
		Context context;
 
		public DatabaseHelper(Context context) {
			/** nom de la base et n° de la version */
			super(context, DB_NAME, null, 2);
			this.context = context;
 
		}
 
		@Override
		public void onCreate(SQLiteDatabase db) {
 
		}
 
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
		}
 
	}
 
	public DBAdapter open() {
		boolean dbExist = checkDataBase();
 
		if (dbExist) {
 
		} else {
 
			db = DBHelper.getReadableDatabase();
			try {
				copyDataBase();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			// db = DBHelper.getWritableDatabase();
		}
		return this;
	}
 
	private boolean checkDataBase() {
 
		SQLiteDatabase checkDB = null;
 
		try {
 
			checkDB = SQLiteDatabase.openDatabase(myPath, null,
					SQLiteDatabase.OPEN_READONLY);
 
		} catch (SQLiteException e) {
			// database does't exist yet.
		}
 
		if (checkDB != null) {
 
			checkDB.close();
		}
 
		return checkDB != null ? true : false;
	}
 
	public void close() {
		db.close();
	}
 
 
 
	private void copyDataBase() throws IOException {
 
		// Open your local db as the input stream
		InputStream myInput = context.getAssets().open(DB_NAME);
 
		// Path to the just created empty db
		String outFileName = DB_PATH + DB_NAME;
 
		// Open the empty db as the output stream
		OutputStream myOutput = new FileOutputStream(outFileName);
 
		// transfer bytes from the inputfile to the outputfile
		byte[] buffer = new byte[1024];
		int length;
		while ((length = myInput.read(buffer)) > 0) {
			myOutput.write(buffer, 0, length);
		}
 
		// Close the streams
		myOutput.flush();
		myOutput.close();
		myInput.close();
 
	}
 
}

code de mon activity:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        DBAdapter db = new DBAdapter(this);
        db.open();
 
 
}
Merci.