Skip to content

Commit 7b7d824

Browse files
committed
add create db on sdcard (感谢 wyouflf 提供)
1 parent d43deae commit 7b7d824

File tree

1 file changed

+89
-70
lines changed

1 file changed

+89
-70
lines changed

src/net/tsz/afinal/FinalDb.java

Lines changed: 89 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -55,54 +55,14 @@ private FinalDb(DaoConfig config){
5555
throw new DbException("daoConfig is null");
5656
if(config.getContext() == null)
5757
throw new DbException("android context is null");
58-
if(config.isSaveOnSDCard()){
58+
if(config.getTargetDirectory() != null && config.getTargetDirectory().trim().length() > 0){
5959
this.db = createDbFileOnSDCard(config.getTargetDirectory(),config.getDbName());
6060
}else{
6161
this.db = new SqliteDbHelper(config.getContext().getApplicationContext(), config.getDbName(), config.getDbVersion(),config.getDbUpdateListener()).getWritableDatabase();
6262
}
6363
this.config = config;
6464
}
6565

66-
/**
67-
* 在SD卡的指定目录上创建文件
68-
* @param sdcardPath
69-
* @param dbfilename
70-
* @return
71-
*/
72-
private SQLiteDatabase createDbFileOnSDCard(String sdcardPath,String dbfilename){
73-
String dbPath=android.os.Environment.getExternalStorageDirectory()
74-
.getAbsolutePath()+(sdcardPath==null||sdcardPath.length()==0?"":"/" +sdcardPath);
75-
String[] dirs = sdcardPath.split("/");
76-
String pathCache =android.os.Environment.getExternalStorageDirectory()
77-
.getAbsolutePath();
78-
for(String dir :dirs){
79-
if(dir.length()==0)
80-
continue;
81-
File dbp=new File(pathCache+"/"+dir);
82-
if(!dbp.exists()){
83-
dbp.mkdir();
84-
pathCache = dbp.getAbsolutePath();
85-
}
86-
}
87-
File dbf=new File(dbPath+"/"+dbfilename);
88-
89-
//数据库文件是否创建成功
90-
boolean isFileCreateSuccess=false;
91-
if(!dbf.exists()){
92-
try{
93-
isFileCreateSuccess=dbf.createNewFile();
94-
}
95-
catch(IOException ioex){
96-
throw new DbException("数据库文件创建失败",ioex);
97-
}
98-
}
99-
else{
100-
isFileCreateSuccess=true;
101-
}
102-
if(isFileCreateSuccess)
103-
return SQLiteDatabase.openOrCreateDatabase(dbf, null);
104-
return null;
105-
}
10666

10767
private synchronized static FinalDb getInstance(DaoConfig daoConfig) {
10868
FinalDb dao = daoMap.get(daoConfig.getDbName());
@@ -112,29 +72,15 @@ private synchronized static FinalDb getInstance(DaoConfig daoConfig) {
11272
}
11373
return dao;
11474
}
115-
/**
116-
* 在sd卡上创建FinalDb
117-
* @param context
118-
* @param targetDirectory 目标目录
119-
*/
120-
public static FinalDb createOnSDCard(Context context,String targetDirectory){
121-
DaoConfig config = new DaoConfig();
122-
config.setContext(context);
123-
config.setSaveOnSDCard(true);
124-
config.setTargetDirectory(targetDirectory);
125-
return getInstance(config);
126-
127-
}
75+
12876
/**
12977
* 创建FinalDb
13078
* @param context
13179
*/
13280
public static FinalDb create(Context context){
13381
DaoConfig config = new DaoConfig();
13482
config.setContext(context);
135-
136-
return getInstance(config);
137-
83+
return create(config);
13884
}
13985

14086
/**
@@ -146,7 +92,7 @@ public static FinalDb create(Context context,boolean isDebug){
14692
DaoConfig config = new DaoConfig();
14793
config.setContext(context);
14894
config.setDebug(isDebug);
149-
return getInstance(config);
95+
return create(config);
15096

15197
}
15298

@@ -159,8 +105,7 @@ public static FinalDb create(Context context,String dbName){
159105
DaoConfig config = new DaoConfig();
160106
config.setContext(context);
161107
config.setDbName(dbName);
162-
163-
return getInstance(config);
108+
return create(config);
164109
}
165110

166111
/**
@@ -174,7 +119,36 @@ public static FinalDb create(Context context,String dbName,boolean isDebug){
174119
config.setContext(context);
175120
config.setDbName(dbName);
176121
config.setDebug(isDebug);
177-
return getInstance(config);
122+
return create(config);
123+
}
124+
125+
126+
/**
127+
* 创建FinalDb
128+
* @param context
129+
* @param dbName 数据库名称
130+
*/
131+
public static FinalDb create(Context context,String targetDirectory,String dbName){
132+
DaoConfig config = new DaoConfig();
133+
config.setContext(context);
134+
config.setDbName(dbName);
135+
config.setTargetDirectory(targetDirectory);
136+
return create(config);
137+
}
138+
139+
/**
140+
* 创建 FinalDb
141+
* @param context
142+
* @param dbName 数据库名称
143+
* @param isDebug 是否为debug模式(debug模式进行数据库操作的时候将会打印sql语句)
144+
*/
145+
public static FinalDb create(Context context,String targetDirectory,String dbName,boolean isDebug){
146+
DaoConfig config = new DaoConfig();
147+
config.setContext(context);
148+
config.setTargetDirectory(targetDirectory);
149+
config.setDbName(dbName);
150+
config.setDebug(isDebug);
151+
return create(config);
178152
}
179153

180154
/**
@@ -193,9 +167,31 @@ public static FinalDb create(Context context,String dbName,boolean isDebug,int d
193167
config.setDebug(isDebug);
194168
config.setDbVersion(dbVersion);
195169
config.setDbUpdateListener(dbUpdateListener);
196-
return getInstance(config);
170+
return create(config);
197171
}
198172

173+
/**
174+
*
175+
* @param context 上下文
176+
* @param targetDirectory db文件路径,可以配置为sdcard的路径
177+
* @param dbName 数据库名字
178+
* @param isDebug 是否是调试模式:调试模式会log出sql信息
179+
* @param dbVersion 数据库版本信息
180+
* @param dbUpdateListener数据库升级监听器:如果监听器为null,升级的时候将会清空所所有的数据
181+
* @return
182+
*/
183+
public static FinalDb create(Context context,String targetDirectory,String dbName,boolean isDebug,int dbVersion,DbUpdateListener dbUpdateListener){
184+
DaoConfig config = new DaoConfig();
185+
config.setContext(context);
186+
config.setTargetDirectory(targetDirectory);
187+
config.setDbName(dbName);
188+
config.setDebug(isDebug);
189+
config.setDbVersion(dbVersion);
190+
config.setDbUpdateListener(dbUpdateListener);
191+
return create(config);
192+
}
193+
194+
199195
/**
200196
* 创建FinalDb
201197
* @param daoConfig
@@ -305,6 +301,7 @@ public void deleteByWhere(Class<?> clazz , String strWhere ) {
305301
debugSql(sql);
306302
db.execSQL(sql);
307303
}
304+
308305
/**
309306
* 删除所有数据表
310307
*/
@@ -679,7 +676,7 @@ public static class DaoConfig{
679676
private int dbVersion = 1; //数据库版本
680677
private boolean debug = true; //是否是调试模式(调试模式 增删改查的时候显示SQL语句)
681678
private DbUpdateListener dbUpdateListener;
682-
private boolean saveOnSDCard = false;//是否保存到SD卡
679+
// private boolean saveOnSDCard = false;//是否保存到SD卡
683680
private String targetDirectory;//数据库文件在sd卡中的目录
684681

685682
public Context getContext() {
@@ -713,13 +710,13 @@ public void setDbUpdateListener(DbUpdateListener dbUpdateListener) {
713710
this.dbUpdateListener = dbUpdateListener;
714711
}
715712

716-
public boolean isSaveOnSDCard() {
717-
return saveOnSDCard;
718-
}
719-
720-
public void setSaveOnSDCard(boolean saveOnSDCard) {
721-
this.saveOnSDCard = saveOnSDCard;
722-
}
713+
// public boolean isSaveOnSDCard() {
714+
// return saveOnSDCard;
715+
// }
716+
//
717+
// public void setSaveOnSDCard(boolean saveOnSDCard) {
718+
// this.saveOnSDCard = saveOnSDCard;
719+
// }
723720

724721
public String getTargetDirectory() {
725722
return targetDirectory;
@@ -730,6 +727,28 @@ public void setTargetDirectory(String targetDirectory) {
730727
}
731728
}
732729

730+
/**
731+
* 在SD卡的指定目录上创建文件
732+
* @param sdcardPath
733+
* @param dbfilename
734+
* @return
735+
*/
736+
private SQLiteDatabase createDbFileOnSDCard(String sdcardPath,String dbfilename){
737+
File dbf = new File(sdcardPath,dbfilename);
738+
if(!dbf.exists()){
739+
try{
740+
if(dbf.createNewFile()){
741+
return SQLiteDatabase.openOrCreateDatabase(dbf, null);
742+
}
743+
}catch(IOException ioex){
744+
throw new DbException("数据库文件创建失败",ioex);
745+
}
746+
}else{
747+
return SQLiteDatabase.openOrCreateDatabase(dbf, null);
748+
}
749+
750+
return null;
751+
}
733752

734753
class SqliteDbHelper extends SQLiteOpenHelper {
735754

0 commit comments

Comments
 (0)