MySQL java.sql.SQLException

3 отговора 96 прегледа
#1

MySQL java.sql.SQLException

Здравейте. Имам проблем със свързването на Java и МySQL под Линукс.

Ето кода.
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql:///test");

Изглежда съвсем стандартно. Но когато се опитах да го пусна под Линукс започна да дава грешка:

java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.ConnectException: Connection refused at
com.mysql.jdbc.Connection.createNewIO(Connection.java:1564) at
com.mysql.jdbc.Connection.(Connection.java:485) at
com.mysql.jdbc.Driver.connect(Driver.java:341) at
java.sql.DriverManager.getConnection(DriverManager.java:512) at
java.sql.DriverManager.getConnection(DriverManager.java:171) at
org.apache.jsp.jdbc_jsp._jspService(jdbc_jsp.java:77) at

MySQL4, Java1.4, Debian, ConnectorJ 3.0.6
-----------------------------------------------------------
Това може би е проблем на конфигурацията на MySQL. Обаче нищо по-конкретно не успях да изровя.
- Елиминирал съм като възможност да е заради грешни име и парола.
- Сървъра е включен. Мога да се връзвам към него през конзолата му. netstat -a показва това
tcp 0 0 *:mysql *:* LISTEN
- skip_networking ми е OFF
- не е като да не намира jar-a на MySQL-driver.
- Под Вин няма такова поведение.

Ще съм благодарен на всякакви по-конкретни идеи.

Отговор
в отговор на EasyRider #2

Re: MySQL ConnectException

Да добавя и че Дебиана е stable.

В един друг форум видях подобен въпрос. Там като насока беше дадено, че за да стане такава връзка е достатъчно включеният MySQL да може да бъде достигнат през телнет

telnet localhost 3306

Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

Някой знае ли как се пуска това, или къде може да се прочете?

Отговор
в отговор на EasyRider #3

Re: ConnectException

Оказа се, че е било заради firewall-a. След намесата на Sysadmina вече не получавам тази грешка.
Обаче отново няма връзка с базата.

Communication link failure: java.io.IOException, underlying cause:
Unexpected end of input stream ** BEGIN NESTED EXCEPTION ** java.io.IOException MESSAGE: Unexpected end of input stream STACKTRACE: java.io.IOException: Unexpected end of input stream at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:1096) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:387) at com.mysql.jdbc.Connection.createNewIO(Connection.java:1562) at com.mysql.jdbc.Connection.(Connection.java:491) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at org.apache.jsp.jdbc_jsp._jspService(jdbc_jsp.java:83) at
....................

Отговор
в отговор на EasyRider #4

Solution

За да работи това трябва да работи и
telnet localhost 3306

а за него трябва да се провери дали хостът от, който се прави връзка не е забранен в /etc/hosts; hosts.deny; hosts.allow


Статуса може да се провери със следната команда:
/usr/sbin/tcpdmatch mysqld [IP-to/hostname na klienta]

Примерен отговор:
warning: mysqld: no such process name in /etc/inetd.conf
client: address [client IP]
server: process mysqld
matched: /etc/hosts.deny line 3
access: denied

т.е. в hosts.deny трябва да се напише:
ALL: ALL EXCEPT 127.0.0.1

Изрових го най-накрая.

Отговор