Какой mysql драйвер я использую с пружиной/быть в спящем режиме?

Мало перепутанный, 'driverclassname' и 'hibernate.dialect' оба относится к mysql драйверу?

Что я должен использовать? Действительно ли connectorJ является тем, который я должен использовать?

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:mysql://localhost/blah"/>



<property name="hibernateProperties">
            <value>
                hibernate.dialect=org.hibernate.dialect.MySQLDialect

Я использую Знатока поэтому, если бы я могу получить драйвер от знатока, который был бы идеален.

При запущении моего приложения у кота я получаю ошибку:

Cannot create JDBC driver of class 'org.hsqldb.jdbcDriver' for connect URL 
5
задан Blankman 19 July 2010 в 02:38
поделиться

3 ответа

Немного запутался, относятся ли 'driverclassname' и 'hibernate.dialect' к драйверу mysql?

Нет, не относятся. driverclassname относится к имени класса драйвера, который является классом данного JDBC драйвера, реализующего java.sql.Driver. Имя класса драйвера зависит от конкретного драйвера.

При использовании JDBC драйвера MySQL aka MySQL Connector/J, этот класс - com.mysql.jdbc.Driver, как объясняется в документации MySQL Connector/J:

20.3.4.1. Имена классов драйверов/источников данных, синтаксис URL и свойства конфигурации для Connector/J

Имя класса, реализующего. java.sql.Driver в MySQL Connector/J is com.mysql.jdbc.Driver. (...)

И на самом деле, они даже предоставляют инструкции по использованию своего драйвера с Spring. Смотрите раздел 20.3.5.2.4. Использование Connector/J с Spring.

Свойство hibernate.dialect отличается, это свойство конфигурации используется для определения имени класса Hibernate org.hibernate.dialect.Dialect, который позволяет Hibernate генерировать SQL, оптимизированный для конкретной реляционной базы данных. Опять же, это объясняется в документации Hibernate:

3.4. Необязательные свойства конфигурации

(...) Имя класса Hibernate org.hibernate.dialect.Dialect which позволяет Hibernate генерировать SQL оптимизированный для конкретной реляционной базы данных.

например, full.classname.of.Dialect

В большинстве случаев Hibernate будет действительно сможет выбрать правильный org.hibernate.dialect.Dialect реализацию на основе JDBC метаданных, возвращаемых драйвером JDBC.

Для MySQL 5.x следует использовать org.hibernate.dialect.MySQL5InnoDBDialect, если вы используете таблицы InnoDB (это моя рекомендация) или org.hibernate.dialect.MySQL5Dialect, если нет. См. раздел 3.4.1. Диалекты SQL для получения (неполного) списка.

Последний пункт, часть Maven, которую вы даже не упомянули в своем вопросе... Драйвер MySQL JDBC доступен в центральном репозитории Maven, и вам следует использовать поисковую систему репозитория (как я уже предлагал). Например, следующий запрос:

http://www.jarvana.com/jarvana/search?search_type=project&project=mysql

позволяет найти maven координаты конечной версии в два клика:

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

PS: Я не хочу показаться грубым и рад помочь, но вы действительно должны попытаться использовать документацию продуктов или фреймворков, которые вы используете. То, о чем вы спрашиваете в этом вопросе, хорошо документировано (как я показал) и может быть легко найдено. Научиться находить базовую информацию самостоятельно - это фундаментальный навык для разработчика программного обеспечения, на мой взгляд.

22
ответ дан 18 December 2019 в 06:49
поделиться

В driverClassName должно быть указано имя класса драйвера JDBC, который вы хотите загрузить (как вы обычно делаете, используя Class#forName() в "простом" JDBC). Тот, который вы сейчас указываете, корректен для драйвера MySQL JDBC (Update: вы быстро отредактировали его на драйвер HSQLDB JDBC, это корректно только для Hypersonic DB, а не для MySQL DB).

В hibernate.dialect должно быть указано имя класса реализации Hibernate Dialect, который вы хотите использовать для конкретной базы данных, чтобы Hibernate знал, что понимает данная БД, и мог автоматически генерировать подходящие SQL-запросы. Тот, который вы сейчас указываете, корректен для базы данных MySQL.


Тем не менее, похоже, что у вас с этим проблемы. Возможно, вы не установили драйвер MySQL JDBC? Вы получаете ClassNotFoundException на него? Достаточно скачать Connector/J, распаковать zip и поместить JAR-файл в classpath среды выполнения.

0
ответ дан 18 December 2019 в 06:49
поделиться

относительно определения maven mysql, вот одно, которое, похоже, работает.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.12</version>
</dependency>
1
ответ дан 18 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: