Ето обяснение стъпка по стъпка как да инсталирате MySQL и JDBC и как да ги използвате:
-
Изтегляне и инсталирайте MySQL сървъра . Просто го направете по обичайния начин. Запомнете номера на порта всеки път, когато го промените. По подразбиране е
3306
. -
Изтегляне JDBC драйвера и поставете в пътека на класа , извлечете ZIP файла и поставете съдържащия JAR файл в пътя към класа. Специфичният за доставчика JDBC драйвер е конкретна реализация на JDBC API (урок тук ).
Ако използвате IDE като Eclipse или Netbeans, тогава можете да го добавите към пътя към класа, като добавите JAR файла като Библиотека до Пътя на изграждане в имотите на проекта.
Ако го правите "обикновена ванилия" в командната конзола, тогава трябва да посочите пътя до JAR файла в
-cp
или-classpath
аргумент при изпълнение на вашето Java приложение.java -cp .;/path/to/mysql-connector.jar com.example.YourClass
.
е там само за добавяне на текущият директория към пътя към класа, така че да може да намериcom.example.YourClass
и;
е разделителя на пътя към класа, както е в Windows. В Unix и клонинги:
трябва да се използва. -
Създайте база данни в MySQLа . Нека създадем база данни
javabase
. Вие, разбира се, искате World Domination, така че нека използваме и UTF-8.CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Създаване на потребител за Java и grant достъпа . Просто защото използва
root
е лоша практика.CREATE USER 'java'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
Да,
java
е потребителското име иpassword
е паролата тук. -
Определете JDBC URLа . За да свържете базата данни MySQL с помощта на Java, ви е необходим JDBC URL в следния синтаксис:
jdbc:mysql://hostname:port/databasename
-
hostname
:Името на хоста, където е инсталиран MySQL сървър. Ако е инсталиран на същата машина, където стартирате Java кода, тогава можете просто да използватеlocalhost
. Може също да бъде IP адрес като127.0.0.1
. Ако срещнете проблеми със свързването и използвате127.0.0.1
вместоlocalhost
го разреши, значи имате проблем в конфигурацията на вашата мрежа/DNS/hosts. -
port
:TCP/IP портът, където MySQL сървърът слуша. Това по подразбиране е3306
. -
databasename
:Името на базата данни, към която искате да се свържете. Това еjavabase
.
Така че крайният URL адрес трябва да изглежда така:
jdbc:mysql://localhost:3306/javabase
-
-
Тествайте връзката към MySQL с помощта на Javaта . Създайте прост Java клас с
main()
метод за тестване на връзката.String url = "jdbc:mysql://localhost:3306/javabase"; String username = "java"; String password = "password"; System.out.println("Connecting database..."); try (Connection connection = DriverManager.getConnection(url, username, password)) { System.out.println("Database connected!"); } catch (SQLException e) { throw new IllegalStateException("Cannot connect the database!", e); }
Ако получите
SQLException: No suitable driver
, тогава това означава, че или JDBC драйверът изобщо не е зареден автоматично, или че URL адресът на JDBC е грешен (т.е. не е разпознат от нито един от заредените драйвери). Обикновено JDBC 4.0 драйвер трябва да се зарежда автоматично, когато просто го пуснете в пътеката към класа по време на изпълнение. За да изключите едно и друго, винаги можете да го заредите ръчно, както следва:System.out.println("Loading driver..."); try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("Driver loaded!"); } catch (ClassNotFoundException e) { throw new IllegalStateException("Cannot find the driver in the classpath!", e); }
Имайте предвид, че
newInstance()
обаждането ене необходими тук. Просто за да поправим стария и бъгавorg.gjt.mm.mysql.Driver
. Обяснение тук . Ако този ред хвърлиClassNotFoundException
, тогава JAR файлът, съдържащ класа на драйвера JDBC, просто не е поставен в пътя към класа.Имайте предвид, че не е необходимо да зареждате драйвера всеки път преди свързване. Само веднъж по време на стартиране на приложението е достатъчно.
Ако получите
SQLException: Connection refused
илиConnection timed out
или специфичен за MySQLCommunicationsException: Communications link failure
, тогава това означава, че DB изобщо не е достъпен. Това може да има една или повече от следните причини:- IP адресът или името на хоста в URL адреса на JDBC е грешен.
- Името на хост в JDBC URL не се разпознава от локалния DNS сървър.
- Номерът на порта липсва или е грешен в URL адреса на JDBC.
- DB сървърът не работи.
- DB сървърът не приема TCP/IP връзки.
- Сървърът на DB е изтекъл връзките.
- Нещо между Java и DB блокира връзките, напр. защитна стена или прокси.
За да разрешите едното или другото, следвайте следните съвети:
- Проверете и тествайте ги с
ping
. - Опреснете DNS или вместо това използвайте IP адрес в JDBC URL.
- Проверете го въз основа на
my.cnf
на MySQL DB. - Стартирайте DB.
- Проверете дали mysqld се стартира без
--skip-networking option
. - Рестартирайте DB и коригирайте кода си съответно, че затваря връзките
finally
. - Деактивирайте защитната стена и/или конфигурирайте защитната стена/прокси сървъра, за да разрешите/препратите порта.
Имайте предвид, че затварянето на
Connection
еизключително важно. Ако не затворите връзки и продължите да получавате много от тях за кратко време, тогава в базата данни може да се изчерпят връзките и приложението ви може да се счупи. Винаги придобивайтеConnection
вtry-with-resources
изявление . Или ако все още не сте на Java 7, изрично го затворете вfinally
наtry-finally
блок. Затваря сеfinally
е само да се гарантира, че и той ще бъде затворен в случай на изключение. Това важи и заStatement
,PreparedStatement
иResultSet
.
Това беше, що се отнася до свързаността. Можете да намерите тук по-разширен урок как да зареждате и съхранявате пълноценни обекти на Java модел в база данни с помощта на основен DAO клас.
Използването на единичен модел за DB връзката е лош подход. Вижте наред с други въпроси:http://stackoverflow.com/q/9428573/ . Това е грешка номер 1.