고급 데이터 형식 사용

JDBC 드라이버 다운로드

Microsoft JDBC Driver for SQL Server는 JDBC 고급 데이터 형식을 사용하여 SQL Server 데이터 형식을 Java 프로그래밍 언어로 이해 가능한 형식으로 변환합니다.

설명

다음 테이블에서는 고급 SQL Server, JDBC, Java 프로그래밍 언어 데이터 형식 간의 기본 매핑을 나열합니다.

SQL Server 형식 JDBC 형식(java.sql.Types) Java 언어 형식
varbinary(max)

image
LONGVARBINARY byte[](기본값), Blob, InputStream, String
text

varchar(max)
LONGVARCHAR String(기본값), Clob, InputStream
ntext

nvarchar(max)
LONGVARCHAR

LONGNVARCHAR(Java SE 6.0)
String(기본값), Clob, NClob
xml LONGVARCHAR

SQLXML
String(기본값), InputStream, Clob, byte[], Blob, SQLXML
Udt1 VARBINARY String(기본값), byte[], InputStream
sqlvariant SQLVARIANT Object
geometry

지역
VARBINARY byte[]

1 Microsoft JDBC Driver for SQL Server는 CLR UDT를 이진 데이터로 보내고 검색할 수 있지만 CLR 메타데이터 조작은 지원하지 않습니다.

다음 섹션에서는 JDBC 드라이버와 고급 데이터 형식을 사용하는 방법의 예를 보여 줍니다.

BLOB, CLOB 및 NCLOB 데이터 형식

JDBC 드라이버는 java.sql.Blob, java.sql.Clob, java.sql.NClob 인터페이스의 모든 메서드를 구현합니다.

참고 항목

CLOB 값은 SQL Server 2005(9.x)(또는 그 이상)의 큰 값 데이터 형식과 함께 사용할 수 있습니다. 특히 CLOB 형식은 varchar(max)nvarchar(max) 데이터 형식과 함께, BLOB 형식은 varbinary(max)image 데이터 형식과 함께, NCLOB 형식은 ntextnvarchar(max) 데이터 형식과 함께 사용할 수 있습니다.

큰 값 데이터 형식

SQL Server 이전 버전에서는 큰 값 데이터 형식을 사용할 때 특별한 처리가 필요했습니다. 큰 값 데이터 형식은 최대 행 크기 8KB를 초과하는 형식입니다. SQL Server에서는 varchar, nvarchar, varbinary 데이터 형식에 대해 max 지정자를 제공하여 값을 2^31바이트로 스토리지할 수 있도록 합니다. 테이블 열과 Transact-SQL 변수에서 varchar(max), nvarchar(max) 또는 varbinary(max) 데이터 형식을 지정할 수 있습니다.

큰 값 형식을 사용하는 기본 시나리오에는 데이터베이스에서 검색하거나 데이터베이스에 추가하는 작업이 포함됩니다. 다음 섹션에서는 이러한 작업을 수행하는 다양한 방법을 설명합니다.

데이터베이스에서 큰 값 형식 검색

varchar(max) 데이터 형식과 같이 이진이 아닌 큰 값 데이터 형식을 데이터베이스에서 검색할 때 사용할 수 있는 한 가지 방법은 해당 데이터를 문자 스트림으로 읽는 것입니다. 다음 예제에서는 SQLServerStatement 클래스의 executeQuery 메서드를 사용하여 데이터베이스에서 데이터를 검색하고 이를 결과 집합으로 반환합니다. 그런 다음 SQLServerResultSet 클래스의 getCharacterStream 메서드를 사용하여 결과 집합에서 큰 값 데이터를 읽습니다.

ResultSet rs = stmt.executeQuery("SELECT TOP 1 * FROM Test1");  
rs.next();  
Reader reader = rs.getCharacterStream(2);  

참고 항목

text, ntext, nvarchar(max) 데이터 형식에도 동일한 방법을 사용할 수 있습니다.

