Progress28.ru

IT Новости


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

Java sql insert

Как использовать базу данных 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 . Это значит, что строки закончились. В нашем случае в таблице две строки, поэтому цикл выполнится два раза, выводя информацию о книгах из таблицы на экран.

Читать еще:  Collections sort java

Добавляем данные с помощью 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-инъекции. В боевом коде всегда следует использовать подготавливаемые запросы и связывание переменных.

Java JDBC Insert Example: How to insert data into a SQL table

In my first JDBC tutorial (How to connect to a JDBC database) I demonstrated how to connect your Java applications to standard SQL databases like MySQL, SQL Server, Oracle, SQLite, and others using the JDBC Connection object.

In this article I’ll take the next step and show how to insert data into a database table using Java, JDBC, and SQL.

Step 1: A sample database

Before getting into the SQL INSERT statements, you need to know what the sample database table looks like. In all of my examples in this series, I’ll be working with a database named Demo that has a database table named Customers .

Here’s what the Customers database table looks like:

CnumLnameSalutationCitySnum
1001SimpsonMr.Springfield2001
1002McBealMs.Boston2004
1003FlinstoneMr.Bedrock2003
1004CramdenMr.New York2001

How to create a JDBC INSERT statement

Inserting data into a SQL database table using Java is a simple two-step process:

  1. Create a Java Statement object.
  2. Execute a SQL INSERT command through the JDBC Statement object.

If you’re comfortable with SQL, this is a simple process. When Sun (now Oracle) created JDBC, they intended to “make the simple things simple.”

Step 2: Execute the JDBC INSERT statement

Here’s an example of how to create a Java Statement object, and then insert a record for a person named Mr. Simpson, of a town named Springfield:

As this shows, you (1) create a JDBC Statement object from your Connection instance, and (2) run your SQL INSERT statement using the Statement object’s executeUpdate method. (I show the complete process of obtaining a database Connection object below.)

If you’re not familiar with SQL, note that you must insert your fields in the order in which your table is defined (Cnum, Lname, Salutation, City, and Snum). (Snum stands for Salesperson Number, which we’ll use later to link this table to our Salesperson table.)

Inserting the other three records is just as easy as inserting this record. We can just re-use the Statement object to insert our new values:

As you can see, this is pretty easy (once you’ve seen how it’s done). In a real application you’ll just replace the string constants we’ve used with variables that you obtain from (a) an end-user or (b) an input data source.

Note: In this example, I assumed that the database table named Customers is already created. You can create your database tables through your database management tools.

The JdbcInsert1.java program

To help you understand how this process works, the following source code shows a complete Java program that creates a Connection to the database, and then inserts the data as shown previously:

If you’re interested, you can download the Java source code for the JdbcInsert1.java program here. You can test the code on your own system, but note that you’ll need to change the lines where I create my url and conn objects to reflect your own database configuration. You’ll also need the appropriate JDBC driver for the database you’re using.

Читать еще:  Arraylist java примеры

Related Java JDBC content

When it comes to inserting data into a database, most developers prefer to use a PreparedStatement instead of a Statement , as the PreparedStatement is more secure. (But when you’re first learning JDBC it’s helpful to see the Statement first.) Please see these articles for more information on how to use a PreparedStatement :

Summary

In summary, inserting data into an SQL database table with JDBC is a simple two-step process. Just (1) create a Statement object, and (2) use the object to run your normal SQL INSERT commands.

Работа с БД с помощью JDBC

1. Утверждения (Statements)

Взаимодействовать с БД мы можем с помощью трёх интерфейсов, которые имплементируются каждым драйвером:

  1. Statement — этот интерфейс используется для доступа к БД для общих целей. Он крайне полезен, когда мы используем статические SQL – выражения во время работы программы. Этот интерфейс не принимает никаких параметров.
  2. PreparedStatement — этот интерфейс может принимать параметры во время работы программы.
  3. CallableStatement — этот интерфейс становится полезным в случае, когда мы хотим получить доступ к различным процедурам БД. Он также может принимать параметры во время работы программы.

2. Интерфейс Statement

