В этом руководстве вы узнаете, как вставлять данные в таблицу SQL Server с помощью программы Java.
Это руководство начинается с того места, где закончилось руководство по подключению к SQL Server из руководства по программе Java.
Вставка данных в таблицу из Java
Ниже приведены шаги для вставки данных в таблицу SQL Server из программы Java с использованием JDBC:
- Сначала откройте новое подключение к базе данных SQL Server.
- Затем создайте новый объект PreparedStatement, который принимает оператор INSERT.
- Затем задайте параметры для оператора, вызвав методы set* объекта PreparedStatement.
- После этого вызовите метод executeUpdate() объекта PreparedStatement, чтобы выполнить оператор INSERT и вставить новую строку в таблицу.
- Наконец, закройте подготовленный оператор и соединение с базой данных.
Если вы используете оператор try-with-resources, вам не нужно вручную закрывать подготовленный оператор и соединение с базой данных.
Вставка автора
Шаг 1. Создайте новый файл Author.java, в котором хранится класс Author:
import java.time.LocalDate; public class Author { private String firstName; private String lastName; private LocalDate birthDate; public Author(String firstName, String lastName, LocalDate birthDate) { this.firstName = firstName; this.lastName = lastName; this.birthDate = birthDate; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public LocalDate getBirthDate() { return birthDate; } public void setBirthDate(LocalDate birthDate) { this.birthDate = birthDate; } @Override public String toString() { return "Author{" + "firstName='" + firstName + '\'' + ", lastName='" + lastName + '\'' + ", birthDate=" + birthDate + '}'; } }
Шаг 1. Создайте новый файл Java AuthorDB.java и определите класс AuthorDB:
public class AuthorDB { }
Шаг 2. Добавьте метод insert() в класс AuthorDB:
import java.sql.Connection; import java.sql.Date; import java.sql.SQLException; public class AuthorDB { private final Connection connection; public AuthorDB(Connection connection) { this.connection = connection; } public void insert(Author author) { if(author == null) { return; } var sql = "INSERT INTO Authors(FirstName, LastName, BirthDate) VALUES(?,?,?)"; try(var statement = connection.prepareStatement(sql)) { // Bind values to parameters statement.setString(1, author.getFirstName()); statement.setString(2, author.getLastName()); statement.setDate(3, Date.valueOf(author.getBirthDate())); // Execute the query statement.executeUpdate(); } catch(SQLException e) { e.printStackTrace(); } } }
Как это работает.
Сначала импортируйте классы Date, SQLException и Connection из пакета java.sql:
import java.sql.Date; import java.sql.SQLException; import java.sql.Connection;
Во-вторых, добавьте свойство подключения к классу AuthorDB:
private final Connection connection;
В-третьих, определите конструктор, который принимает объект Connection:
public AuthorDB(Connection connection) { this.connection = connection; }
В-четвертых, определите метод insert(), который принимает объект Author и вставляет новую строку с данными из объекта Author в таблицу Authors:
public void insert(Author author) throws DBException
В-пятых, немедленно верните значение, если объект автора равен null:
if(author == null) { return; }
В-шестых, создайте оператор INSERT, который вставляет новую строку в таблицу Authors:
var sql = "INSERT INTO Authors(FirstName, LastName, BirthDate) VALUES(?,?,?)";
В запросе вопросительные знаки(?) являются заполнителями для параметров. Они будут заменены фактическим значением во время выполнения. Такой подход обеспечивает безопасную передачу пользовательского ввода в SQL-запрос, что помогает предотвратить атаки SQL-инъекций.
В-седьмых, создайте объект PreparedStatement с помощью оператора INSERT:
try(var pstmt = connection.prepareStatement(sql)) {
В-восьмых, привяжите фактические значения к заполнителям в операторе INSERT:
statement.setString(1, author.getFirstName()); statement.setString(2, author.getLastName()); statement.setDate(3, Date.valueOf(author.getBirthDate()));
В-девятых, вызовите метод executeUpdate() объекта PreparedStatement, чтобы выполнить оператор INSERT и вернуть количество вставленных строк:
statement.executeUpdate();
Наконец, выдайте новое исключение DBException, если во время вставки произошла ошибка:
throw new DBException(e.getMessage());
Шаг 3. Измените метод main() класса Main, чтобы использовать метод insert() класса AuthorDB:
import java.sql.SQLException; import java.time.LocalDate; public class Main { public static void main(String[] args) { // Create a new Author object var author = new Author("John","Doe",LocalDate.of(1990, 12, 31)); // Connect to the SQL Server try(var connection = SQLServerConnection.connect()) { // Create a new AuthorDB object var authorDB = new AuthorDB(connection); // Insert the author into the database authorDB.insert(author); } catch(SQLException | DBException e) { System.err.println(e.getMessage()); } } }
Как это работает.
Сначала создайте новый объект Author для вставки:
var author = new Author("John","Doe",LocalDate.of(1990, 12, 31));
Во-вторых, вызовите метод connect() класса SQLServerConnection для подключения к SQL Server:
try(var connection = SQLServerConnection.connect())
В-третьих, создайте новый объект AuthorDB:
var authorDB = new AuthorDB(connection);
В-четвертых, вставьте нового автора в базу данных, вызвав метод insert() объекта AuthorDB:
authorDB.insert(author);
Наконец, перехватите SQLException и DBException и отобразите ошибку:
} catch(SQLException | DBException e) { System.err.println(e.getMessage()); }
Шаг 4. Запустите программу Java.
Проверьте вставку
Шаг 1. Откройте SQL Server Management Studio(SSMS) и подключитесь к SQL Server.
Шаг 2. Выполните следующий запрос для извлечения данных из таблицы Authors:
SELECT * FROM Authors;
Выход:
AuthorID | FirstName | LastName | BirthDate ---------+-----------+----------+------------ 1 | John | Doe | 1990-12-31 (1 row)
Загрузите исходный код проекта
Загрузите исходный код проекта
Краткое содержание
- Вызовите метод executeUpdate() объекта PreparedStatement, чтобы выполнить оператор INSERT для вставки строки в таблицу.