J'ai besoin d'exécuter une certaine syntaxe SQL, mais lorsque j'essaie d'exécuter deux syntaxes INSERT, la première est exécutée et la seconde n'est pas exécutée. Alors pourquoi?

Code:

db.excuteSQL("INSERT INTO `en_ahmedali`  VALUES\n" +
                    "(1, 1, 1, 'In the name of Allah, most benevolent, ever-merciful.'),\n" +
                    "(2, 1, 2, 'ALL PRAISE BE to Allah, Lord of all the worlds,'),\n" +
                    "(3, 1, 3, 'Most beneficent, ever-merciful,'),\n" +
                    "(4, 1, 4, 'King of the Day of Judgement.'),\n" +
                    "(5, 1, 5, 'You alone we worship, and to You alone turn for help.'),\n" +
                    "(6, 1, 6, 'Guide us (O Lord) to the path that is straight,'),\n" +
                    "(7, 1, 7, 'The path of those You have blessed, Not of those who have earned Your anger, nor those who have gone astray.');\n" +
                    "\n" +
                    "INSERT INTO `en_ahmedali`  VALUES\n" +
                    "(6231, 114, 1, 'SAY: \"I SEEK refuge with the Lord of men,'),\n" +
                    "(6232, 114, 2, 'The King of men,'),\n" +
                    "(6233, 114, 3, 'The God of men,'),\n" +
                    "(6234, 114, 4, 'From the evil of him who breathes temptations into the minds of men,'),\n" +
                    "(6235, 114, 5, 'Who suggests evil thoughts to the hearts of men --'),\n" +
                    "(6236, 114, 6, 'From among the jinns and men.');");
1
Mohamed Salah 27 janv. 2017 à 17:50

6 réponses

Meilleure réponse

Ce que j'ai atteint:

  • Vous ne pouvez pas exécuter plus d'une instruction dans db.excuteSQL()

Il y a donc deux options:

Tout d'abord, vous pouvez séparer les instructions et les exécuter manuellement:

db.executeSQL("INSERT INTO en_ahmedali VALUES (1, 'text', 'text');");
db.executeSQL("INSERT INTO en_ahmedali VALUES (2, 'text2', 'text2');");

Deuxièmement, vous utiliserez split() pour mettre toutes les instructions dans un tableau, puis les exécuter avec la boucle For:

String sql = "INSERT INTO en_ahmedali VALUES (1, 'text1', 'text1');\nINSERT INTO en_ahmedali VALUES (2, 'text2', 'text2');";
String[] queries = sql.split(";\n"); //Make Sure That Each Statment is seprated with new line.

for(String query : queries){
    db.execSQL(query);
}

Merci,

0
Mohamed Salah 28 janv. 2017 à 09:07

executeSQL() sur Android ne peut s'exécuter que sur une instruction SQL. Si vous mettez deux instructions séparées par un point-virgule, seule la première s'exécutera. Vous devez soit combiner toutes les listes de valeurs en une seule instruction INSERT géante, soit appeler executeSQL() séparément pour chaque instruction INSERT.

2
Karakuri 27 janv. 2017 à 19:26

Mettez les insertions dans des instructions db.excuteSQL séparées et n'oubliez pas de vous engager à un moment donné.

0
Gérard Binkhorst 27 janv. 2017 à 14:52

Vous ne pouvez pas exécuter deux instructions en un seul appel execSQL. Séparez-les en deux appels, soit par programme en utilisant éventuellement le point-virgule, soit simplement manuellement et cela fonctionnera.

1
StuStirling 27 janv. 2017 à 14:51

Essayez une syntaxe d'insertion comme celle-ci:

INSERT INTO myTab (field1,field2,field3)
SELECT 1, 2,'3'UNION ALL
SELECT 2,3, 'v' UNION ALL
SELECT 1,4,'6' 

Je pense que ça devrait marcher

1
DarioN1 28 janv. 2017 à 09:17

Vous ne dites pas quelle bibliothèque SQL vous utilisez, mais je suppose que vous ne pouvez appeler qu'une seule commande par appel.

0
Steve Smith 27 janv. 2017 à 14:52