После этого мы можем использовать наш экземпляр statement для выполнения SQL – запросов. Для этой цели интерфейс Statement имеет три метода, которые реализуются каждой конкретной реализацией JDBC драйвера:

  • boolean execute(String SQL) — позволяет вам выполнить Statement, когда неизвестно заранее, является SQL-строка запросом или обновлением. Метод возвращает true, если команда создала результирующий набор.
  • int executeUpdate(String SQL) используется для выполнения обновлений. Он возвращает количество обновленных строк. Для выполнения операторов INSERT, UPDATE или DELETE.
  • ResultSet executeQuery(String SQL) — используется для выполнения запросов (SELECT). Он возвращает для обработки результирующий набор.

Пример 1. Создание таблицы

3. Интерфейс ResultSet

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

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

Основные методы интерфейса ResultSet:

  1. public boolean absolute(int row) throws SQLException — метод перемещает курсор на заданное число строк от начала, если число положительно, и от конца — если отрицательно.
  2. public void afterLast() throws SQLException — этот метод перемещает курсор в конец результирующего набора за последнюю строку.
  3. public void beforeFirst() throws SQLException — этот метод перемещает курсор в начало результирующего набора перед первой строкой.
  4. public void deleteRow() throws SQLException — удаляет текущую строку из результирующего набора и базы данных.
  5. public ResultSetMetaData getMetaData() throws SQLException — предоставляет объект метаданных для данного ResultSet. Класс ResultSetMetaData содержит информацию о результирующей таблице, такую как количество столбцов, их заголовок и т.д.
  6. public int getRow() throws SQLException — возвращает номер текущей строки.
  7. public Statement getStatement() throws SQLException — возвращает экземпляр Statement, который произвел данный результирующий набор.
  8. public boolean next() throws SQLException, public boolean previous() throws SQLException — эти методы позволяют переместиться в результирующем наборе на одну строку вперед или назад. Во вновь созданном результирующем наборе курсор устанавливается перед первой строкой, поэтому первое обращение к методу next() влечет позиционирование на первую строку. Эти методы возвращают true, если остается строка для дальнейшего перемещения. Если строк для обработки больше нет, возвращается false.
  9. public void close() throws SQLException — осуществляет немедленное закрытие ResultSet вручную. Обычно этого не требуется, так как закрытие Statement, связанного с ResultSet, автоматически закрывает ResultSet.

Пример 2. Использование интерфейса ResultSet

4. Пакетное выполнение запросов

Для выполнения набора из нескольких запросов на обновление данных в интерфейс Statement были добавлены методы:

Пакетное выполнение запросов уменьшает трафик между клиентом и СУБД и может привести к существенному повышению производительности.

Пример 3. Пакетное выполнение запросов

5. Интерфейс PreparedStatement

Особенностью SQL-выражений в PreparedStatement является то, что они могут иметь параметры. Параметризованное выражение содержит знаки вопроса в своем тексте. Например:

Перед выполнением запроса значение каждого вопросительного знака явно устанавливается методами setXxx()‏, например:

Использование PreparedStatement приводит к более быстрому выполнению запросов при их многократном вызове с различными параметрами.

Пример 4. Использование интерфейса PreparedStatement

Пример 5. Использование интерфейса PreparedStatement

6. Использование properties файлов

Пример 6. Содержимое database.properties файла

Пример 7. Использование ResourceBundle для чтения данных для аутентификации

7. Data access object (DAO)

В программном обеспечении data access object (DAO) — это объект, который предоставляет абстрактный интерфейс к какому-либо типу базы данных или механизму хранения. DAO может использоваться для разных видов доступа к БД (JDBC, JPA).

Читать еще:  Ошибка steam api dll скачать

Выполнение операций с базами данных в Java | SQL CREATE, INSERT, UPDATE, DELETE и SELECT

Эта статья поможет вам научиться выполнять основные операции с базой данных с помощью API JDBC (Java Database Connectivity). Этими основными операциями являются операторы INSERT, SELECT, UPDATE и DELETE на языке SQL . Хотя целевой системой баз данных является база данных Oracle, но те же методы можно применять и к другим системам баз данных, поскольку синтаксис запроса — стандартный SQL, как правило, поддерживается всеми системами реляционных баз данных.

Предпосылки:

Вы должны пройти эту статью, прежде чем продолжить для лучшего понимания.

