Таблицы java jdbc пример

Java Guides

In this tutorial, we will show you how to connect to the PostgreSQL database server and how to create a table in a PostgreSQL database using a Java program.

PostgreSQL is a powerful, open-source object-relational database system. It is a multi-user database management system. It runs on multiple platforms including Linux, FreeBSD, Solaris, Microsoft Windows, and Mac OS X. PostgreSQL is developed by the PostgreSQL Global Development Group.

Technologies used

Download PostgreSQL JDBC Driver

To connect to the PostgreSQL database server from a Java program, you need to have a PostgreSQL JDBC driver. You can download the latest version of the driver on the postgresql.org website via the download page.

 https://mvnrepository.com/artifact/org.postgresql/postgresql --> dependency> groupId>org.postgresqlgroupId> artifactId>postgresqlartifactId> version>42.2.9version> dependency>
// https://mvnrepository.com/artifact/org.postgresql/postgresql compile group: 'org.postgresql', name: 'postgresql', version: '42.2.9'

PostgreSQL Database Setup

We are going to show how to install a PostgreSQL database on Windows 10. Make sure that you have installed the PostgreSQL server on your system.

Читайте также:  Opencv python распознавание движения

JDBC Connection to the PostgreSQL Database Server

The complete Java program for creating «users» table in the PostgreSQL database server is as follows:

package net.javaguides.postgresql.tutorial; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; /** * Create Table JDBC Example * @author Ramesh Fadatare * */ public class CreateTableExample < private final String url = "jdbc:postgresql://localhost/mydb"; private final String user = "postgres"; private final String password = "root"; private static final String createTableSQL = "CREATE TABLE users " + "(ID INT PRIMARY KEY ," + " NAME TEXT, " + " EMAIL VARCHAR(50), " + " COUNTRY VARCHAR(50), " + " PASSWORD VARCHAR(50))"; public static void main(String[] argv) throws SQLException < CreateTableExample createTableExample = new CreateTableExample(); createTableExample.createTable(); > public void createTable() throws SQLException < System.out.println(createTableSQL); // Step 1: Establishing a Connection try (Connection connection = DriverManager.getConnection(url, user, password); // Step 2:Create a statement using connection object Statement statement = connection.createStatement();) < // Step 3: Execute the query or update query statement.execute(createTableSQL); > catch (SQLException e) < // print SQL exception information printSQLException(e); > > public static void printSQLException(SQLException ex) < for (Throwable e: ex) < if (e instanceof SQLException) < e.printStackTrace(System.err); System.err.println("SQLState: " + ((SQLException) e).getSQLState()); System.err.println("Error Code: " + ((SQLException) e).getErrorCode()); System.err.println("Message: " + e.getMessage()); Throwable t = ex.getCause(); while (t != null) < System.out.println("Cause: " + t); t = t.getCause(); > > > > >
CREATE TABLE users (ID INT PRIMARY KEY , NAME TEXT, EMAIL VARCHAR(50), COUNTRY VARCHAR(50), PASSWORD VARCHAR(50)) 

In this tutorial, we have shown you how to create a table in a PostgreSQL database using a Java program.

Источник

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

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

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

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

Statement statement = connection.createStatement();

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

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

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

import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import static jdbc.ConnectionData.URL; import static jdbc.ConnectionData.USER; import static jdbc.ConnectionData.PASSWORD; public class CreatingTable < private static final String CREATE_TABLE_QUERY = "CREATE TABLE users " + "(id INT(5) NOT NULL AUTO_INCREMENT," + " username VARCHAR(50), " + "PRIMARY KEY(id));"; public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); Statement statement = connection.createStatement()) < statement.executeUpdate(CREATE_TABLE_QUERY); >catch (Exception e) < System.out.println(e.getMessage()); >> >
public class ConnectionData < public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String DB = "catalog"; public static final String URL = "jdbc:mysql://localhost:3306/" + DB; public static final String USER = "root"; public static final String PASSWORD = "admin"; >

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

public class RetrieveData < private static final String SELECT_QUERY = "SELECT * FROM users;"; public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); Statement statement = connection.createStatement()) < ResultSet resultSet = statement.executeQuery(SELECT_QUERY); System.out.printf("%-20s%s%n", "id", "username"); System.out.println("-------------------------------"); while (resultSet.next()) < int String name = resultSet.getString("username"); System.out.printf("%-20d%s%n", id, name); >> catch (SQLException e) < System.out.println(e.getMessage()); >> >

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

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

