· 7 years ago · Feb 21, 2019, 12:40 PM
1android.database.sqlite.SQLiteException: table "TOOL" already exists (code 1): , while compiling: CREATE TABLE "TOOL" ("_id" INTEGER PRIMARY KEY ,"NAME" TEXT NOT NULL ,"IMAGE" TEXT,"TYPE" INTEGER NOT NULL ,"LAST_USED_DATE" INTEGER NOT NULL );
2
3public class DatabaseHelper extends DaoMaster.OpenHelper {
4 private SQLiteDatabase db;
5 private DaoMaster daoMaster;
6 private Context context;
7 private static DatabaseHelper mInstance;
8 private DaoSession daoSession;
9 private SQLiteDatabase sqliteDatabase;
10
11 private static String DB_PATH;
12
13 private static String DB_NAME = "main-db";
14public DatabaseHelper(Context context, SQLiteDatabase.CursorFactory factory) {
15 super(context, DB_NAME, factory);
16 this.context = context;
17 if (android.os.Build.VERSION.SDK_INT >= 17) {
18 DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
19 } else {
20 DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
21 }
22 try {
23 createDataBase();
24 } catch (Exception ioe) {
25 throw new Error("Unable to create database");
26 }
27 }
28
29 public static DatabaseHelper getInstance(Context context) {
30 if (mInstance != null)
31 return mInstance;
32
33 mInstance = new DatabaseHelper(context.getApplicationContext(), null);
34 mInstance.db = mInstance.getWritableDatabase();
35 mInstance.daoMaster = new DaoMaster(mInstance.db);
36 mInstance.daoSession = mInstance.daoMaster.newSession();
37 return mInstance;
38 }
39
40
41 public DaoMaster getDaoMaster() {
42 return daoMaster;
43 }
44
45 public DaoSession getDaoSession() {
46 return daoSession;
47 }
48
49 @Override
50 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
51 // TODO Auto-generated method stub
52
53 }
54
55 /**
56 * Open Database for Use
57 */
58 public void openDatabase() {
59 String databasePath = DB_PATH + DB_NAME;
60 sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null,
61 (SQLiteDatabase.OPEN_READWRITE));
62 }
63
64 /**
65 * Close Database after use
66 */
67 @Override
68 public synchronized void close() {
69 if ((sqliteDatabase != null) && sqliteDatabase.isOpen()) {
70 sqliteDatabase.close();
71 }
72 super.close();
73 }
74
75 /**
76 * Get database instance for use
77 */
78 public SQLiteDatabase getSqliteDatabase() {
79 return sqliteDatabase;
80 }
81
82 /**
83 * Create new database if not present
84 */
85 public void createDataBase() {
86 SQLiteDatabase sqliteDatabase = null;
87
88 if (databaseExists()) {
89 /* Check for Upgrade */
90 } else {
91 /* Database does not exists create blank database */
92 sqliteDatabase = this.getReadableDatabase();
93 sqliteDatabase.close();
94
95 copyDataBase();
96 }
97 }
98
99 /**
100 * Check Database if it exists
101 */
102 private boolean databaseExists() {
103 SQLiteDatabase sqliteDatabase = null;
104 try {
105 String databasePath = DB_PATH + DB_NAME;
106 sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null,
107 SQLiteDatabase.OPEN_READONLY);
108 } catch (SQLiteException e) {
109 e.printStackTrace();
110 }
111
112 if (sqliteDatabase != null) {
113 sqliteDatabase.close();
114 }
115 return sqliteDatabase != null ? true : false;
116 }
117
118 /**
119 * Copy existing database file in system
120 */
121 public void copyDataBase() {
122
123 int length;
124 byte[] buffer = new byte[1024];
125 String databasePath = DB_PATH + DB_NAME;
126
127 try {
128 InputStream databaseInputFile = this.context.getAssets().open("databases/" + DB_NAME + ".sqlite");
129 OutputStream databaseOutputFile = new FileOutputStream(databasePath);
130
131 while ((length = databaseInputFile.read(buffer)) > 0) {
132 databaseOutputFile.write(buffer, 0, length);
133 databaseOutputFile.flush();
134 }
135 databaseInputFile.close();
136 databaseOutputFile.close();
137
138 } catch (FileNotFoundException e) {
139 e.printStackTrace();
140 } catch (IOException e) {
141 e.printStackTrace();
142 }
143
144 }
145}