JSP를 통해 mysql 테이블에 테이블 생성

JSP를 통해 mysql 테이블에 테이블 생성

사용자가 테이블 이름을 제공하는 mysql 테이블을 생성하는 코드를 만들고 있습니다. 사용자가 개별 데이터를 입력하면 코드가 모든 데이터를 연결하고 모든 데이터를 "*"로 구분하여 출력된 이름으로 테이블을 생성합니다. 하지만 오류가 표시됩니다.

OVS$5PKT Lenny$Dk Blue com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'Blue (SlNo INTEGER, ProcessName VARCHAR(25), Water INTEGER, ChemicalName V...' at line 1

단일 필드에 단일 데이터를 입력하고 연결하지 않으면 코드가 제대로 작동합니다. 그러나 사용자가 둘 이상의 필드에 데이터를 입력하고 이를 구분 기호와 연결하면 오류가 발생합니다.

코드는 다음과 같습니다.

<%@ page import = "java.sql.*"%>
<%
    java.lang.String createDate = request.getParameter("createDate");
    java.lang.String origin = request.getParameter("origin");
    java.lang.String factoryName = request.getParameter("factoryName");
    java.lang.String buyerName = request.getParameter("buyerName");
    java.lang.String styleNumber = request.getParameter("styleNumber");
    java.lang.String poNumber = request.getParameter("poNumber");
    java.lang.String colorName = request.getParameter("colorName");
    java.lang.String washType = request.getParameter("washType");

    String conHelper = buyerName + "$" + styleNumber + "$" + colorName;

    out.println(conHelper);

    String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    String DB_USER = "root";
    String DB_PASS = "";

    int originLength = origin.length();
    
    try{

        if(originLength == 7){

            String DB_URL = "jdbc:mysql://localhost:3306/erp-pre-cost(in-house)";
            Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
            Statement stmt = conn.createStatement();

            String createTable = "CREATE TABLE IF NOT EXISTS " + conHelper +
                       " (SlNo INTEGER, " + 
                       " ProcessName VARCHAR(25), " + 
                       " Water INTEGER, " + 
                       " ChemicalName VARCHAR(50), " + 
                       " gL FLOAT, " + 
                       " Doages INTEGER, " + 
                       " UOM ENUM('Kg', 'gm'), " +
                       " MachineRPM INTEGER, " +  
                       " pH FLOAT, " + 
                       " Time INTEGER, " + 
                       " Remarks VARCHAR(30))";

             stmt.executeUpdate(createTable);
             out.println("Success!");

        }else if(originLength == 11){

            String DB_URL = "jdbc:mysql://localhost:3306/erp-pre-cost(sub-contract)";
            Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
            Statement stmt = conn.createStatement();

            String createTable = "CREATE TABLE IF NOT EXISTS " + conHelper +
                       " (SlNo INTEGER, " + 
                       " ProcessName VARCHAR(25), " + 
                       " Water INTEGER, " + 
                       " ChemicalName VARCHAR(50), " + 
                       " gL FLOAT, " + 
                       " Doages INTEGER, " + 
                       " UOM ENUM('Kg', 'gm'), " +
                       " MachineRPM INTEGER, " +  
                       " pH FLOAT, " + 
                       " Time INTEGER, " + 
                       " Remarks VARCHAR(30))";

             stmt.executeUpdate(createTable);
             out.println("Success!");

        }else{
            out.println("Failed!");
        }

    }catch(Exception e){
        out.println(e);
    }

%> 

친절하게 도와주세요!

답변1

테이블 이름에 공백이 있으면 테이블 이름을 ` 문자로 묶어야 합니다. 예:

CREATE TABLE IF NOT EXISTS `OVS$5PKT Lenny$Dk Blue`
    (SlNo INTEGER,
    /*...*/
    Remarks VARCHAR(30));

관련 정보