Bazaprogram.ru

Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java ms sql

Использование JDBC в Java

категория
Java
дата11.02.2010
авторinvis
голосов27

Подключение

Прежде чем подключаться к серверу БД необходимо выяснить, к какому именно серверу вы собираетесь подключаться и скачать соответствующий драйвер. Драйвер представляет собой *.jar файл. В нашем случае мною было найдено два драйвера:

  1. jTDS для MS SQL Server и Sybase AS. Можно взять здесь.
  2. JDBC для MS SQL Server от Microsoft. Можно взять здесь.

Затем надо подключить этот драйвер к проекту. В NetBeans 6.8 это делается очень просто – в закладке Projects откройте дерево проекта, щёлкните правой кнопкой мыши по Libraries и нажмите “Add Library”.

Сразу хотелось бы заметить, что драйвер от Microsoft работает медленнее примерно в 2,5 раза.

Итак, для подключения нам понадобится:

  1. Рабочий SQL Server
  2. База данных для примера
  3. Драйвера для подключения
  4. Собственно, Java

Мы разберём два способа подключения: с помощью IDE (NetBeans 6.8) и просто в коде.

Начнём со второго.

Первым делом импортируйте пакет java.sql.*;, который содержит классы для работы с БД.

Далее необходимо указать диспетчеру драйверов JDBC, какой именно драйвер следует загрузить. Это можно сделать тремя способами:

  1. Class.forName(«полное имя класса»).newInstance();
    Например, Class.forName(«com.microsoft.sqlserver.jdbc.SQLServerDriver»).newInstance();
  2. DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
  3. Class.forName(“полное имя класса”);

никакой разницы в них нет, задача ведь в том, чтобы classloader загрузил наш драйвер.

Следующий шаг это передача сведений о подключении к базе данных в виде URL-адреса подключения.

