사용자가 테이블 이름을 제공하는 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));