Работа с базой данных

Для начала создадим БД. Открываем терминал (операционная система – Ubuntu 16.04 LTS – при использовании другой ОС – способ создания БД может отличаться) и выполняем следующую команду:

sudo -i -u postgres

После ввода пароля открываем консоль БД:

psql

И создаем саму базу данных:

postgres=# CREATE DATABASE servlets_tutorial;

Подключим нашу БД к Idea:

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

Файл initDB.sql

CREATE TABLE IF NOT EXISTS developers (
  id         INT PRIMARY KEY,
  first_name VARCHAR(50)  NOT NULL,
  last_name  VARCHAR(100) NOT NULL,
  specialty  VARCHAR(100) NOT NULL,
  experience INT          NOT NULL,
  salary     DECIMAL      NOT NULL
);

Файл populateDB.sql

INSERT INTO developers VALUES (1, 'Eugene', 'Suleimanov', 'Software Engineer', 3, '3000.00');

Поочередно выполним оба эти файла.
В результате мы получим следующую таблицу:

Добавим в наш pom.xml файл зависимости для postgres коннектора:

Файл pom.xml

<
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
>
<
modelVersion
>
4.0.0
<
/modelVersion
>
<
groupId
>
net.proselyte.tutorials
<
/groupId
>
<
artifactId
>
ServletsTutorial
<
/artifactId
>
<
packaging
>
war
<
/packaging
>
<
version
>
1.0-SNAPSHOT
<
/version
>
<
name
>
Servlets Tutorial
<

ame
>
<
url
>
http://maven.apache.org
<
/url
>
<
properties
>
<
javax.servlet.api.version
>
2.5
<
/javax.servlet.api.version
>
<
tomcat.plugin.version
>
2.2
<
/tomcat.plugin.version
>
<
postgres.connector.version
>
9.1-901.jdbc3
<
/postgres.connector.version
>
<
/properties
>
<
dependencies
>
<
dependency
>
<
groupId
>
javax.servlet
<
/groupId
>
<
artifactId
>
servlet-api
<
/artifactId
>
<
version
>
${javax.servlet.api.version}
<
/version
>
<
scope
>
provided
<
/scope
>
<
/dependency
>
<
dependency
>
<
groupId
>
postgresql
<
/groupId
>
<
artifactId
>
postgresql
<
/artifactId
>
<
version
>
${postgres.connector.version}
<
/version
>
<
/dependency
>
<
/dependencies
>
<
build
>
<
finalName
>
ServletsTutorial
<
/finalName
>
<
plugins
>
<
!-- Tomcat plugin --
>
<
plugin
>
<
groupId
>
org.apache.tomcat.maven
<
/groupId
>
<
artifactId
>
tomcat7-maven-plugin
<
/artifactId
>
<
version
>
${tomcat.plugin.version}
<
/version
>
<
configuration
>
<
path
>
/
<
/path
>
<
port
>
8088
<
/port
>
<
/configuration
>
<
/plugin
>
<
/plugins
>
<
/build
>
<
/project
>

Перейдем к созданию самого сервлета.
Класс DatabaseDemo.java

package net.proselyte.servletstutorial;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

/**
 * Simple servlet that demonstrates work with database.
 *
 * @author Eugene Suleimanov
 */

public class DatabaseDemo extends HttpServlet {

    static final String JDBC_DRIVER = "org.postgresql.Driver";
    static final String DATABASE_URL = "jdbc:postgresql://localhost:5432/servlets_tutorial";
    static final String DATABASE_USER = "postgres";
    static final String DATABASE_PASSWORD = "postgres";
    static final String GET_ALL_DEVELOPERS_RECORDS = "SELECT * FROM developers";

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();

        String title = "Database Demo";
        String docType = "
<
!DOCTYPE html
>
";

        try {
            Class.forName(JDBC_DRIVER);
            Connection connection = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);

            Statement statement = connection.createStatement();

            ResultSet resultSet = statement.executeQuery(GET_ALL_DEVELOPERS_RECORDS);

            writer.println(docType + "
<
html
>
<
head
>
<
title
>
" + title + "
<
/title
>
<
/head
>
<
body
>
");
            writer.println("
<
h1
>
DEVELOPERS DATA
<
/h1
>
");
            writer.println("
<
br/
>
");
            while (resultSet.next()) {
                int id = resultSet.getInt(1);
                String firstName = resultSet.getString(2);
                String lastName = resultSet.getString(3);
                String specialty = resultSet.getString(4);
                int experience = resultSet.getInt(5);
                int salary = resultSet.getInt(6);


                writer.println("ID: " + id);
                writer.println("First name: " + firstName + "
<
br/
>
");
                writer.println("Last name: " + lastName + "
<
br/
>
");
                writer.println("Specialty: " + specialty + "
<
br/
>
");
                writer.println("Experience: " + experience + " years
<
br/
>
");
                writer.println("Salary: $" + salary + "
<
br/
>
");
            }

            resultSet.close();
            statement.close();
            connection.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        writer.println("
<
/body
>
<
/html
>
");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

Файл web.xml

<
!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" 
>
<
web-app
>
<
display-name
>
Servlets Tutorial
<
/display-name
>
<
servlet
>
<
servlet-name
>
SimpleServlet
<
/servlet-name
>
<
servlet-class
>
net.proselyte.servletstutorial.SimpleServlet
<
/servlet-class
>
<
/servlet
>
<
servlet
>
<
servlet-name
>
DatabaseDemo
<
/servlet-name
>
<
servlet-class
>
net.proselyte.servletstutorial.DatabaseDemo
<
/servlet-class
>
<
/servlet
>
<
servlet-mapping
>
<
servlet-name
>
SimpleServlet
<
/servlet-name
>
<
url-pattern
>
/SimpleServlet
<
/url-pattern
>
<
/servlet-mapping
>
<
servlet-mapping
>
<
servlet-name
>
DatabaseDemo
<
/servlet-name
>
<
url-pattern
>
/DatabaseDemo
<
/url-pattern
>
<
/servlet-mapping
>
<
/web-app
>

В терминале выполним команду:

mvn tomcat7:run

Откроем браузер и перейдем по ссылке:

http://localhost:8088/DatabaseDemo

В результате получим следующую страницу:

results matching ""

    No results matching ""