Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 2
Регистрация: 08.04.2009
Сообщений: 271

Запуск из jar файла с подключением JDBC драйвера

20.09.2009, 17:35. Показов 6154. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если у меня программа находится в jar файле sqljed2.jar
а JDBC драйвер в другом jar файле classes12.jar, в той же
директории D:sqljed , при выполнении команды

java -classpath D:sqljedclasses12.jar -jar sqljed2.jar

драйвер не находится, хотя программа запускается.
--------------------------------
Manifest-Version: 1.0
Main-Class: sqljed2.SqlbadApp
-------------------------------
Если разархивировать программу в этом же каталоге и
запустить в обчном варианте с помощью команды

java sqljed2.SqlbadApp

указав SET CLASSPATH=.:sqljedclasses12.jar - все работает.
Конечно я могу закатать программу и драйвер в один
файл, но тогда сразу снижается возможность работы с
разными базами. Подсажите, что я делаю не так.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2009, 17:35
Ответы с готовыми решениями:

Как jdbc драйвера врубить в jar?
Никак не могу запхать прогу в jar. Имею манифест: Manifest-Version: 1.0 Main-Class: PriceRotator Class-Path:...

Не работает JDBC драйвер после компиляции jar файла в exe
Здаствуйте. Создал JavaFx приложения на java с использованием MySql базы данных. Для этого использовал JDBC драйвер. Делал все это в...

Запуск jar-файла
Скажите плииз, почему напрочь не выполняется класс из jar-файла???? Вот, собственно содержание Jar-архива: C:\Users\user\jar tf...

9
mishgun
21.09.2009, 05:18
Допиши в манифесте
Class-Path: путь к твоему джару
0 / 0 / 2
Регистрация: 08.04.2009
Сообщений: 271
21.09.2009, 10:22  [ТС]
В манифест можно дописать, однако опять же теряется мобильность.
Запускаемая программа позволяет выполнять SQL предложения в любой
СУБД, к которой имеется драйвер ( имя драйвера прописывается в файле ) и форматировать выводимые результаты выполнения. Проверено на MySQL и Oracle. Всё бы хорошо, да вот красиво и динамически подцепить драйвер не получается. А этого очень хочется.
0
mishgun
22.09.2009, 05:21
Вся проблема что джар сам по себе не читает системный classpath поэтому может прогу написать которая будет читать и давать на выбор ?
0 / 0 / 2
Регистрация: 08.04.2009
Сообщений: 271
22.09.2009, 10:34  [ТС]
Как реализовать технически последнее предлжение не очень понятно.
Подсунуть строкой имя драйвера - просто. Переменную окружающей
среды можно прочитать, хотя если знать как заставить систему
динамически подцепить jar по строке описания, никакой CLASSPATH
не требуется.
В этом вся суть - как заставить JVM при запуске программы 'подцеплять'
ту или иную библиотеку просто изменив строку символов, описывающую
адрес библиотеки.
Вытаскивать из архива манифест файл, редактировать его, а потом
опять совать в архив - абсурд. Хочется при минимуме действий
подключаться с помощью универсального инструмента к разным базам
данных и выполнять в них мониторинг, вставки данных, администрирование
и т.п. Программа вчерне написана и работает, но если не решить
вышеуказанную задачу 'весь пар в гудок уйдет'.
0
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
23.09.2009, 11:14
Да все просто. Запускать надо не так:
Windows Batch file
1
java -jar YourJarWithMainClassInManifest.jar
а так:
Windows Batch file
1
java -cp you/class/path/including/YourJarWithMainClassInManifest.jar MainClass
И усе )
0
mishgun
23.09.2009, 20:32
насколько я понял то запускать человек хочт не из коммандной строки а из executable jar файла.Юзер что из под коммандной строки будет запускать? Он пошлет к бениной маме такой софт)))
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
23.09.2009, 23:27
пусть батником запускает и в комментах в нём объяснит где править , если нужно добавить новый jar (драйвер)
я вообще считал , что это наиболее распространённый подход в таких случаях
0
0 / 0 / 1
Регистрация: 21.09.2009
Сообщений: 184
24.09.2009, 03:16
Посмотрите на Java WebStart - Это на тему User Friendly запуска и распростронения Java программ.

http://java.sun.com/products/javawebstart/demos.html