Создание пользователя в базе данных Oracle и предоставление необходимых разрешений:

  1. Откройте Oracle с помощью cmd. Для этого введите sqlplus в cmd и нажмите Enter.
  2. Создайте идентификатор пользователя, защищенный паролем. Этот идентификатор пользователя называется дочерним пользователем.
  3. Предоставьте необходимые разрешения дочернему пользователю. Для простоты мы предоставляем привилегию администратора базы данных дочернему пользователю.

Создайте образец таблицы с пустыми полями:

Основные интерфейсы и классы JDBC

Давайте рассмотрим основные интерфейсы и классы JDBC, которые мы будем использовать в этой статье. Все они доступны в пакете java.sql :

    >Подключение к базе данных

Сервер базы данных Oracle прослушивает порт по умолчанию 1521 на локальном хосте . Следующий фрагмент кода подключается к имени пользователя базы данных с помощью имени пользователя login1 и пароля pwd1 .

// Java-программа для иллюстрации
// Подключение к базе данных

public class connect

public static void main(String args[])

Connection con = DriverManager.getConnection(

«jdbc:oracle:thin:@localhost:1521:orcl» , «login1» , «pwd1» );

System.out.println( «Not Connected» );

catch (Exception e)

Примечание: здесь оракул в URL базы данных в методе getConnection () указывает SID базы данных Oracle. Для базы данных Oracle 11g это orcl, а для базы данных oracle 10g это xe .

Реализация оператора вставки

// Java-программа для иллюстрации
// вставляем в базу данных

public class insert1

public static void main(String args[])

String pwd = «pwd1» ;

String fullname = «geeks for geeks» ;

String email = «geeks@geeks.org» ;

Connection con = DriverManager.getConnection(«

jdbc:oracle:thin: @localhost : 1521 :orcl «, » login1 «, » pwd1″);

Statement stmt = con.createStatement();

// Вставка данных в базу данных

String q1 = «insert into userid values(‘» +id+ «‘, ‘» +pwd+

int x = stmt.executeUpdate(q1);

System.out.println( «Successfully Inserted» );

System.out.println( «Insert Failed» );

catch (Exception e)

Реализация заявления об обновлении

// Java-программа для иллюстрации
// обновляем базу данных

public class update1

public static void main(String args[])

String pwd = «pwd1» ;

String newPwd = «newpwd» ;

Connection con = DriverManager.getConnection(«

jdbc:oracle:thin: @localhost : 1521 :orcl «, » login1 «, » pwd1″);

Statement stmt = con.createStatement();

// Обновление базы данных

String q1 = «UPDATE user > + newPwd +

«‘ WHERE > +id+ «‘ AND pwd = ‘» + pwd + «‘» ;

int x = stmt.executeUpdate(q1);

System.out.println( «Password Successfully Updated» );

System.out.println( «ERROR OCCURED :(» );

catch (Exception e)

Реализация оператора удаления

// Java-программа для иллюстрации
// удаление из базы данных

public class delete

public static void main(String args[])

String pwd = «pwd2» ;

Connection con = DriverManager.getConnection(«

jdbc:oracle:thin: @localhost : 1521 :orcl «, » login1 «, » pwd1″);

Statement stmt = con.createStatement();

// Удаление из базы данных

String q1 = «DELETE from user > + id +

int x = stmt.executeUpdate(q1);

System.out.println( «One User Successfully Deleted» );

System.out.println( «ERROR OCCURED :(» );

catch (Exception e)

Реализация выбора оператора

// Java-программа для иллюстрации
// выбираем из базы данных

public class select

public static void main(String args[])

String pwd = «pwd1» ;

Connection con = DriverManager.getConnection(«

jdbc:oracle:thin: @localhost : 1521 :orcl «, » login1 «, » pwd1″);

Statement stmt = con.createStatement();

String q1 = «select * from user > + id +

ResultSet rs = stmt.executeQuery(q1);

System.out.println( «User-Id : » + rs.getString( 1 ));

System.out.println( «Full Name :» + rs.getString( 3 ));

System.out.println( «E-mail :» + rs.getString( 4 ));

System.out.println( «No such user id is already registered» );

catch (Exception e)

Примечание. Здесь индекс столбца основан на 1, первый столбец будет с индексом 1, второй — с индексом 2 и т. Д.
Для других типов данных ResultSet предоставляет соответствующие методы получения:

Эта статья предоставлена Sangeet Anand . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

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