void addBatch(String) int[] executeBatch()‏

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

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

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import static jdbc.ConnectionData.URL; import static jdbc.ConnectionData.USER; import static jdbc.ConnectionData.PASSWORD; public class InsertBatchData < public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); Statement statement = connection.createStatement()) < statement.addBatch("INSERT INTO users (username) VALUES ('sidorov')"); statement.addBatch("INSERT INTO users (username) VALUES ('petrov')"); statement.addBatch("INSERT INTO users (username) VALUES ('kozlov')"); statement.executeBatch(); >catch (SQLException e) < System.out.println(e.getMessage()); >> >

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

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

SELECT name FROM persons WHERE age=?

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

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

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

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import static jdbc.ConnectionData.URL; import static jdbc.ConnectionData.USER; import static jdbc.ConnectionData.PASSWORD; public class RetrieveDataPreparedStatement < private static final String SELECT_QUERY = "SELECT * FROM users WHERE id>? AND username LIKE ?"; public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement preparedStatement = connection.prepareStatement(SELECT_QUERY)) < preparedStatement.setInt(1, 2); preparedStatement.setString(2, "P%"); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) < System.out.printf("%d%23s%n", resultSet.getInt("id"), resultSet.getString("username")); >> catch (Exception e) < e.printStackTrace(); >> >

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

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import static jdbc.ConnectionData.URL; import static jdbc.ConnectionData.USER; import static jdbc.ConnectionData.PASSWORD; public class InsertDataPreparedStatement < private static final String INSERT_QUERY = "INSERT INTO users (username) VALUES (?)"; public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement preparedStatement = connection.prepareStatement(INSERT_QUERY)) < preparedStatement.setString(1, "misha"); preparedStatement.addBatch(); preparedStatement.setString(1, "grisha"); preparedStatement.addBatch(); preparedStatement.executeBatch(); >catch (SQLException e) < System.out.println(e.getMessage()); >> >

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

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

db.driver = com.mysql.jdbc.Driver db.name = catalog db.url = jdbc:mysql://localhost:3306/ db.user = root db.password = admin 

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

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ResourceBundle; public class ConnectorDB < public static Connection getConnection() throws SQLException < ResourceBundle resource = ResourceBundle.getBundle("database"); String url = resource.getString("db.url"); String user = resource.getString("db.user"); String pass = resource.getString("db.password"); String dbName = resource.getString("db.name"); return DriverManager.getConnection(url + dbName, user, pass); >>

7. Data access object (DAO)

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

Пример 8. Абстрактный класс DAO

import java.util.List; public abstract class AbstractDAO  < public abstract ListfindAll(); public abstract T findEntityById(K id); public abstract boolean delete(K id); public abstract boolean delete(T entity); public abstract boolean create(T entity); public abstract T update(T entity); >

Пример 9. Абстрактный класс DAO

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class UserDAO extends AbstractDAO  < public static final String SQL_SELECT_ALL_USERS = "SELECT * FROM users"; public static final String SQL_SELECT_USER_ID = "SELECT * FROM users WHERE @Override public ListfindAll() < Listusers = new ArrayList<>(); try (Connection connection = ConnectorDB.getConnection(); Statement statement = connection.createStatement()) < ResultSet rs = statement.executeQuery(SQL_SELECT_ALL_USERS); while (rs.next()) < int String name = rs.getString(2); users.add(new User(id, name)); >> catch (SQLException e) < System.out.println(e.getMessage()); >return users; > @Override public User findEntityById(Integer id) < User user = null; try (Connection connection = ConnectorDB.getConnection(); PreparedStatement statement = connection.prepareStatement(SQL_SELECT_USER_ID)) < statement.setInt(1, id); ResultSet rs = statement.executeQuery(); if (rs.next()) < String name = rs.getString(2); user = new User(id, name); >> catch (SQLException e) < System.out.println(e.getMessage()); >return user; > @Override public boolean delete(Integer id) < throw new UnsupportedOperationException(); >@Override public boolean delete(User entity) < throw new UnsupportedOperationException(); >@Override public boolean create(User entity) < throw new UnsupportedOperationException(); >@Override public User update(User entity) < throw new UnsupportedOperationException(); >>

Источник

Оцените статью