sqlcsv: possibilité de spécifier le chemin de chargement des drivers jdbc

This commit is contained in:
Jephté Clain 2017-12-20 19:01:10 +04:00
parent a7e6228669
commit 48e43599b8
1 changed files with 43 additions and 6 deletions

45
sqlcsv
View File

@ -1050,6 +1050,15 @@ public class sqlcsv {
+ "\najoutés au CLASSPATH. La présence de certains fichiers est testée pour activer"
+ "\néventuellement les logs détaillés."
+ "\n\nOPTIONS"
+ "\n -J<JARDIR>"
+ "\n +J<JARDIR>"
+ "\n Spécifier un répertoire de chargement des drivers JDBC."
+ "\n Avec l'option -J, le répertoire spécifié est ajouté aux répertoires de"
+ "\n configuration par défaut ~/.sqlcsv et /etc/sqlcsv. Avec la variante +J,"
+ "\n seul le répertoire spécifié est analysé."
+ "\n Cette option *doit* être spécifiée en premier et il ne doit pas y avoir"
+ "\n d'espace entre l'option et son argument."
+ "\n"
+ "\n -C, --config CONFIG"
+ "\n Prendre les informations de connexion depuis le fichier de propriété"
+ "\n spécifié. Pour l'identifiant CONN, la propriété 'CONN.url' doit exister"
@ -1071,8 +1080,8 @@ public class sqlcsv {
+ "\n Si -C n'est pas spécifié et que -l est spécifié, alors l'identifiant de"
+ "\n connexion est enregistré dans les préférences utilisateur. Si ni -C"
+ "\n ni -l ne sont spécifiés, alors le dernier identifiant est utilisé s'il"
+ "\n existe. L'option -z permet de démarrer comme si aucun identifiant n'avait"
+ "\n jamais été enregistré."
+ "\n existe. L'option -z permet de démarrer comme si aucun identifiant"
+ "\n n'avait jamais été enregistré."
+ "\n -u, --user USER"
+ "\n -p, --password PASSWORD"
+ "\n Spécifier un nom de connexion et un mot de passe si l'url ne le fournit"
@ -1091,7 +1100,7 @@ public class sqlcsv {
+ "\n requête. Sinon, il est possible de spécifier plusieurs fois cette option"
+ "\n pour nommer les fichiers correspondant à chaque requête."
+ "\n -t, --autocommit"
+ "\n Activer le mode autocommit"
+ "\n Activer le mode autocommit. Par défaut, le mode autocommit n'est pas activé"
+ "\n -c, --ignore-io-error"
+ "\n Continuer le traitement même en cas d'erreur du système de fichiers."
+ "\n Cependant le traitement s'arrête et la transaction est annulée si une"
@ -1146,7 +1155,9 @@ public class sqlcsv {
int i = 0, max = args.length;
while (i < max) {
String arg = args[i];
if (arg.equals("-C") || arg.equals("--config")) {
if (arg.substring(0, 2).equals("-J") || arg.substring(0, 2).equals("+J")) {
die("L'option -J doit être spécifiée en premier", null);
} else if (arg.equals("-C") || arg.equals("--config")) {
config = getArg(args, ++i, "Vous devez spécifier le fichier de configuration");
} else if (arg.equals("-l") || arg.equals("--conn")) {
connid = getArg(args, ++i, "Vous devez spécifier l'identifiant de connexion");
@ -1387,10 +1398,36 @@ public class sqlcsv {
|| new File(SYSTEM_CONFDIR + "/SQL_DEBUG").exists()) {
DriverManager.setLogWriter(new PrintWriter(System.err));
}
boolean jardirOption = false;
String jardir = null;
boolean jardirOnly = false;
if (args.length > 0) {
String firstOption = args[0].substring(0, 2);
if (firstOption.equals("-J")) {
jardirOption = true;
jardir = args[0].substring(2);
jardirOnly = false;
} else if (firstOption.equals("+J")) {
jardirOption = true;
jardir = args[0].substring(2);
jardirOnly = true;
}
if (jardirOption) {
if (jardir.length() == 0) die("L'option -J doit avoir un argument", null);
String[] newArgs = new String[args.length - 1];
System.arraycopy(args, 1, newArgs, 0, newArgs.length);
args = newArgs;
}
}
boolean shouldUpdateClasspath = false;
ArrayList<URL> urls = new ArrayList<URL>();
if (jardirOption) {
shouldUpdateClasspath |= findJars(new File(jardir), urls);
}
if (!jardirOption || !jardirOnly) {
shouldUpdateClasspath |= findJars(new File(USER_CONFDIR), urls);
shouldUpdateClasspath |= findJars(new File(SYSTEM_CONFDIR), urls);
}
if (shouldUpdateClasspath) {
ClassLoader parentLoader = Thread.currentThread().getContextClassLoader();
ClassLoader loader = new URLClassLoader(urls.toArray(new URL[0]), parentLoader);