我正在开发一个存储sql文件的android应用程序来更新sqlite数据库。当用户按下某个按钮时,该sql脚本将运行。这是我把我的sql文件放在哪里
到目前为止,我一直在使用此解决方案来运行我的脚本: 首先,将我的更新映射到资源为update.xml
<resources>
<string name="update_list">
v2_9_11
</string>
<string-array name="v2_9_11">
<item>1_AlterTable_wapactivity</item>
</string-array>
</resources>
使用此方法在文件中获取sql脚本:
private void runScript(String version_name){
try{
String[] sql_list = mGap.getResources().getStringArray(getArrayIdentifier(mGap, version_name));
for (String sql : sql_list) {
InputStream in = getClass().getResourceAsStream("/com/ods/scm/script/update/"+version_name+"/"+sql+".sql");
Reader fr = new InputStreamReader(in, "utf-8");
BufferedReader br = new BufferedReader(fr);
String s="";
String baris;
while((baris=br.readLine())!=null){
s+=baris;
}
mDbHelper.executeStatement(s);
}
insertUpdate(version_name);
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
我从update.xml获取String version_name和String [] sql_list文件名。 问题是,我希望将version_name(在本例中为v2_9_11作为文件夹更新中的子文件夹名称)和sql文件名(在本例中为1_AlterTable_wapactivity.sql)而不在update.xml中进行映射。你能帮助我吗?
修改
或者,任何人都可以指导我在构建应用程序时如何自动将其映射到update.xml?
答案 0 :(得分:1)
我建议你将.sql文件放在assets
文件夹中。通过这样做,您可以使用File IO API自由操作文件。
答案 1 :(得分:1)
对不起所有人,我现在只是把它放在赏金中但是我能够在我把它放在赏金之后的短时间内自己解决它。无论如何,我的解决方案是打开android设备(data / app / .... apk)内的apk文件作为压缩流。然后列出以com/ods/scm/script/update
开头的所有文件。这是我的方法来获取以它开头的所有文件:
public ArrayList openApk(String filePath){
ArrayList<String> list = new ArrayList<String>();
FileInputStream fis = null;
ZipInputStream zipIs = null;
ZipEntry zEntry = null;
try {
fis = new FileInputStream(filePath);
zipIs = new ZipInputStream(new BufferedInputStream(fis));
while((zEntry = zipIs.getNextEntry()) != null){
if(zEntry.getName().startsWith("com/ods/scm/script/update/"))
list.add(zEntry.getName());
}
zipIs.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}