Reputation: 1672
I can't figure what is wrong with this query in Android:
INSERT INTO current
(channel_name, channel, id_language, title, start, length, catergory, genre, sortOrder) VALUES
('3SAT', '3SAT', '27', 'Frizija', '2011-05-16 13:45:00', '45', '8', '103', '0'),
('A Kanal', 'AKANAL', '2', 'Varna hiša', '2011-05-16 13:40:00', '110', '1', '71', '1'),
('ABMoteurs', 'ABMOTEURS', '12', 'Garažna pošast', '2011-05-16 14:00:00', '60', '11', '81', '2'),
('ARD', 'ARD', '27', 'Dnevnik', '2011-05-16 14:00:00', '10', '7', '6', '3'),
('ARTE', 'ARTE', '27', 'Sanje o podeželju: Normandija', '2011-05-16 14:00:00', '45', '8', '103', '4');
When I do it this way:
newTaskValues.put(KEY_CURRENT_CHANNEL_NAME , channel_name);
newTaskValues.put(KEY_CURRENT_CHANNEL , channel);
newTaskValues.put(KEY_CURRENT_ID_LANG , id_language);
newTaskValues.put(KEY_CURRENT_TITLE , title);
newTaskValues.put(KEY_CURRENT_START , start);
newTaskValues.put(KEY_CURRENT_LENGTH , length);
newTaskValues.put(KEY_CURRENT_CATEGORY , category);
newTaskValues.put(KEY_CURRENT_GENRE , genre);
newTaskValues.put(KEY_CURRENT_ORDER , sort);
db.insert(DATABASE_TABLE_CURRENT , null, newTaskValues);
it works OK ... But I want to make multiple inserts with one query, because there is about 160 inserts at once...
Any ideas... Thanks for helping me out!
I always get this from LogCat:
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): FATAL EXCEPTION: main
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): android.database.sqlite.SQLiteException: near ",": syntax error: , while compiling: INSERT INTO current (channel_name, channel, id_language, title, start, length, catergory, genre, sortOrder) VALUES ('3SAT', '3SAT', '27', 'Frizija', '2011-05-16 13:45:00', '45', '8', '103', '0'), ('A Kanal', 'AKANAL', '2', 'Varna hiša', '2011-05-16 13:40:00', '110', '1', '71', '1'), ('ABMoteurs', 'ABMOTEURS', '12', 'Garažna pošast', '2011-05-16 14:00:00', '60', '11', '81', '2'), ('ARD', 'ARD', '27', 'Dnevnik', '2011-05-16 14:00:00', '10', '7', '6', '3'), ('ARTE', 'ARTE', '27', 'Sanje o podeželju: Normandija', '2011-05-16 14:00:00', '45', '8', '103', '4');
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1356)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1324)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at com.TVSpored.ToDoDBAdapter.insertCurrent(ToDoDBAdapter.java:416)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at com.TVSpored.Currently$LoadCurrent.onPostExecute(Currently.java:269)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at com.TVSpored.Currently$LoadCurrent.onPostExecute(Currently.java:1)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.os.AsyncTask.finish(AsyncTask.java:417)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.os.AsyncTask.access$300(AsyncTask.java:127)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.os.Handler.dispatchMessage(Handler.java:99)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.os.Looper.loop(Looper.java:130)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at java.lang.reflect.Method.invokeNative(Native Method)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at java.lang.reflect.Method.invoke(Method.java:507)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-16 14:07:59.601: ERROR/AndroidRuntime(15153): at dalvik.system.NativeStart.main(Native Method)
05-16 14:07:59.609: WARN/ActivityManager(109): Force finishing activity com.TVSpored/.TVSpored
Code (I get JSONArray in function):
String SQL = "INSERT INTO " + DATABASE_TABLE_CURRENT + " " +
"(" + KEY_CURRENT_CHANNEL_NAME + ", " + KEY_CURRENT_CHANNEL + ", " + KEY_CURRENT_ID_LANG + ", " +
KEY_CURRENT_TITLE + ", " + KEY_CURRENT_START + ", " + KEY_CURRENT_LENGTH + ", " +
KEY_CURRENT_CATEGORY + ", " + KEY_CURRENT_GENRE + ", " + KEY_CURRENT_ORDER + ") VALUES ";
for (int i = 0; i <= CShows.length() && i < 5; i++)
{
JSONObject jsonObject;
try {
jsonObject = CShows.getJSONObject(i);
String start = jsonObject.getString("start");
Integer duration = jsonObject.getInt("length");
String title = jsonObject.getString("shortTitle");
String epg_channel = jsonObject.getString("channel");
String channel_name = jsonObject.getString("channel_name");
Integer emission_id = jsonObject.getInt("id_emission");
Integer id_language = 0;
Integer id_category = 0;
Integer id_genre = 0;
if(jsonObject.getString("id_language").length() > 0)
{
id_language = jsonObject.getInt("id_language");
}
if(jsonObject.getString("id_category").length() > 0)
{
id_category = jsonObject.getInt("id_category");
}
if(jsonObject.getString("id_genre").length() > 0)
{
id_genre = jsonObject.getInt("id_genre");
}
SQL += "(" + "'" + channel_name + "', " + "'" + epg_channel + "', " + "'" + id_language + "', " +
"'" + title + "', " + "'" + start + "', " + "'" + duration + "', "
+ "'" + id_category + "', " + "'" + id_genre + "', " + "'" + i + "')";
if(CShows.length() != (1 + i) && i != 4)
{
Log.d("TV Spored++", "I je enako: " + i);
SQL = SQL + ", ";
}
} catch (JSONException e) {
e.printStackTrace();
}
}
SQL = SQL + ";";
Log.d("TV Spored++", SQL.toString());
db.rawQuery(SQL, null);
Upvotes: 1
Views: 330
Reputation: 175866
Inserting in the form VALUES (xxx), (yyy)
does not appear to be supported by SQLite, instead you can:
INSERT INTO current (channel_name, channel, id_language, title, start, length, catergory, genre, sortOrder)
SELECT '3SAT', '3SAT', '27', 'Frizija', '2011-05-16 13:45:00', '45', '8', '103', '0'
UNION ALL SELECT 'A Kanal', 'AKANAL', '2', 'Varna hiša', '2011-05-16 13:40:00', '110', '1', '71', '1'
UNION ALL SELECT 'ABMoteurs', 'ABMOTEURS', '12', 'Garažna pošast', '2011-05-16 14:00:00', '60', '11', '81', '2'
Upvotes: 2
Reputation: 5903
Why did you posted the ContentValues part if its not even used? ;) As I said you're generating invalid SQL (maybe read the basics again). A approach would be to preserve the SQL variable and work in the loop with a new one.
In pseudocode:
for i in elements
String insertSQL = SQL
insertSQL += newValues
insert()
Upvotes: 0