我正在开发一个android应用程序,它存储sql文件以更新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());
}
}我从version_name获得字符串sql_list文件名和字符串sql_list文件名。问题是,我希望获得version_name (在本例中,v2_9_11作为文件夹更新的子文件夹名)和sql文件名(在本例中是1_AlterTable_wapactivity.sql ),而不将其映射到update.xml中。你能帮我吗?
编辑
或者,有人能指导我在构建应用程序时如何自动将它映射到update.xml吗?
发布于 2015-02-02 05:52:47
对不起,我刚才把它交了赏金,但我能在我交了赏金后的短时间内自己解决它。无论如何,我的解决方案是将android设备中的apk文件(data/app/.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;
}发布于 2015-02-02 03:00:46
我建议您将.sql文件放在assets文件夹中。通过这样做,您可以使用file自由地操作您的文件。
https://stackoverflow.com/questions/28206507
复制相似问题