ru_java


ru.java

все о языке программирования java


Previous Entry Share Next Entry
наступил на грабли classpath или что ?
n1919 wrote in ru_java
делаю тестовый пример, по типу HelloWorld.


import java.sql.*;
//import oracle.jdbc.driver.OracleDriver;
import oracle.jdbc.OracleDriver;

public class test
{

public static void log(String s)
{
System.out.println(s);
}

public static void main(String[] args)
{
log("begin test");


String server = "localhost";
String port = "1521";
String sid = "XE";
String url = "jdbc:oracle:thin:@" + server + ":" + port + ":" + sid;

try
{
Connection conn = DriverManager.getConnection(url, "hr","hr");
}
catch (SQLException e)
{
log(e.toString());
}

log("end test");
}

}


компилируется и запускается
но коннект не видит класс:

begin test
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@localhost:1521:XE
end test

интересно, однако, что import-то вроде проходит, иначе бы не компилировалось.

стоит отметить, что для простоты всё в одной директории.
ojdbc6.jar там же.

может не очень хорошо, но я выбрал пока так.
никакой IDE, только командная строка.

компиляция так:

"C:\Program Files\Java\jdk1.7.0_79\bin\javac" -classpath ".;.\*" .\test.java

запуск:

"C:\Program Files\Java\jdk1.7.0_79\bin\java" test -classpath ".;.\*"

пробовал писать jar явно: -classpath ".;.\ojdbc6.jar"

чё может быть ?
может jar какой-то не той версии ?
но я вроде последний качал.

  • 1
в тех источниках что мне гугл выдавал
сказано что для последних версий JDBC не нужно

я по любому пробовал, но неудачно (см. выше)

про новый JDBC не знал, действительно, оказывается не нужно уже Class.forName...
но в любом случае если у вас Class.forName("oracle.jdbc.OracleDriver") выдаёт CNFE, то это значит jar не в путях.

вот я явно указываю -classpath

C:\_java\tests>"C:\Program Files\Java\jdk1.7.0_79\bin\java" test -classpath ".;.\ojdbc6.jar"

почему может не работать ?

Попробовать изменить формат команды: убрать каывчки и '.\'.
Пусть будет
C:\_java\tests>"C:\Program Files\Java\jdk1.7.0_79\bin\java" test -classpath .;ojdbc6.jar
Если не поможет, попробовать прописать полный путь к джару ojdbc6.jar, а так же попробовать заново скачать ojdbc6.jar (вдруг он покораптился).

Меня смущает, что -classpath стоит после запускаемого класса test, т.е. jre попытается передать и -classpath и ".;./ojdbc5.jar" как параметры классу.
Попробуйте ...java -cp ojdbc6.jar test
И да, имена классов таки лучше с заглавной писать сразу, доведя до автоматизма/привычки.

таки да.
а я ступил потому что оно видимо сам класс test находило потому что . это по умолчанию.

правда, вылез другой косяк.

C:\_java\tests>"C:\Program Files\Java\jdk1.7.0_79\bin\java" -classpath ".;.\*" test
begin test
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified

end test

Это уже к ораклу.
Если же нужно что-то простое для учёбы с jdbc, то проще поставиль локальный MySQL, IMHO.

Если нужно простое для учёбы с JDBC, то прямо с JDK поставляется DerbyDB. Раньше точно поставлялась.
Если хочется отдельное что-то, то H2DB в память или в файл тоже сильно проще чем ставить мускл или что ещё. Под виндой-то.

Тоже варианты.

  • 1
?

Log in