varbinary(max) 데이터 형식과 같은 이진 큰 값 데이터 형식을 데이터베이스에서 검색할 때 사용할 수 있는 방법에는 몇 가지가 있습니다. 가장 효율적인 방법은 다음과 같이 데이터를 이진 스트림으로 읽는 것입니다.

ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");  
rs.next();  
InputStream is = rs.getBinaryStream(2);  

getBytes 메서드를 사용하여 다음과 같이 데이터를 바이트 배열로 읽을 수도 있습니다.

ResultSet rs = stmt.executeQuery("SELECT photo FROM mypics");  
rs.next();  
byte [] b = rs.getBytes(2);  

참고 항목

BLOB으로 데이터를 읽을 수도 있습니다. 하지만 이 방법은 이전에 본 두 가지 방법보다 효율성이 떨어집니다.

데이터베이스에 큰 값 형식 추가

JDBC 드라이버를 사용하여 큰 데이터를 업로드하는 것은 메모리 크기의 경우에 적합하며 메모리보다 큰 경우에는 스트리밍이 기본 옵션입니다. 그러나 큰 데이터를 업로드하는 가장 효율적인 방법은 스트림 인터페이스를 사용하는 것입니다.

다음과 같이 문자열 또는 바이트를 사용하는 옵션도 있습니다.

PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (c1_id, c2_vcmax) VALUES (?, ?)");  
pstmt.setInt(1, 1);  
pstmt.setString(2, htmlStr);  
pstmt.executeUpdate();  

참고 항목

이 방법은 text, ntext, nvarchar(max) 열에 저장된 값에도 사용할 수 있습니다.

서버에 이미지 라이브러리가 있고 전체 이진 이미지 파일을 varbinary(max) 열에 업로드해야 하는 경우 JDBC 드라이버를 사용하는 가장 효율적인 방법은 다음과 같이 스트림을 직접 사용하는 것입니다.

try (PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (Col1, Col2) VALUES(?,?)")) { 
  File inputFile = new File("CLOBFile20mb.jpg");  
  try (FileInputStream inStream = new FileInputStream(inputFile)) {
    int id = 1;  
    pstmt.setInt(1,id);  
    pstmt.setBinaryStream(2, inStream);  
    pstmt.executeUpdate();
  }
}

참고 항목

CLOB 또는 BLOB 메서드 중 하나를 사용하는 방법은 큰 데이터를 업로드하는 데는 적합하지 않습니다.

데이터베이스에서 큰 값 형식 수정

대개의 경우 데이터베이스의 큰 값을 업데이트하거나 수정할 때 권장되는 방법은 UPDATE, WRITE, SUBSTRING과 같은 Transact-SQL 명령을 사용하여 SQLServerPreparedStatementSQLServerCallableStatement 클래스를 통해 매개 변수를 전달하는 것입니다.

보관된 HTML 파일처럼 큰 텍스트 파일에서 단어의 인스턴스를 바꾸려면 다음과 같이 Clob 개체를 사용합니다.

String SQL = "SELECT * FROM test1;";  
try (Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)
     ResultSet rs = stmt.executeQuery(SQL)) {
  rs.next();

  Clob clob = rs.getClob(2);  
  long pos = clob.position("dog", 1);  
  clob.setString(pos, "cat");  
  rs.updateClob(2, clob);  
  rs.updateRow();  
}

또한 서버에서 모든 작업을 수행하고 준비된 UPDATE 문에 매개 변수를 전달할 수 있습니다.

큰 값 형식에 대한 자세한 내용은 SQL Server 온라인 설명서의 "큰 값 형식 사용"을 참조하세요.

XML 데이터 형식

SQL Server는 SQL Server 데이터베이스에 XML 문서 및 조각을 저장할 수 있는 xml 데이터 형식을 제공합니다. xml 데이터 형식은 SQL Server의 기본 제공 데이터 형식이며 intvarchar와 같은 다른 기본 제공 형식과 비슷합니다. 다른 기본 제공 유형과 마찬가지로 변수 유형, 매개 변수 유형, 함수 반환 형식 또는 Transact-SQL CAST 및 CONVERT 함수로 테이블을 만들 때 xml 데이터 형식을 열 유형으로 사용할 수 있습니다.

