L'exécution d'un .sql script à l'aide de MySQL avec JDBC
Je commence à utiliser MySQL avec JDBC.
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql:///x", "x", "x");
stmt = conn.createStatement();
stmt.execute( "CREATE TABLE amigos" +
"("+
"id int AUTO_INCREMENT not null,"+
"nombre char(20) not null,"+
"primary key(id)" +
")");
J'ai 3-4 tables pour créer et cela n'a pas l'air bon.
Est-il un moyen de lancer une .script sql de MySQL JDBC?
- aucune raison particulière pour laquelle vous avez besoin d'écrire du code java pour l'exécution de ces instructions create table? Ils sont dynamiques, d'une certaine façon?
- parce qu'il veut faire tous les trucs en Java xD
Vous devez vous connecter pour publier un commentaire.
Ok. Vous pouvez utiliser cette classe ici (posté sur pastebin en raison de la longueur du fichier) dans votre projet. Mais n'oubliez pas de garder la licence apache info.
JDBC ScriptRunner
C'est l'escroquerie de la iBatis ScriptRunner avec dépendances supprimé.
Vous pouvez l'utiliser comme cette
Que c'est!
ResultSet
ou il ne fonctionne que pour la mise à jour des déclarations? J'ai essayé de l'utiliser mais ne peut pas comprendre comment obtenir le retour d'unResultSet
. Je voudrais allerSpring
mais il est plus facile d'utiliser une classe que d'une bibliothèque entière.select 1; -- do nothing
ensuite, le script n'est pas exécuté, mais il les traite comme de la première moitié d'une longue commande [concaténé avec la nouvelle commande] d'autres effets secondaires--si c'est la dernière chose dans votre fichier, il ne fonctionne pas à tous]. Si vous venez de coller avec une seule ligne de sql commentaires c'est okJ'ai fait beaucoup de recherche sur ce sujet et a trouvé un bon util de printemps. Je pense que l'utilisation
SimpleJdbcTestUtils.executeSqlScript(...)
est effectivement la meilleure solution, car il est plus entretenu et testé.Edit:
SimpleJdbcTestUtils
est obsolète. Vous devez utiliserJdbcTestUtils
. Mis à jour le lien.SimpleJdbcTestUtil
et conseille d'utiliserJdbcTestUtils
à l'avenir.JdbcTestUtils.executeSqlScript()
méthodes sont désormais obsolète.ScriptUtils.executeSqlScript(...)
devrait être utilisé à la place.Printemps du Cadre de
ResourceDatabasePopulator
peut aider. Comme vous l'avez dit vous utilisez MySQL, JDBC, supposons que vous avez une base de données MySQL adossés à desDataSource
instance de prêt. En outre, supposons que votre MySQL fichiers de script sont classpath localisable. Supposons que vous utilisez la GUERRE mise en page et les fichiers de script sont situés dans un répertoiresrc/main/webapp/resources/mysql-scripts/...
ousrc/test/resources/mysql-scripts/...
. Ensuite, vous pouvez utiliserResourceDatabasePopulator
pour exécuter des scripts SQL comme ceci:mysql
client en ligne de commande etmysqldump
bien fonctionner sur un réseau et peut être utilisé dans des scripts automatisés. Avoir la base de données sur un autre serveur ne devrait pas poser de problème.Pour un simple script sql séparés par des ';', vous pouvez utiliser cette fonction simple.
Il supprimer les commentaires et exécuter les instructions une par une
@Pantelis Sopasakis
Version légèrement modifiée sur GitHub: https://gist.github.com/831762/
Il est plus facile de suivre les modifications de là.
Concernant SQL script runner (dont je suis également utiliser), j'ai remarqué que le morceau de code suivant:
Cependant, dans la documentation de l'API pour la méthode getString(int), il est mentionné que les indices commencent à 1, cela devrait donc devenir:
Deuxième, cette mise en œuvre de ScriptRunner ne fournit pas de support pour DÉLIMITEUR énoncés dans le script SQL qui sont importantes si vous avez besoin de compiler des DÉCLENCHEURS ou des PROCÉDURES. J'ai donc créé cette version modifiée de ScriptRunner: http://pastebin.com/ZrUcDjSx qui, je l'espère, vous trouverez utile.
Une autre option intéressante serait d'utiliser Jisql pour exécuter les scripts. Puisque le code source est disponible, il devrait être possible de l'intégrer dans une application.
Edit: pris soin de regarder cela; l'intégration à l'intérieur de quelque chose d'autre allait nécessiter quelques modifications à son code source.
Pouvez-vous utiliser ce:
Cette fonction obtient le fichier SQL de base de données et de connexion.
Ensuite, il lit le fichier ligne par ligne à l'aide d'BufferedReader à partir de java.io.
Et, enfin, exécute la lecture des énoncés.
Java 8+ version:
Écrire du code pour:
Pour Oracle PL/SQL, Oracle JDBC-pilote, en effet, prend en charge l'exécution d'ensemble de scripts SQL y compris des procédures stockées et des blocs anonymes (PL/SQL notation spécifique), voir
Peut les Pilotes JDBC pour l'accès PL/SQL Stockées Procédures?
La Oracle JDBC driver FAQ a plus d'infos:
Il devrait être possible de lire un fichier et d'alimenter le contenu de la prepareCall()-méthode.
Maven Plugin SQL Utiliser ce plugin pour exécuter des instructions SQL un fichier ou une liste de fichiers à travers
3.fileset configurations
Il n'est pas vraiment une façon de le faire.
Vous pouvez soit exécuter la ligne de commande de mysql client par le biais de l'Exécution.exec(String[]) et de lire cet article lorsque vous vous décidez pour cette option
Ou essayez d'utiliser la ScriptRunner (com.ibatis.commun.jdbc.ScriptRunner) à partir de ibatis. Mais c'est un peu stupide d'inclure une bibliothèque entière juste pour exécuter un script.