Java 애플리케이션을 모든 SQL 데이터베이스와 연결

16180 단어 javamysqljdbcsql
업계에서 가장 크고 가장 많이 사용되는 언어 중 하나인 Java. 소프트웨어 엔지니어로서 팩에 이 언어를 포함하는 것이 더 좋을 것입니다.

2017년부터 대학에서 Java를 공부하는 동안 하나 이상의 수업에서 동료의 90%가 데이터베이스에 연결할 수 없으며 모든 프로젝트가 메모리에 저장된 임시 상호 작용에만 의존한다는 것을 항상 알았습니다.

그래서 오늘 이 기사를 통해 JDBC를 통해 Java 애플리케이션을 SQL 데이터베이스에 연결하기 위해 작성할 수 있는 각 줄을 설명하는 심층 가이드를 제공하여 그들과 모든 커뮤니티를 도우려고 합니다.

JDBC 🤔?!



JDBC은 Java 데이터베이스 연결을 나타냅니다. JDBC는 JDBC 드라이버를 통해 모든 관계형 데이터베이스와 쿼리를 연결하고 실행하는 Java API입니다. JavaSE(Java Standard Edition)의 일부입니다.

Why Should We Use JDBC ?

Before JDBC, ODBC API was the database API to connect and execute the query with the database. But, ODBC API uses ODBC driver which is written in C language (i.e. platform dependent and unsecured). That is why Java has defined its own API (JDBC API) that uses JDBC drivers (written in Java language).



연결성 🪁 ?!



With this article, we use MySQL but almost steps are applied to all relational databases like PostgreSQL, SQLite, MariaDB, Oracle ...etc



먼저 엔진에서 이 SQL 쿼리를 실행하여 데이터베이스를 설정하겠습니다.

CREATE DATABASE myjavadb;
USE myjavadb;
CREATE TABLE user(
  id int(10),
  name varchar(40),
  age int(3)
);


그런 다음 자신의 IDE/편집기로 Java 프로젝트를 생성하고 다음 2단계에 따라 jdbc 커넥터 추가를 시작할 수 있습니다.
  • Java 커넥터( mysqlconnector.jar ) here를 설치합니다.
  • mysqlconnector.jar 커넥터 파일을 붙여넣어 프로젝트에 로드합니다.JRE/lib/ext folder .

  • 이제 2개의 클래스를 생성하여 연결 동작을 시작할 수 있습니다.
  • MySQLConnector 구성을 기반으로 데이터베이스 연결 URL을 생성합니다.

  • public final class MySQLConnector {
      private final static String dbHost = "localhost";
      private final static String dbPort = "3306";
      private final static String dbName = "myjavadb";
      private final static String dbUsername = "root";
      private final static String dbPassword = "mypassword";
    
      public static String getConnectionURL() {
        return String.format(
          "jdbc:mysql//%s:%s/%s?user=%s&password=%s",
          dbHost,
          dbPort,
          dbName,
          dbUsername,
          dbPassword
        );
      }
    }
    


  • DBContext 데이터베이스 뒤에 있는 모든 논리를 래핑합니다.

  • import java.sql.*;
    
    public class DBContext {
      private Connection connection;
      private Boolean connected;
    
      public DBContext() {
        this.connection = null;
        this.connected = false;
      }
    
      public Boolean connect() throws SQLException, ClassNotFoundException {
        // You can find the class name for any relational database with samll search on google.
        // PostgreSQL example: https://jdbc.postgresql.org/documentation/81/load.html
        Class.forName("mysql.jdbc.Driver");
        // We use DriverManager.getConnection() to connect.
        this.connection = DriverManager.getConnection(
          MySQLConnector.getConnectionURL()
        );
        this.connected = true;
        return this.connected;
      }
    
      public Boolean close() throws SQLException {
        // Close the opened connection.
        this.connection.close();
        if (this.connection.isClosed()) {
          this.connection = null;
          this.connected = false;
        }
    
        return !this.connected;
      }
    }
    
    


    쿼리 🐱‍💻?!



    마지막으로 가장 섹시한 부분 🐱‍🏍입니다! SQL 데이터베이스는 데이터 조작 언어(DML)를 통해 SQL CRUD 작업을 기반으로 데이터를 가져오거나 변경하는 기능을 제공합니다.



    📍 You can learn more on DML and SQL through this ressource.



    쿼리를 작성해야 하는 경우 명령문을 작성하고 실행해야 하지만 JDBC에는 두 가지 유형의 명령문이 있습니다.
  • 설명: 인터페이스는 데이터베이스에서 쿼리를 실행하는 방법을 제공합니다.
  • PreparedStatement: Statement의 하위 인터페이스입니다. 매개변수화된 쿼리를 실행하는 데 사용됩니다.

  • Summary:

    If we want to pass params to the query and/or prevent the sql injection problems you should use PreparedStatement.



    우리의 경우에는 PreparedStatement 로 갈 것입니다.

    public class DBContext {
      // ...
      private PreparedStatement preparedStatement;
    
      public DBContext() {
        // ...
        this.preparedStatement = null;
      }
    
      // ...
    
      public PreparedStatement preparedQuery(String sqlQuery) throws SQLException {
        // Not we can add our custom exception. Soon, I will write an article on it 😅!
        if (!this.connected)
          throw new SQLException();
        this.preparedStatement = this.connection.prepareStatement(sqlQuery);
        return this.preparedStatement;
      }
    
      // ...
    }
    


    그런 다음 DBContext 인스턴스를 만들고 이와 같이 필요한 모든 매개변수를 주입합니다.

    DBContext myDBContextInstance = new DBContext();
    myDBContextInstance
      .preparedQuery("SELECT * FROM ?;")
      .setString(1, "users");
    


    📍 You can check all params setter through the java offical web site.



    이 단계에서 SQL 쿼리를 준비했지만 아직 데이터베이스와 상호 작용하지 않습니다!
    그러기 위해서는 그것을 실행해야 합니다... 그러나 우리는 그것을 하기 위한 2가지 방법이 있습니다;

    1. executeQuery : SQL 쿼리 가져오기를 실행합니다( SELECT ).

    ResultSet result = myDBContextInstance
      .preparedQuery("SELECT * FROM ?;")
      .setString(1, "users")
      .executeQuery();
    
    while(result.next())
      System.out.println(result.string('name'));
    


    2. executeUpdate : 변형 SQL 쿼리를 실행합니다( INSERT , UPDATE , DELETE ).

    int result = myDBContextInstance
      .preparedQuery("DELETE * FROM ? WHERE id=?;")
      .setString(1, "users")
      .setString(2, "1")
      .executeUpdate();
    
    System.out.println(result + " deleted!");
    


    Note ⚠:
    It would be better to improve the code by using patterns like the Singleton pattern to keep only one instance of the connection.





    📚 JDBC 심층 분석을 위한 리소스:


  • https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html
  • https://www.javatpoint.com/java-jdbc
  • https://www.geeksforgeeks.org/introduction-to-jdbc/



  • 내가 뭐 놓친 거 없니? 의견 섹션에서 알려주고 작업하겠습니다.



    읽어 주셔서 감사합니다. 이것이 당신의 여행에 도움이 되기를 바랍니다! ❤️

    좋은 웹페이지 즐겨찾기