JDBC 드라이버에서 xml 데이터 형식을 문자열, 바이트 배열, 스트림, CLOB, BLOB 또는 SQLXML 개체로 매핑할 수 있습니다. 기본값은 문자열입니다. JDBC 드라이버 버전 2.0부터 JDBC 드라이버에서는 SQLXML 인터페이스를 도입하는 JDBC 4.0 API를 지원합니다. SQLXML 인터페이스는 XML 데이터와 상호 작용하고 조작하는 메서드를 정의합니다. SQLXML 데이터 형식은 SQL Server xml 데이터 형식에 매핑됩니다. SQLXML Java 데이터 형식을 사용하여 관계형 데이터베이스에서 XML 데이터를 읽고 쓰는 방법에 대한 자세한 내용은 XML 데이터 지원을 참조하세요.

JDBC 드라이버의 xml 데이터 형식 구현에서는 다음을 지원합니다.

  • 가장 일반적인 프로그래밍 시나리오에서 표준 Java UTF-16 문자열로 XML에 액세스합니다.

  • UTF-8 및 기타 8비트 인코딩 XML 입력

  • 다른 XML 프로세서 및 디스크 파일과 교환하기 위해 UTF-16으로 인코딩된 경우, 선행 BOM을 사용하여 바이트 배열로 XML에 액세스

SQL Server에는 UTF-16으로 인코딩된 XML에 대한 선행 BOM이 필요합니다. XML 매개 변수 값이 바이트 배열로 제공될 때 응용 프로그램에서 이를 제공해야 합니다. 항상 SQL Server에서는 BOM 또는 포함된 인코딩 선언이 없는 UTF-16 문자열로 XML 값을 출력합니다. XML 값이 byte[], BinaryStream 또는 Blob으로 검색될 때 UTF-16 BOM은 값에 미리 보류됩니다.

xml 데이터 형식에 대한 자세한 내용은 SQL Server 온라인 설명서의 "xml 데이터 형식"을 참조하세요.

사용자 정의 데이터 형식

SQL Server 2005(9.x)에서는 UDT(사용자 정의 형식)를 도입하여 SQL Server 데이터베이스에 개체 및 사용자 지정 데이터 구조를 저장할 수 있도록 함으로써 SQL 형식 체계를 확장했습니다. UDT는 단일 SQL Server 시스템 데이터 형식으로 구성된 일반적인 별칭 데이터 형식과 달리 여러 데이터 형식을 포함할 수 있으며 관련 동작이 있을 수 있습니다. UDT는 검증할 수 있는 코드를 생성하는 Microsoft .NET CLR(공용 언어 런타임)에서 지원하는 언어를 사용하여 정의합니다. 이러한 언어에는 Microsoft Visual C# 및 Visual Basic .NET 등이 있습니다. 데이터는 .NET Framework 기반 클래스 또는 구조의 필드 및 속성으로 노출되며, 동작은 클래스 또는 구조의 메서드로 정의됩니다.

SQL Server에서는 UDT를 테이블의 열 정의, Transact-SQL 일괄 처리의 변수 또는 Transact-SQL 함수나 저장 프로시저의 인수로 사용할 수 있습니다.

사용자 정의 데이터 형식에 대한 자세한 내용은 SQL Server 온라인 설명서에서 "사용자 정의 형식의 인스턴스 사용 및 수정"을 참조하세요.

Sql_variant 데이터 형식

sql_variant 데이터 형식에 대한 자세한 내용은 Sql_variant 데이터 형식 사용을 참조 하세요.

공간 데이터 형식

공간 데이터 형식에 대한 자세한 내용은 공간 데이터 형식 사용을 참조하세요.

참고 항목

JDBC 드라이버 데이터 형식 이해