I\'ve followed a standard tutorial for building a database with Android. I\'ve created a class called DbHelper which extends SQLiteOpenHelper. I\'ve Overridden the create
Well, in my case, I am excuting queries from a file which I saved as an asset This is the solution I used+-
String script = readAsset(CREATE_SCRIPT);//readAsset is a method i use to get the file contents
try {
String[] queries = script.split(";");
for(String query : queries){
db.execSQL(query);
}
} catch (Exception e) {
.....
EDIT
In my case, the Queries were simple insert queries which I had full control over. However, the issue has been raised concerning queries with ";" inside them.
@TWiStErRob suggests using
script.split(";$");// $ meaning end of line. You will need to use RegexOption.MULTILINE for this to work
or
script.split(";\n");// but you will need to ensure that each query is on a different line
Try something like this:
try {
InputStream is = this.context.getAssets().open("script.sql");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
Log.i("SQL Script", line);
if (!line.isEmpty() && !line.trim().startsWith("--"))
db.execSQL(line);
}
} catch (IOException e) {
Log.e("SQL Script", e.getMessage());
}
Log.i("SQL Script", "script executed");
That's not possible to do using the standard methods which comes with Android. So, if you want to execute batch of multiple SQL statements, you will have to create your own utility to do so. For instance, you can have something like this:
public void executeBatchSql(String sql){
// use something like StringTokenizer to separate sql statements
for each sql statement{
database.execSQL(oneStatement);
}
}
Though, what I'd do is something like this:
String sql1 = "create bla bla bla;";
String sql2 = "create foo bar;";
String[] statements = new String[]{sql1, sql2};
// then
for(String sql : statements){
database.execSQL(sql);
}
From the documentation of SQLiteDatabase and my experience in the past I think that it's not possible. But why don't you just split it up in single statements? It really is not a problem in your example. Or do you need it for a different use case?
we have many greate answers here. and here is my solution for multiple insert statements, however I used a file in assets not in row, each line in this file is an insert statement.
try {
in = getAssets().open("InsertStatemets.SQL");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
line = reader.readLine();
while (line != null){
db.execSQL(line);
Log.e("Insert Statement", line);
}
} catch (Exception e) {
}