Connection con = DriverManager.getConnection(«jdbc:sqlserver://localhost:1433″,»username», «password»);

1433 – порт принимаемый по умолчанию.

Если вы используете драйвер jTDS, то подключение будет выглядеть следующим образом:

DriverManager.registerDriver(new net.sourceforge.jtds.jdbc.Driver());
Connection con = DriverManager.getConnection(«jdbc:jtds:sqlserver://localhost:1433″,» username «, » password «);

Теперь подключимся к БД с помощью NetBeans 6.8.

Перейдите на вкладку Services и щёлкните правой кнопкой мыши по Database, затем “New Connection…”

В поле “Driver Name” выберите “New Driver…”. Нажмите “Add” и укажите путь к библиотеке драйвера. IDE сама найдёт нужный класс. Нажмите OK. В поле Host укажите адрес сервера (если он установлен у вас на компьютере, то это будет Localhost или 127.0.0.1). Port 1433 по умолчанию. Затем название БД, имя и пароль для подключения. Если вы всё сделали правильно, то перейдёте на вкладку Advanced, где нужно будет выбрать Scheme, у меня по умолчанию в базе данных это была ”dbo”. Всё.

Проблема с которой вы можете столкнуться на данном этапе это отключенная SQL авторизация (у меня так было по умолчанию). В этом случае java будет генерировать «java.sql.SQLException: Пользователю «username» не удалось войти в систему. Пользователь не связан с доверенным соединением с SQL Server.» Для того чтобы избежать этой проблемы просто в свойствах компонента DataBase Engine в вкладке Безопасность нажмите «Проверка подлинности SQL Server и Windows»

Не забудьте создать пользователя, если вы этого ещё не сделали.

2. Класс Connection

Класс java.sql.Connection представляет в JDBC сеанс работы с базой данных. Он предоставляет приложению объекты Statement (и его подклассы) для этого сеанса. Он также управляет транзакциями для этих команд. По умолчанию каждая команда выполняется в отдельной транзакции. Объект Connection позволяет отключить функцию Autocommit автоматического завершения транзакции. В этом случае требуется явно завершить транзакцию, иначе результаты выполнения всех команд будут потеряны.

Основные методы:

public void close() throws SQLException
Этот метод позволяет вручную освободить все ресурсы, такие как сетевые соединения и блокировки базы данных, связанные с данным объектом Connection. Этот метод автоматически вызывается при сборке мусора; лучше, однако, вручную закрыть Connection, если вы в нем больше не нуждаетесь.

public Statement createStatement() throws SQLException
public Statement createStatement(int type, int concur) throws SQLException
Метод создает объект Statement, связанный с сеансом Connection. Версия без аргументов создает объект Statement, для которого экземпляры ResultSet имеют тип только для чтения и перемещения в прямом направлении.

public boolean getAutoCommit() throws SQLException
public void setAutoCommit(boolean ac) throws SQLException
По умолчанию все объекты Connection находятся в режиме автозавершения. В этом режиме каждая команда завершается сразу после выполнения. Может оказаться предпочтительнее вручную завершить серию команд в приложении как единую транзакцию. В этом случае метод setAutoCommit() используется для отключения автозавершения. Затем, после выполнения своих команд, вы вызываете commit() или rollback(), в зависимости от успеха или неуспеха транзакции. В режиме автозавершения команда завершается, когда она выполнена, или выполняется следующая команда, в зависимости от того, что произойдет раньше. Команда, возвращающая ResultSet, выполнена, когда извлечена последняя строка или закрыт объект ResultSet. Если команда возвращает множественные результирующие наборы, завершение происходит после извлечения последней строки последнего объекта ResultSet.

public void commit() throws SQLException
Этот метод делает постоянными изменения, произведенные всеми командами, связанными с данным соединением и выполненными вслед за последней командой завершения или отката транзакции. Использовать его следует только при отключенном автозавершении. Он не завершает изменения, сделанные командами, которые связаны с другими объектами Connection.

public String getCatalog() throws SQLException
public void setCatalog(String catalog) throws SQLException
Если драйвер поддерживает каталоги, то setCatalog() используется для выбора подпространства базы данных с заданным именем каталога. Если драйвер каталоги не поддерживает, запрос игнорируется.

public DatabaseMetaData getMetaData() throws SQLException
Класс DatabaseMetaData предоставляет методы, описывающие таблицы базы данных, поддержку SQL, хранимые процедуры и другие сведения, относящиеся к базе данных и данному Connection, которые не относятся непосредственно к выполнению команд и извлечению результирующих наборов. Метод создает экземпляр класса DatabaseMetaData для данного Connection.

public SQLWarning getWarnings() throws SQLException
Возвращает первое предупреждение из списка, связанного с данным объектом Connection.

3. Класс Statement

Класс представляет встроенную команду SQL и используется приложением для доступа к базе данных. При закрытии Statement автоматически закрываются все связанные с ним открытые объекты ResultSet .

Основные методы:

public void addBatch(String sql) throws SQLException
Добавляет заданную команду SQL к текущему пакету команд.

public void cancel() throws SQLException
В многопоточной среде с помощью этого метода можно потребовать прекращения всякой обработки, связанной с данным Statement. В этом смысле метод аналогичен методу stop() для объектов Thread.

public boolean execute(String sql) throws SQLException
public ResultSet executeQuery(String sql) throws SQLException
public int executeUpdate(String sql) throws SQLException
Выполняет Statement, передавая базе данных заданную SQL-строку. Первый метод, execute(), позволяет вам выполнить Statement, когда неизвестно заранее, является SQL-строка запросом или обновлением. Метод возвращает true, если команда создала результирующий набор.

Метод executeQuery() используется для выполнения запросов (на извлечение данных). Он возвращает для обработки результирующий набор.

Метод executeUpdate() используется для выполнения обновлений. Он возвращает количество обновленных строк.

public int[ ] executeBatch(String sql) throws SQLException
Посылает базе данных пакет SQL-команд для выполнения. Возвращает массив чисел, описывающих количество строк, затронутых каждой командой SQL.

public ResultSet getResultSet() throws SQLException
Метод возвращает текущий ResultSet. Для каждого результата его следует вызывать только однажды. Его не нужно вызывать после обращения к executeQuery(), возвращающему единственный результат.

public void close() throws SQLException
Вручную закрывает объект Statement. Обычно этого не требуется, так как Statement автоматически закрывается при закрытии связанного с ним объекта Connection. К сожалению, не все разработчики JDBC-драйверов придерживаются этих конвенций, так что настоятельно советую закрывать вручную, как это показано в примере.

Читать еще:  Java lang assertionerror

4. Класс ResultSet

Этот класс представляет результирующий набор базы данных. Он обеспечивает приложению построчный доступ к результатам запросов в базе данных. Во время обработки запроса ResultSet поддерживает указатель на текущую обрабатываемую строку. Приложение последовательно перемещается по результатам, пока они не будут все обработаны или не будет закрыт ResultSet.

Основные методы:

public boolean absolute(int row) throws SQLException
Метод перемещает курсор на заданное число строк от начала, если число положительно, и от конца — если отрицательно.

public void afterLast() throws SQLException
Этот метод перемещает курсор в конец результирующего набора за последнюю строку.

public void beforeFirst() throws SQLException
Этот метод перемещает курсор в начало результирующего набора перед первой строкой.

public void deleteRow() throws SQLException
Удаляет текущую строку из результирующего набора и базы данных.

public ResultSetMetaData getMetaData() throws SQLException
Предоставляет объект метаданных для данного ResultSet. Класс ResultSetMetaData содержит информацию о результирующие таблице, такую как количество столбцов, их заголовок и т.д.

public int getRow() throws SQLException
Возвращает номер текущей строки.

public Statement getStatement() throws SQLException
Возвращает экземпляр Statement, который произвел данный результирующий набор.

public boolean next() throws SQLException
public boolean previous() throws SQLException
Эти методы позволяют переместиться в результирующем наборе на одну строку вперед или назад. Во вновь созданном результирующем наборе курсор устанавливается перед первой строкой, поэтому первое обращение к методу next() влечет позиционирование на первую строку. Эти методы возвращают true, если остается строка для дальнейшего перемещения. Если строк для обработки больше нет, возвращается false. Если открыт поток InputStream для предыдущей строки, он закрывается. Также очищается цепочка предупреждений SQLWarning.

public void close() throws SQLException
Осуществляет немедленное закрытие ResultSet вручную. Обычно этого не требуется, так как закрытие Statement, связанного с ResultSet, автоматически закрывает ResultSet. К сожалению, не все разработчики JDBC-драйверов придерживаются этих конвенций, например, драйвер Oracle самостоятельно не закрывает ResultSet’ы, так что настоятельно советую закрывать вручную, как это показано в примере.

5. Пример использования.

Более подробную информацию о классах JDBC Вы можете найти здесь.

Если Вам понравилась статья, проголосуйте за нее

Голосов: 27 Голосовать

Java JDBC MSSQL Connection Example

Posted by: Yatin in sql August 11th, 2017 4 Comments Views

Java Database Connectivity (JDBC) is a Java-based data access technology that defines how a client may access a database. It provides methods for querying and updating the data in a database. The JDBC classes are contained in the Java package i.e. java.sql and javax.sql .

1. Introduction

In this article, we will describe how to write the application code to establish a database connection on Microsoft SQL Server from a Java client, using the JDBC API.

1.1 What is JDBC?

JDBC (Java Database Connectivity) is an application programming interface used to communicate or connect the Java application with a database in a database independent and platform independent manner. JDBC provides classes and interfaces to set-up the required communication between the Java application and the database.

Fig. 1: Java Database Connectivity (JDBC) Architecture

JDBC lets a developer manage the below three important programming activities, i.e.:

  • Connection to a database.
  • Sending queries and update statements to the database.
  • Retrieving and processing the results received from the database in answer to the SQL query.

The following simple code fragment gives an example of these three steps:

1.1.1 What’s new in JDBC 4.0?

JDBC 4.0 is a new specification for JDBC. It provides the following advance features:

  • Connection Management.
  • Automatic Loading of the Driver Interface.
  • Better Exception Handling.
  • Support for Large Object.
  • Annotations in SQL Query.

1.2 JDBC Database URL for SQL Server

The syntax of database URL for the SQL Server is as follows:

  • serverName : Host name or the IP address of the machine on which SQL server is running.
  • instanceName : Name of the instance to connect to on a serverName . If this parameter is not specified, the default instance is used.
  • portNumber : The default port number for connecting to SQL server 1433. In case this parameter is missing, the default port is used.
  • property=value : This parameter specifies one or more additional connection properties. To see the properties specific to the SQL server, visit this link.

Note: Microsoft SQL Server supports two authentication modes i.e.:

  • Windows Authentication: This mode is used for the case when both client and the SQL server are running on the same machine. We specify this mode by adding the property integratedSecurity=true to the url.
  • SQL Server Authentication: In this mode, we are using the SQL Server account to authenticate with the database. Here in this mode, we have to explicitly specify the username and password.

Below are some examples:

  • Connect to a default instance of SQL server running on the same machine as the JDBC client by using Windows authentication
  • Connect to an instance named: sqlexpress on the host dbServer by using the SQL Server authentication
  • Connect to a named database: testdb on localhost by using the Windows authentication.

1.3 Download and Install Microsoft JDBC Driver

Click here to download the Microsoft JDBC Driver 4.0 for SQL Server which supports:

  • SQL Server versions: 2005, 2008, 2008 R2, and 2012.
  • Java JDK Version: 5.0 and 6.0.

Run the downloaded program i.e. sqljdbc_ _ .exe . This will extract the files into the Microsoft JDBC Driver 4.0 for SQL Server directory. Here, we will find two jar files i.e. sqljdbc.jar (for JDBC 3.0 ) and sqljdbc4.jar (for JDBC 4.0 ), .dll files, and the HTML help files. Place the required sqljdbc.jar file under the application’s classpath if you are using JDK 5.0 or sqljdbc4.jar file if you are using JDK 6.0 or later.

Now, open up the Eclipse IDE and let’s start building the application!

2. Java JDBC MSSQL Connection Example

2.1 Tools Used

We are using Eclipse Kepler SR2, JDK 7, MSSQL database and Maven (to download the open source MSSQL JDBC Client). Having said that, we have tested the code against JDK 1.7 and it works well.

2.2 Project Structure

Firstly, let’s review the final project structure, in case you are confused about where you should create the corresponding files or folder later!

Fig. 2: JDBC MSSQL Application Project Structure

2.3 Project Creation

This section will demonstrate on how to create a Java based Maven project with Eclipse. In Eclipse IDE, go to File -> New -> Maven Project .

In the New Maven Project window, it will ask you to select project location. By default, ‘Use default workspace location‘ will be selected. Select the ‘Create a simple project (skip archetype selection)‘ checkbox and just click on next button to proceed.

Читать еще:  Программы для восстановления жесткого диска windows 7

It will ask you to ‘Enter the group and the artifact id’. We will input the details as shown in the below image. Version number will be by default 0.0.1-SNAPSHOT .

Click on Finish and the creation of the maven project is completed. If you observe, it has downloaded the maven dependencies and a pom.xml file will be created. It will have the following code:

We can start adding the dependencies that developers want like MSSQL etc. Let’s start building the application!

3. Application Building

Below are the steps involved in developing this application:

3.1 Maven Dependencies

In this example, we are using the latest MSSQL version i.e. sqljdbc4-4.0 dependency. The updated file will have the following code:

3.2 Java Class Creation

Let’s create the required java files. Right click on src/main/java folder, New -> Package .

A new pop window will open where we will enter the package name as com.jcg.jdbc.mssql .

Once the package is created in the application, we will need to create the implementation class. Right click on the newly created package, New -> Class .

A new pop window will open and enter the file name as JdbcMsSql . The implementation class will be created inside the package: com.jcg.jdbc.mssql .

3.2.1 Implementation of Main Class

To demonstrate, we will create a program that connects to a Microsoft SQL Server instance on the localhost environment and print out the database information. Add the following code to it:

4. Run the Application

To run the application, Right click on the JdbcMsSql class, Run As -> Java Application .

Fig. 10: Run Application

5. Project Demo

The code shows the following status as output:

Fig. 11: Application Output

That’s all for this post. Happy Learning!!

6. Conclusion

Here, in this example, we have seen how to establish a JDBC connection between a MSSQL Database and a Java application by using SQL Server Windows Authentication. I hope this simple SQL Server JDBC reference is helpful.

7. Download the Eclipse Project

This was an example of JDBC MSSQL Database Connectivity.

Как использовать базу данных MySQL в Java

    Переводы, 24 июня 2015 в 13:46

В этой статье мы научимся подключаться к базе данных MySQL из Java-кода и выполнять простые запросы для получения и обновления данных. Для того, чтобы получить доступ к базе данных, мы будем использовать JDBC (Java Database Connectivity) API, который входит в стандартную библиотеку Java. JDBC позволяет подключиться к любой базе данных: Postgres, MySQL, SQL Server, Oracle и т. д. — при наличии соответствующей реализации драйвера, необходимого для подключения. Для базы данных MySQL мы будем использовать драйвер Type 4 JDBC из пакета mysql-connector-java-5.1.23-bin.jar . Он написан на чистой Java, а значит, нам не понадобятся какие-либо нативные библиотеки или ODBC-мост. Все, что нам надо будет сделать — это положить JAR-файл в директорию, содержащуюся в CLASSPATH. JAR-файл содержит класс com.mysql.jdbc.Driver , необходимый для подключения к MySQL. Если его не окажется в CLASSPATH, во время выполнения программы выбросится исключение java.lang.ClassNotFoundException , поэтому убедитесь, что вы правильно настроили пути.

Кстати, если вы ищете хорошую книгу по использованию JDBC, обратите внимание на Practical Database Programming with Java (Ying Bai). Это относительно новая книга, и в ней рассматриваются две самые популярные базы данных: Oracle и SQL Server 2008. В книге используется IDE NetBeans для примеров и описываются все инструменты, необходимые для работы с базами данных в Java. Это отличная книга для начинающих и опытных программистов.

Подключаем базу данных MySQL с помощью JDBC

Для того, чтобы подключить базу данных MySQL, нам потребуется четыре вещи:

  1. Строка подключения JDBC (например: jdbc:mysql://localhost:3306/test ).
  2. Имя пользователя (root).
  3. Пароль (root).
  4. База данных с некоторым количеством таблиц для примера (например, база данных книг).

Строка подключения для MySQL начинается с jdbc:mysql . Это название протокола соединения, за которым следуют хост и порт подключения, на которых запущена база данных. В нашем случае это localhost с портом по умолчанию 3306 (если вы его не поменяли при установке). Следующая часть — test — имя базы данных, которая уже существует в MySQL. Мы можем создать таблицу Books :

и наполнить ее хорошими книгами:

Программа на Java, которая использует базу данных

Теперь давайте напишем программу на Java, которая будет подключаться к нашей базе данных, запущенной на localhost . Важно помнить о том, что необходимо закрывать соединение, запросы и результат выполнения после завершения работы с ними. Также важно закрывать их в finally-блоке, со своей try/catch оберткой, поскольку сам метод close() может кинуть исключение, что приведет к утечке ресурсов. За подробной информацией вы можете обратиться к этой статье. Кроме того, вы можете использовать обертку try-with-resource, которая появилась в Java 7. Более того, это стандартный способ работы с ресурсами в Java 1.7.

При первом запуске у вас, возможно, будет ошибка No suitable driver found for jdbc:mysql , если драйвера MySQL нет в CLASSPATH:

Добавим нужный JAR-файл в путь и снова запустим программу. Другая частая ошибка — указать таблицу в строке соединения: jdbc:mysql://localhost:3306/test/book . В этом случае вылетит следущее исключение:

Успешный запуск программы выведет на экран следующее:

Результат верный, поскольку у нас в таблице только две книги: «Effective Java» и «Java Concurrency in Practice».

Кстати, если у вас был драйвер при компиляции, но отсутствует при запуске, вы получите исключение java.lang.ClassNotFoundException: com.mysql.jdbc.Driver . О том, как исправить эту ошибку, вы можете прочитать здесь.

Получаем данные с помощью SELECT-запроса в JDBC

Для получения данных из БД вы можете выполнить SELECT-запрос. В первом примере мы уже его использовали, но получили только количество строк. Теперь мы вернем сами строки. Большая часть программы останется без изменений, за исключением SQL-запроса и кода, возвращающего данные из объекта ResultSet :

Этот код выведет на экран следующее:

Тут есть пара моментов, на которые следует обратить внимание. Метод rs.getInt(1) используется для получения столбца с целочисленным типом, в нашем случае это столбец «id». Индексы в JDBC начинаются с единицы, поэтому rs.getInt(1) вернет значение первого столбца как целое число. В случае, если вы укажете неверный индекс (многие разработчики вызывают rs.getInt(0) для получения первого столбца), выбросится исключение InvalidColumnIndexException . Доступ к столбцам по индексу чреват ошибками, поэтому лучше использовать имя столбца, например, rs.getInt(«id») . Подробнее об этом вы можете прочитать в этой статье. Метод getString() используется для получения строковых значений из базы (например, VARCHAR ). Цикл будет выполняться, пока rs.next() не вернет false . Это значит, что строки закончились. В нашем случае в таблице две строки, поэтому цикл выполнится два раза, выводя информацию о книгах из таблицы на экран.

Читать еще:  Java nio channels closedchannelexception

Добавляем данные с помощью INSERT-запроса в JDBC

Добавление данных мало отличается от их получения: мы просто используем INSERT-запрос вместо SELECT-запроса и метод executeUpdate() вместо executeQuery() . Этот метод используется для запросов INSERT, UPDATE и DELETE, а также для SQL DDL выражений, таких как CREATE, ALTER или DROP. Эти команды не возвращают результата, поэтому мы убираем все упоминания ResultSet ‘а в коде и изменяем запрос соответственно:

После запуска программы вы можете проверить таблицу в СУБД. На этот раз вы увидите три записи в таблице:

Теперь вы умеете подключаться к MySQL из Java-приложения и выполнять SELECT, INSERT, DELETE и UPDATE-запросы так же, как и в MySQL GUI. Для подключения мы используем объект Connection , для чтения результатов запроса — ResultSet . Убедитесь перед подключением, что сервер MySQL запущен и mysql-connector-java-5.1.17-bin.jar находится в CLASSPATH, чтобы избежать ClassNotFoundException .

Когда разберетесь с подключением и простыми запросами, имеет смысл изучить, как использовать подготавливаемые запросы (Prepared Statement) в Java для избежания SQL-инъекции. В боевом коде всегда следует использовать подготавливаемые запросы и связывание переменных.

Как использовать базу данных MySQL в Java

    Переводы, 24 июня 2015 в 13:46

В этой статье мы научимся подключаться к базе данных MySQL из Java-кода и выполнять простые запросы для получения и обновления данных. Для того, чтобы получить доступ к базе данных, мы будем использовать JDBC (Java Database Connectivity) API, который входит в стандартную библиотеку Java. JDBC позволяет подключиться к любой базе данных: Postgres, MySQL, SQL Server, Oracle и т. д. — при наличии соответствующей реализации драйвера, необходимого для подключения. Для базы данных MySQL мы будем использовать драйвер Type 4 JDBC из пакета mysql-connector-java-5.1.23-bin.jar . Он написан на чистой Java, а значит, нам не понадобятся какие-либо нативные библиотеки или ODBC-мост. Все, что нам надо будет сделать — это положить JAR-файл в директорию, содержащуюся в CLASSPATH. JAR-файл содержит класс com.mysql.jdbc.Driver , необходимый для подключения к MySQL. Если его не окажется в CLASSPATH, во время выполнения программы выбросится исключение java.lang.ClassNotFoundException , поэтому убедитесь, что вы правильно настроили пути.

Кстати, если вы ищете хорошую книгу по использованию JDBC, обратите внимание на Practical Database Programming with Java (Ying Bai). Это относительно новая книга, и в ней рассматриваются две самые популярные базы данных: Oracle и SQL Server 2008. В книге используется IDE NetBeans для примеров и описываются все инструменты, необходимые для работы с базами данных в Java. Это отличная книга для начинающих и опытных программистов.

Подключаем базу данных MySQL с помощью JDBC

Для того, чтобы подключить базу данных MySQL, нам потребуется четыре вещи:

  1. Строка подключения JDBC (например: jdbc:mysql://localhost:3306/test ).
  2. Имя пользователя (root).
  3. Пароль (root).
  4. База данных с некоторым количеством таблиц для примера (например, база данных книг).

Строка подключения для MySQL начинается с jdbc:mysql . Это название протокола соединения, за которым следуют хост и порт подключения, на которых запущена база данных. В нашем случае это localhost с портом по умолчанию 3306 (если вы его не поменяли при установке). Следующая часть — test — имя базы данных, которая уже существует в MySQL. Мы можем создать таблицу Books :

и наполнить ее хорошими книгами:

Программа на Java, которая использует базу данных

Теперь давайте напишем программу на Java, которая будет подключаться к нашей базе данных, запущенной на localhost . Важно помнить о том, что необходимо закрывать соединение, запросы и результат выполнения после завершения работы с ними. Также важно закрывать их в finally-блоке, со своей try/catch оберткой, поскольку сам метод close() может кинуть исключение, что приведет к утечке ресурсов. За подробной информацией вы можете обратиться к этой статье. Кроме того, вы можете использовать обертку try-with-resource, которая появилась в Java 7. Более того, это стандартный способ работы с ресурсами в Java 1.7.

При первом запуске у вас, возможно, будет ошибка No suitable driver found for jdbc:mysql , если драйвера MySQL нет в CLASSPATH:

Добавим нужный JAR-файл в путь и снова запустим программу. Другая частая ошибка — указать таблицу в строке соединения: jdbc:mysql://localhost:3306/test/book . В этом случае вылетит следущее исключение:

Успешный запуск программы выведет на экран следующее:

Результат верный, поскольку у нас в таблице только две книги: «Effective Java» и «Java Concurrency in Practice».

Кстати, если у вас был драйвер при компиляции, но отсутствует при запуске, вы получите исключение java.lang.ClassNotFoundException: com.mysql.jdbc.Driver . О том, как исправить эту ошибку, вы можете прочитать здесь.

Получаем данные с помощью SELECT-запроса в JDBC

Для получения данных из БД вы можете выполнить SELECT-запрос. В первом примере мы уже его использовали, но получили только количество строк. Теперь мы вернем сами строки. Большая часть программы останется без изменений, за исключением SQL-запроса и кода, возвращающего данные из объекта ResultSet :

Этот код выведет на экран следующее:

Тут есть пара моментов, на которые следует обратить внимание. Метод rs.getInt(1) используется для получения столбца с целочисленным типом, в нашем случае это столбец «id». Индексы в JDBC начинаются с единицы, поэтому rs.getInt(1) вернет значение первого столбца как целое число. В случае, если вы укажете неверный индекс (многие разработчики вызывают rs.getInt(0) для получения первого столбца), выбросится исключение InvalidColumnIndexException . Доступ к столбцам по индексу чреват ошибками, поэтому лучше использовать имя столбца, например, rs.getInt(«id») . Подробнее об этом вы можете прочитать в этой статье. Метод getString() используется для получения строковых значений из базы (например, VARCHAR ). Цикл будет выполняться, пока rs.next() не вернет false . Это значит, что строки закончились. В нашем случае в таблице две строки, поэтому цикл выполнится два раза, выводя информацию о книгах из таблицы на экран.

Добавляем данные с помощью INSERT-запроса в JDBC

Добавление данных мало отличается от их получения: мы просто используем INSERT-запрос вместо SELECT-запроса и метод executeUpdate() вместо executeQuery() . Этот метод используется для запросов INSERT, UPDATE и DELETE, а также для SQL DDL выражений, таких как CREATE, ALTER или DROP. Эти команды не возвращают результата, поэтому мы убираем все упоминания ResultSet ‘а в коде и изменяем запрос соответственно:

После запуска программы вы можете проверить таблицу в СУБД. На этот раз вы увидите три записи в таблице:

Теперь вы умеете подключаться к MySQL из Java-приложения и выполнять SELECT, INSERT, DELETE и UPDATE-запросы так же, как и в MySQL GUI. Для подключения мы используем объект Connection , для чтения результатов запроса — ResultSet . Убедитесь перед подключением, что сервер MySQL запущен и mysql-connector-java-5.1.17-bin.jar находится в CLASSPATH, чтобы избежать ClassNotFoundException .

Когда разберетесь с подключением и простыми запросами, имеет смысл изучить, как использовать подготавливаемые запросы (Prepared Statement) в Java для избежания SQL-инъекции. В боевом коде всегда следует использовать подготавливаемые запросы и связывание переменных.

Ссылка на основную публикацию
Adblock
detector