JDBC CLASSPATH не работает

Я настраиваю простое соединение JDBC с моей рабочей базой MySQL на моем сервере. Я использую Connector-J, предоставляемый MySQL. Согласно их документации, я должен создать переменную CLASSPATH, чтобы указать на каталог, в котором находится mysql-connector-java-5.0.8-bin.jar. Я использовал export set CLASSPATH=/path/mysql-connector-java-5.0.8-bin.jar:$CLASSPATH. Когда я набираю echo $CLASSPATH, чтобы увидеть, существует ли он, все кажется прекрасным. Но тогда, когда я открываю новый терминал и набираю echo $CLASSPATH, он больше не существует. Я думаю, что это основная причина, почему мой Java-сервер не подключается к JDBC, потому что он не сохраняет переменную CLASSPATH, которую я установил.

Кто-нибудь получил предложения или исправления о том, как настроить JDBC в первую очередь?

Ответ 1

Забудьте переменную среды CLASSPATH. Это большая шутка. Он игнорируется почти во всем остальном, чем низкоуровневая команда java com.example.Foo. Он игнорируется при добавлении аргумента -jar. Он игнорируется при добавлении аргумента -cp или -classpath. Он игнорируется серверами IDE и веб-приложений. Эта переменная среды была задумана как удобство для начинающих. Но кроме того, это бесполезно.

Это сводится к тому, что JAR файл должен быть помещен в любой из существующих/стандартных путей пути выполнения среды Java-приложения, о котором идет речь, или что по крайней мере путь к JAR файлу должен быть добавлен к путь к среде выполнения Java-приложения, о котором идет речь.

Поскольку вы говорите о сервере и считаете, что переменная среды CLASSPATH не работает, я буду считать, что это фактически веб-сервер/сервер приложений, такой как Apache Tomcat. Если это действительно так, вам нужно либо удалить JAR файл в папку Tomcat/lib (если вы используете подход, управляемый контейнером DataSource для быстрого пула соединений), либо в папке webapp WEB-INF/lib (если вы используете бедный человек Class#forName() для загрузки драйвера).

Если это не так, и на самом деле это приложение Java, которое должно выполняться как JAR, то вам нужно указать путь к классам в файле MANIFEST.MF JAR, о котором идет речь. Но если это также не так, и это свободный файл .class, то вам нужно указать путь к классам в аргументе -cp или -classpath команды java. Чтобы сохранить себя от ввода его снова и снова при его выполнении, просто создайте файл .sh с помощью команды.

Ответ 2

Попробуйте сделать:

Class.forName("com.mysql.jdbc.Driver"); 

прежде чем вы получите свое соединение

Вы также можете получить более новую версию драйвера mysql jdbc. 5.0.8 довольно старый.

Взгляните на Основы JDBC, это даст вам несколько советов.

Этот учебник также может помочь вам.

Ответ 3

Кажется, вы работаете в Linux-боксе. Убедитесь, что ваш терминал запускает оболочку login. Например, приложение gnome-terminal (возможно, то, что вы используете, если вы используете окно ubuntu или fedora для разработки) имеет флажок в настройках профиля > Название и меню команд "команда запуска в качестве оболочки входа". Проверьте это и убедитесь, что вы также поместили этот код в файл ~/.bash_profile в конце.

export CLASSPATH=/path/mysql-connector-java-5.0.8-bin.jar:$CLASSPATH

Но я бы возражал против этого и делал простой запуск script для вашего приложения. Что-то похожее на это:

#!/bin/bash

Set CLASSPATH=CLASSPATH=/path/mysql-connector-java-5.0.8-bin.jar:$CLASSPATH

java -cp "$CLASSPATH" <your.main.application.Class>

сделать исполняемый файл и использовать его для запуска приложения.

Ответ 4

Я знаю, что это старый поток, но он может помочь кому-то.

Мне удалось подключиться к SQLite3 в Windows 7 с помощью соответствующего CLASSPATH

Я использую драйвер JDBC sqlite-jdbc-3.7.2.

Сначала я попытался скопировать драйвер в каталог c:\Program Files\java\jre7\lib, а затем установить переменную CLASSPATH, но это не удалось распознать строку:

Class.forName("org.sqlite.JDBC");

Я думаю, что из-за ошибки Windows есть пробелы в имени папки, например "Program Files".

Итак, я скопировал JAR файл под C:\jbmorla и установил CLASSPATH для:

.;c:\jbmorla\sqlite-jdbc-3.7.2.jar

Надеюсь, что это поможет

Ответ 5

Для решения проекта MAVENS. Вы можете напрямую изменить файл pom.xml. Добавьте зависимость mysql-коннектора к файлу проекта pom.xml:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.40</version>
</dependency>