java.sql.SQLSyntaxErrorException: ORA-00900: SQL 문이 부적합합니다
- SQL 문법오류에 여러가지 이유가 있지만
- 이번 경우에는 툴 명령어와 SQL 조회문을 구분하지 못해서 생긴 문제
- DESC<TABLE>는 SQL문이 아닌 SQLPLUS툴의 명령어
- 따라서 SQL문이 부적합하다는 오류가 발생
DESC EMP -- SQLPLUS 데이터 구조 조회 명령어
- TABLE의 데이터를 조회하기 위해서는
- USER_TABLES 테이블에서 필요한 컬럼을 추출해야함
SELECT COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
NULLABLE
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME='EMP'
ORDER BY COLUMN_ID
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String id = "scott";
String password = "tiger";
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
String query = "SELECT COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE FROM USER_TAB_COLUMNS WHERE TABLE_NAME='" + request.getParameter("table") + "' ORDER BY COLUMN_ID";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
%>
<table>
<thead>
<tr>
<th>컬럼명</th>
<th>컬럼형식</th>
<th>컬럼길이</th>
<th>널값여부</th>
</tr>
</thead>
<tbody>
<%
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, id, password);
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
while (rs.next()) {
%>
<tr>
<td><%= rs.getString(1) %></td>
<td><%= rs.getString(2) %></td>
<td><%= rs.getString(3) %></td>
<td><%= rs.getString(4) %></td>
</tr>
<%
}} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
%>
</tbody>
</table>
</body>
</html>
- 참고로 JSP에서 SQL문을 쓸 때 세미콜론은 적지 않음
- 세미콜론 적으면 똑같이 오류뜸
<%
String query = "SELECT * FROM EMP"; // 맞는 표현
String query = "SELECT * FROM EMP;"; // 틀린 표현
%>
https://okky.kr/article/98050