Работа с базой данных на примере SQLite JDBC

  1. package com.example.sqlite;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.sql.Statement;
  9. import java.util.Scanner;
  10.  
  11. public class Main {
  12.  
  13.     private static Connection connection;
  14.  
  15.     public static void main(String[] args) {
  16.         final String database = "test.db";
  17.         try {
  18.             // Открываем соединение с базой данных
  19.             connection = DriverManager.getConnection("jdbc:sqlite:" + database);
  20.  
  21.             // Создаём таблицы
  22.             Statement statement = connection.createStatement();
  23.             statement.executeUpdate("CREATE TABLE IF NOT EXISTS users ("
  24.                     + " id         INTEGER PRIMARY KEY AUTOINCREMENT,"
  25.                     + " name       TEXT NOT NULL,"
  26.                     + " last_visit INTEGER,"
  27.                     + " visits     INTEGER"
  28.                     + ")");
  29.  
  30.             System.out.print("Введите имя: ");
  31.             String name = new Scanner(System.in).nextLine();
  32.  
  33.             // Ищем пользователя с этим именем
  34.             PreparedStatement userExistStmt = connection.prepareStatement(
  35.                     "SELECT COUNT(*) FROM users WHERE name = ?");
  36.             userExistStmt.setString(1, name);
  37.             if (userExistStmt.executeQuery().getInt(1) == 0) {
  38.                 // Пользователь не найден, добавляем
  39.                 addUser(name);
  40.             } else {
  41.                 // Обновляем счетчик посещений
  42.                 PreparedStatement updateStmt = connection.prepareStatement(
  43.                         "UPDATE users SET last_visit = CURRENT_TIMESTAMP, visits = visits + 1 WHERE name = ?");
  44.                 updateStmt.setString(1, name);
  45.                 updateStmt.executeUpdate();
  46.             }
  47.  
  48.             // Выводим информацию обо всех пользователях
  49.             showAllUsers();
  50.  
  51.             // Удаляем пользователей, которые не заходили 10 минут
  52.             int affectedRows = statement.executeUpdate(
  53.                     "DELETE FROM users WHERE last_visit < DATETIME('now', '-10 minutes')");
  54.             System.out.format("Удалено %d записей%n", affectedRows);
  55.         } catch (SQLException ex) {
  56.             ex.printStackTrace();
  57.         } finally {
  58.             // Закрываем соединение
  59.             if (connection != null) {
  60.                 try {
  61.                     connection.close();
  62.                 } catch (SQLException ex) {}
  63.             }
  64.         }
  65.     }
  66.  
  67.     private static void addUser(String name) throws SQLException {
  68.         PreparedStatement insertStmt = connection.prepareStatement(
  69.                 "INSERT INTO users(name, last_visit, visits) VALUES(?, CURRENT_TIMESTAMP, ?)");
  70.         insertStmt.setString(1, name);
  71.         insertStmt.setInt(2, 0);
  72.         insertStmt.executeUpdate();
  73.         ResultSet generatedKeys = insertStmt.getGeneratedKeys();
  74.         if (generatedKeys.next()) {
  75.             System.out.format("Пользователь %s добавлен. id: %d%n",
  76.                     name, generatedKeys.getLong(1));
  77.         }
  78.     }
  79.  
  80.     private static void showAllUsers() throws SQLException {
  81.         System.out.format("|%4s|%15s|%10s|%6s|%n", "id", "name", "last_visit", "visits");
  82.         System.out.println("|----|---------------|----------|------|");
  83.         Statement statement = connection.createStatement();
  84.         ResultSet rs = statement.executeQuery(
  85.                 "SELECT *, time(last_visit) AS last FROM users ORDER BY last_visit DESC");
  86.         while (rs.next()) {
  87.             int id = rs.getInt(1); // можно обращаться по номеру столбца
  88.             String username = rs.getString("name"); // а можно по имени
  89.             String lastTime = rs.getString("last");
  90.             int visits = rs.getInt("visits");
  91.             System.out.format("|%4d|%15s|%10s|%6d|%n", id, username, lastTime, visits);
  92.         }
  93.     }
  94.  
  95. }
Пример работы с базой данных SQLite3 на Java. Показано создание таблицы, вставка, обновление, выборка и удаление.

Для работы добавить драйвер sqlite-jdbc в classpath:
  1. java -cp .;sqlite-jdbc-3.16.1.jar com.example.sqlite.Main
Либо зависимость Gradle:
  1. dependencies {
  2.     compile 'org.xerial:sqlite-jdbc:3.16.1'
  3. }

Пример вывода:
  1. Введите имя: Маргарита
  2. |  id|           name|last_visit|visits|
  3. |----|---------------|----------|------|
  4. |   9|      Маргарита|  14:58:31|     3|
  5. |   7|        Аркадий|  14:58:11|     2|
  6. |   8|           Олег|  14:57:40|     5|
  7. |   6|         Сергей|  14:54:48|     1|
  8. Удалено 1 записей

Реклама

Мы в соцсетях

tw tg yt gt