Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > MYSQL и Java


Автор: Rusico 1.6.2004, 12:57
Скачал с mysql.com Connector для mysql, пишу:

try
{
Class.forName("com.mysql.jdbc.Driver");//.newInstance();
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn;

//до этих пор всё в порядке.
conn = DriverManager.getConnection("jdbc:mysql://192.168.1.1/kataloguser=rus&password=ico");
}catch(SQLException h){}


Выкидывает исключение: java.lang.NoClassDefFoundError: java/sql/Savepoint

Что это? Често говоря уже не могу вариться в собственном соку, может кто поможет?
Заранее благодарен.

Автор: breeezy 1.6.2004, 13:46
Может, формат строки неправильный? Типа вопросика не хватает?
jdbc:mysql://[hostname][,failoverhost...][:port]/[dbname][?param1=value1][&param2=value2].....

jdbc:mysql://192.168.1.1/?kataloguser=rus&password=ico

Автор: Rusico 1.6.2004, 13:54
извиняюсь за неточность, формат строки такой:
"jdbc:mysql://192.168.1.1/base_of_shtrih?user=russo&password=rusico"

Автор: Rusico 1.6.2004, 14:10
эту ошибку исправил, но теперь возникает другая:
java.sql.SQLException: Cannot load connection class because of underlying exception: 'java.lang.SecurityException: Prohibited package name: java.sql'.

Автор: Sun 1.6.2004, 14:49
Ты наверно пытаешься запускать это из аплета? Если да, то тебе броузер не дает установить сокет соединение с сервером баз данных. Побороть можно добавив права аплету (у нас в факе вроде должно быть как). Либо перенести работу с базой данных на сервер.

Автор: Rusico 1.6.2004, 14:58
нет, всё это я делаю не в апплете smile.gif

Автор: LSD 1.6.2004, 19:45
Класс (вернее интерфейс) java.sql.Savepoint появился в JDK 1.4 и судя по ошибке у тебя более старая версия и ты пытаешься загрузить его (java.sql.Savepoint) не через Extension Mechanism.

Автор: Domestic Cat 1.6.2004, 20:20
"Prohibited package name ..." i t d hardcoded v classe ClassLoader:

Код

//from java.lang.ClassLoader.defineClass
 if ((name != null) && name.startsWith("java.")) {
   throw new SecurityException("Prohibited package
   name: " + name.substring(0, name.lastIndexOf('.')));
 }


Kak dobitsya zagruzki classa:

http://java.sun.com/developer/JDCTechTips/2001/tt0130.html

Автор: ZAVS 4.6.2004, 02:12
сделай не так

try
{
Class.forName("com.mysql.jdbc.Driver");//.newInstance();
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn;
//до этих пор всё в порядке.
conn = DriverManager.getConnection("jdbc:mysql://192.168.1.1/kataloguser=rus&password=ico");
}catch(SQLException h){}


а так


try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();// я делаю такsmile.gif baaa.gif
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn;
//до этих пор всё в порядке.
conn = DriverManager.getConnection("jdbc:mysql://192.168.1.1/kataloguser=rus&password=ico");
}catch(SQLException h){}


Автор: skalex 22.3.2005, 11:44
Все таки надо расставить все точки над i. Вот пример (фактически из документации к mysql-connector):
Код
/**
 * App.java -- Connect to MySQL database.
*/

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

class App {
   public static void main(String[] args) {
      try {
         Class.forName("com.mysql.jdbc.Driver").newInstance();
      } catch (Exception ex) {
         System.out.println("error!");
      }
      try {
         Connection conn = DriverManager.getConnection("jdbc:mysql://somehost/sometable?user=someuser&password=somepassword");
      } catch (SQLException ex) {
         System.out.println("SQLException: " + ex.getMessage()); 
         System.out.println("SQLState: "     + ex.getSQLState()); 
         System.out.println("VendorError: "  + ex.getErrorCode()); 
      }
   }
}

Этот пример у меня не работает. Выдается ошибка:
Код
SQLException: Cannot load connection class because of underlying exception:
'java.lang.NumberFormatException: For input string: "somehost"'.
SQLState: 08001
VendorError: 0

Никак не могу понять, в чем дело... Потому что, если я изменю строку #17 на
Код
Connection conn = DriverManager.getConnection("jdbc:mysql:///sometable?user=root&password=");

и попытаюсь запустить программу на локальном компютере где установлен MySQL c настройками по умолчанию, то все заработает... В чем дело то? smile

Автор: Domestic Cat 22.3.2005, 11:55
Какая версия у коннектора?

Автор: skalex 22.3.2005, 12:23
MySQL Connector/J 3.0.13-production (formerly MM.MySQL)

Автор: 3,14 22.3.2005, 13:28
Цитата(Mace @ 22.3.2005, 11:44)
Connection conn = DriverManager.getConnection("jdbc:mysql://somehost/sometable?user=someuser&password=somepassword");

Всегда использовал :
Код

DriverManager.getConnection("jdbc:mysql://somehost/sometable", "someuser", "somepassword");

Всё работает, а насчёт твоего случая предположу, что someuser и somepassword содержат символы к-ые нужно за urlencode-ить

Автор: skalex 22.3.2005, 14:22
Цитата
Код
DriverManager.getConnection("jdbc:mysql://somehost/sometable", "someuser", "somepassword");

Так я тоже пробовал. Не работало!

Цитата
а насчёт твоего случая предположу, что someuser и somepassword содержат символы к-ые нужно за urlencode-ить

Нет, ничего подобного там нет!

В общем, скачал я более новую версию (MySQL Connector/J 3.1.7 (formerly MM.MySQL) ) и проблема решилась!

Автор: Domestic Cat 22.3.2005, 19:00
Цитата
MySQL Connector/J 3.0.13-production (formerly MM.MySQL)


это у тебя был баг 3.0.13 коннектора.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)