----------
0
0 / 0 / 2
Регистрация: 08.04.2009
Сообщений: 271
24.09.2009, 10:38  [ТС]
Во первых господа спасибо за помощь !
- Пока пользватель только я сам, и .bat файл с командой :
Windows Batch file
1
java -cp D:sqljedclasses12.jar;D:sqljedsqljed2.jar sqljed2.SqlbadApp
меня устраивает вполне. Виват, господин Danissimo, помощь подоспела вовремя !

- Можно в эту же строку 'залудить' списком все имеющиеся в настоящий момент драйверы, добавлять в файл .properties
ещё новые, по потребности, и жить припеваючи, так как количество обслуживаемых баз все-таки ограничено.
- Для того, чтобы грузить динамически класс из .jar файла я где-то (теперь уже не помню, где) откопал исходник.
Дай бог здоровья тому, кто его написал, однако он грузит класс драйвера, а о классе Connection и слыхом не слыхивал.
Наверное это можно поправить, но сейчас не до этого. Тем не менее текст этого неизвестного благодетеля прилагаю.
Ещё раз всем спасибо !
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import java.io.*;
import java.util.*;
import java.util.jar.*;
 
/** Этот класс загружает любой класс из jar файла.
 * Например :
 * try 
 *  {
 *    JarClassLoader loader = new JarClassLoader('myJarFile.jar');
 *    MyInterface myInstance =
 *          (MyInterface)loader.findClass('game.server.MyInterfaceImpl.class');
 *     sayConsoleMessage('Object say: ' + myInstance.myMethod());
 *  } catch(Exception e) {
 *      sayConsoleMessage('Error JarClassLoader: ' + e.getMessage());
 *  }
 */
public class JarClassLoader extends ClassLoader 
{
 private JarFile jar = null;
 private final String classSufix = '.class';
//------------- constructor --------------------------
public JarClassLoader( String p_jarFile ) throws Exception
{
    super();
    jar = new JarFile( p_jarFile ); // open jar file
}
//------------------------------------------
//      load an inctance of the class
//------------------------------------------
public Object loadInterfaceImpl( String p_name ) throws Exception
{
    return loadClass( p_name, true ).newInstance();
}
//--------------------------------
//     load a class def
//--------------------------------
public Class findClass(String name)
{
 try
  {
    byte[] b = loadClassData(name);
    return defineClass(catClassSufix(name), b, 0, b.length);
  } catch (Exception e) {
       System.err.println('Error: ' + e.getMessage());
       return null;
  }
}
//-----------------------------
//      load a class data
//------------------------------
public byte[] loadClassData( String name ) throws Exception
{
 name = makePath( name);
  //
 // load the class data or other jar's entry
//
  JarEntry entry = jar.getJarEntry(name.toString() + classSufix);
  int len = (int)entry.getSize();
  BufferedInputStream in = new
               BufferedInputStream(jar.getInputStream(entry));
  byte[] rc = new byte[len];
  if(in.read(rc, 0, len) != len)  return null;
  return rc;
}
//--------------------------------
//          private part
//--------------------------------
//    change . to / exclude .class sufix
//--------------------------------------
private String makePath(String name)
{
 StringBuffer entryName = new StringBuffer(catClassSufix(name));
//
 for(int inx = 0; inx != -1;)
   {
     inx = entryName.toString().indexOf('.');
     if( inx != -1) entryName.replace(inx, inx + 1, '/');
   }
       return entryName.toString();
}
//------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2009, 10:38
Помогаю со студенческими работами здесь

Запуск .Jar файла
добрый день программисты создал проект который заносит, считывает, удаляет данные из SQL. Когда я выполняю проект все компилируется и...

Запуск файла *jar
Всем привет. Есть .jar файл который нужно открыть из программы. Если открывать так: Process.Start("some.jar"); , то он...

Запуск jar файла
Здравствуйте. Кто-нибудь может подсказать, что делать, если при попытке запуска jar файла (как двойным щелчком,так и из командной строки)...

Запуск jar файла с параметрами
При попытке запустить файл через .bat файлjava -Xincgc -Xmx700M -Xms700M -Djava.library.path=versions\1.6.2\natives -cp...

Запуск jar файла на Mac os
Доброго времени суток! Уже второй день пытаюсь запустить jar файл через терминал. Пробовал командой: java -jar JavaApplication1.jar ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru