다음을 통해 공유


기본 데이터 형식 샘플

JDBC 드라이버 다운로드

이 SQL Server용 Microsoft JDBC Driver 샘플 애플리케이션에서는 결과 집합 getter 메서드를 사용하여 기본 SQL Server 데이터 형식 값을 검색하는 방법과 함께 결과 집합 업데이트 메서드를 사용하여 해당 값을 업데이트하는 방법을 보여 줍니다.

이 샘플의 코드 파일 이름은 BasicDataTypes.java이며 다음과 같은 위치에 있습니다.

\<installation directory>\sqljdbc_<version>\<language>\samples\datatypes

요구 사항

이 샘플 애플리케이션을 실행하려면 mssql-jdbc jar 파일을 포함하도록 클래스 경로를 설정해야 합니다. 또한 AdventureWorks2022 샘플 데이터베이스에 대한 액세스 권한이 필요합니다. 클래스 경로를 설정하는 방법에 대한 자세한 내용은 JDBC 드라이버 사용을 참조하세요.

이 샘플에서는 필요한 테이블을 만들고 AdventureWorks2022 샘플 데이터베이스에 예제 데이터를 삽입합니다.

참고 항목

Microsoft JDBC Driver for SQL Server는 기본 설정된 JRE(Java Runtime Environment)에 따라 사용할 수 있는 mssql-jdbc 클래스 라이브러리 파일을 제공합니다. 선택할 JAR 파일에 대한 자세한 내용은 JDBC 드라이버에 대한 시스템 요구 사항을 참조하세요.

예시

다음 샘플 코드에서는 AdventureWorks2022 데이터베이스에 연결한 다음, DataTypesTable 테스트 테이블에서 단일 데이터 행을 검색합니다. 검색한 후 사용자 지정 displayRow 메서드를 호출하여 SQLServerResultSet 클래스의 다양한 get<Type> 메서드를 사용하여 결과 집합의 모든 데이터를 표시합니다.

그런 다음, 샘플에서는 SQLServerResultSet 클래스의 다양한 update<Type> 메서드를 사용하여 결과 집합의 데이터를 업데이트한 후, updateRow 메서드를 호출하여 해당 데이터를 데이터베이스에 다시 보관합니다.

마지막으로 샘플은 결과 집합의 데이터를 새로 고친 다음, 사용자 지정 displayRow 메서드를 다시 호출하여 결과 집합에 데이터를 표시합니다.

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;

import com.microsoft.sqlserver.jdbc.SQLServerResultSet;

import microsoft.sql.DateTimeOffset;


public class DatatypesTest {
    private static final String tableName = "DataTypesTable";

    public static void main(String[] args) {

        // Create a variable for the connection string.
        String connectionUrl = "jdbc:sqlserver://<server>:<port>;encrypt=true;databaseName=<database>;user=<user>;password=<password>";

        try (Connection con = DriverManager.getConnection(connectionUrl);
                Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);) {

            dropAndCreateTable(stmt);
            insertOriginalData(con);

            String SQL = "SELECT * FROM " + tableName;
            ResultSet rs = stmt.executeQuery(SQL);
            rs.next();
            displayRow("ORIGINAL DATA", rs);

            // Update the data in the result set.
            rs.updateString(2, "B");
            rs.updateString(3, "Some updated text.");
            rs.updateBoolean(4, true);
            rs.updateDouble(5, 77.89);
            rs.updateDouble(6, 1000.01);
            long timeInMillis = System.currentTimeMillis();
            Timestamp ts = new Timestamp(timeInMillis);
            rs.updateTimestamp(7, ts);
            rs.updateDate(8, new Date(timeInMillis));
            rs.updateTime(9, new Time(timeInMillis));
            rs.updateTimestamp(10, ts);
            rs.updateTimestamp(11, ts);
            rs.updateObject(12, 987654321L, microsoft.sql.Types.SQL_VARIANT);

            // -480 indicates GMT - 8:00 hrs
            ((SQLServerResultSet) rs).updateDateTimeOffset(11, DateTimeOffset.valueOf(ts, -480));

            rs.updateRow();

            // Get the updated data from the database and display it.
            rs = stmt.executeQuery(SQL);
            rs.next();
            displayRow("UPDATED DATA", rs);
        }
        // Handle any errors that may have occurred.
        catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static void displayRow(String title, ResultSet rs) throws SQLException {
        System.out.println(title);
        System.out.println(rs.getInt(1) + " , " + // SQL integer type
                rs.getString(2) + " , " + // SQL char type
                rs.getString(3) + " , " + // SQL varchar type
                rs.getBoolean(4) + " , " + // SQL bit type
                rs.getDouble(5) + " , " + // SQL decimal type
                rs.getDouble(6) + " , " + // SQL money type
                rs.getTimestamp(7) + " , " + // SQL datetime type
                rs.getDate(8) + " , " + // SQL date type
                rs.getTime(9) + " , " + // SQL time type
                rs.getTimestamp(10) + " , " + // SQL datetime2 type
                ((SQLServerResultSet) rs).getDateTimeOffset(11) + " , " + // SQL datetimeoffset type
                rs.getObject(12)); // SQL sqlvariant type
        System.out.println();
    }

    private static void dropAndCreateTable(Statement stmt) throws SQLException {
        stmt.executeUpdate("if object_id('" + tableName + "','U') is not null" + " drop table " + tableName);

        String sql = "create table " + tableName + " (" + "c1 int, " + "c2 char(20), " + "c3 varchar(20), " + "c4 bit, "
                + "c5 decimal(10,5), " + "c6 money, " + "c7 datetime, " + "c8 date, " + "c9 time(7), "
                + "c10 datetime2(7), " + "c11 datetimeoffset(7), " + "c12 sql_variant" + ");";

        stmt.execute(sql);
    }

    private static void insertOriginalData(Connection con) throws SQLException {
        String sql = "insert into " + tableName + " values( " + "?,?,?,?,?,?,?,?,?,?,?,?" + ")";
        try (PreparedStatement pstmt = con.prepareStatement(sql)) {
            pstmt.setObject(1, 100);
            pstmt.setObject(2, "original text");
            pstmt.setObject(3, "original text");
            pstmt.setObject(4, false);
            pstmt.setObject(5, 12.34);
            pstmt.setObject(6, 56.78);
            pstmt.setObject(7, new java.util.Date(1453500034839L));
            pstmt.setObject(8, new java.util.Date(1453500034839L));
            pstmt.setObject(9, new java.util.Date(1453500034839L));
            pstmt.setObject(10, new java.util.Date(1453500034839L));
            pstmt.setObject(11, new java.util.Date(1453500034839L));
            pstmt.setObject(12, 123456789L, microsoft.sql.Types.SQL_VARIANT);
            pstmt.execute();
        }
    }
}

참고 항목

데이터 형식으로 작업(JDBC)