Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik JDBC firmy Microsoft dla programu SQL Server używa podstawowych typów danych JDBC do konwertowania typów danych programu SQL Server na format zrozumiały dla języka programowania Java i na odwrót. Sterownik JDBC zapewnia obsługę interfejsu API JDBC 4.0, który obejmuje typ danych SQLXML i typy danych National (Unicode), takie jak NCHAR, NVARCHAR, LONGNVARCHAR i NCLOB.
Mapowania typów danych
W poniższej tabeli wymieniono domyślne mapowania między podstawowymi typami danych programu SQL Server, JDBC i Języka programowania Java:
| Typy programu SQL Server | Typy JDBC (java.sql.Types) | Typy języków Java |
|---|---|---|
| bigint | BIGINT | long |
| binarny | BINARY | byte[] |
| bit | BIT | typ logiczny (boolowski) |
| char | CHAR | Sznurek |
| date | DATE | java.sql.Date |
| data/godzina3 | ZNACZNIK CZASU | java.sql.Sygnatura czasowa |
| datetime2 | ZNACZNIK CZASU | java.sql.Sygnatura czasowa |
| datetimeoffset2 | microsoft.sql.Types.DATETIMEOFFSET | microsoft.sql.DateTimeOffset |
| liczba dziesiętna | DZIESIĘTNY | java.math.BigDecimal |
| float | PODWÓJNY | podwójny |
| geometria | VARBINARY | byte[] |
| geografia | VARBINARY | byte[] |
| obraz | LONGVARBINARY | byte[] |
| int | INTEGER | int |
| JSON | microsoft.sql.Types.JSON | Sznurek |
| pieniądze | DZIESIĘTNY | java.math.BigDecimal |
| nchar | CHAR NCHAR (Java SE 6.0) |
Sznurek |
| ntekst | LONGVARCHAR LONGNVARCHAR (Java SE 6.0) |
Sznurek |
| numeryczny | Liczbowy | java.math.BigDecimal |
| nvarchar | VARCHAR NVARCHAR (Java SE 6.0) |
Sznurek |
| nvarchar(max) | VARCHAR NVARCHAR (Java SE 6.0) |
Sznurek |
| real | PRAWDZIWY | float |
| smalldatetime | ZNACZNIK CZASU | java.sql.Sygnatura czasowa |
| smallint | SMALLINT | krótki |
| smallmoney | DZIESIĘTNY | java.math.BigDecimal |
| sqlvariant | microsoft.sql.Types.SQL_VARIANT | Object |
| SMS | LONGVARCHAR | Sznurek |
| time | GODZINA1 | java.sql.Time1 |
| sygnatura czasowa | BINARY | byte[] |
| tinyint | TINYINT | krótki |
| Udt | VARBINARY | byte[] |
| uniqueidentifier | CHAR | Sznurek |
| varbinary | VARBINARY | byte[] |
| varbinary(max) | VARBINARY | byte[] |
| varchar | VARCHAR | Sznurek |
| varchar(max) | VARCHAR | Sznurek |
| wektor | microsoft.sql.Types.VECTOR | microsoft.sql.Vector |
| XML | LONGVARCHAR LONGNVARCHAR (Java SE 6.0) |
Sznurek SQLXML |
1 Aby użyć java.sql.Time z typem programu SQL Server, należy ustawić właściwość połączenia sendTimeAsDatetime na wartość false.
2 Za pomocą klasy DateTimeOffset można programowo uzyskać dostęp do wartości typu datetimeoffset.
3 java.sql.Wartości sygnatury czasowej nie mogą być już używane do porównywania wartości z kolumny datetime rozpoczynającej się od programu SQL Server 2016. To ograniczenie jest spowodowane zmianą po stronie serwera, która konwertuje datę/godzinę na data/godzina2 inaczej, co powoduje, że wartości nie są równe. Obejściem tego problemu jest zmiana kolumn daty/godziny na datetime2(3), użycie ciągu zamiast java.sql.Sygnatura czasowa lub zmiana poziomu zgodności bazy danych na 120 lub niższą.
W poniższych sekcjach przedstawiono przykłady użycia sterownika JDBC oraz podstawowe typy danych. Aby uzyskać bardziej szczegółowy przykład używania podstawowych typów danych w aplikacji Java, zobacz Przykład podstawowe typy danych.
Pobieranie danych jako ciągu
Aby odczytać wartości zamapowane na dowolny podstawowy typ JDBC jako ciąg lub gdy silnie typowana wartość nie jest wymagana, użyj metody getString klasy SQLServerResultSet . W poniższym przykładzie pokazano to użycie:
try(Statement stmt = con.createStatement();) {
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getString("job_id");
}
Pobieranie danych według typu danych
Jeśli musisz pobrać dane ze źródła danych i znasz typ pobieranych danych, użyj jednej z metod get<type> klasy SQLServerResultSet, znanej również jako metody getter. Możesz użyć nazwy kolumny lub indeksu kolumny z metodami get<Type> , jak w poniższym przykładzie:
try(Statement stmt = con.createStatement();) {
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getShort("job_id");
}
Uwaga / Notatka
Metody getUnicodeStream i getBigDecimal z metodami skalowania są przestarzałe i nie są obsługiwane przez sterownik JDBC.
Aktualizowanie danych według typu danych
Jeśli musisz zaktualizować wartość pola w źródle danych, użyj jednej z metod typu aktualizacji<> klasy SQLServerResultSet. W poniższym przykładzie metoda updateInt jest używana z metodą updateRow w celu zaktualizowania danych w źródle danych:
try (Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);) {
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
rs.next();
int empJobID = rs.getInt(2);
empJobID++;
rs.first();
rs.updateInt(2, empJobID);
rs.updateRow();
}
Uwaga / Notatka
Sterownik JDBC nie może zaktualizować kolumny programu SQL Server o nazwie kolumny, która jest dłuższa niż 127 znaków. Jeśli podjęto próbę aktualizacji do kolumny, której nazwa jest większa niż 127 znaków, zgłaszany jest wyjątek.
Aktualizowanie danych według zapytania sparametryzowanego
W przypadku aktualizowania danych w źródle danych przy użyciu zapytania sparametryzowanego można ustawić typ danych parametrów przy użyciu jednej z metod typu< zestawu>klasy SQLServerPreparedStatement. Te metody są również nazywane metodami ustawiania. W poniższym przykładzie metoda prepareStatement służy do wstępnego kompilowania sparametryzowanego zapytania, a następnie metoda setString służy do ustawiania wartości ciągu parametru przed wywołaniem metody executeUpdate .
try(PreparedStatement pstmt = con.prepareStatement("UPDATE employee SET fname = ? WHERE (lname = 'Brown')");) {
String name = "Bob";
pstmt.setString(1, name);
int rowCount = pstmt.executeUpdate();
}
Aby uzyskać więcej informacji na temat sparametryzowanych zapytań, zobacz Używanie instrukcji SQL z parametrami.
Przekazywanie parametrów do procedury składowanej
Jeśli musisz przekazać parametry wpisane do procedury składowanej, możesz ustawić parametry według indeksu lub nazwy przy użyciu jednej z ustawionych<metod typu> klasy SQLServerCallableStatement . W poniższym przykładzie metoda prepareCall służy do konfigurowania wywołania procedury składowanej, a następnie metoda setString służy do ustawiania parametru wywołania przed wywołaniem metody executeQuery .
try(CallableStatement cstmt = con.prepareCall("{call employee_jobid(?)}");) {
String lname = "Brown";
cstmt.setString(1, lname);
ResultSet rs = cstmt.executeQuery();
}
Uwaga / Notatka
W tym przykładzie zestaw wyników jest zwracany z wynikami uruchomienia procedury składowanej.
BigDecimal
W przypadku używania wartości parametrów BigDecimal precyzja i skala można przekazać wraz z wartością za pomocą metody setBigDecimal. Użycie setBigDecimal w ten sposób pozwala uniknąć obcinania potencjalnych wartości. Alternatywnie, jeśli opcja calcBigDecimalPrecision parametrów połączenia jest ustawiona na true, sterownik oblicza precyzję danych wejściowych BigDecimal w imieniu użytkownika, kosztem wydajności. Jeśli wartość jest przekazywana samodzielnie, bez calcBigDecimalPrecision ustawienia lub opcja ustawiona na falsewartość , sterownik przyjmuje maksymalną dozwoloną wartość (38) dla precyzji dla tej wartości BigDecimal.
Aby uzyskać więcej informacji na temat używania sterownika JDBC z procedurami składowanymi i parametrami wejściowymi, zobacz Używanie procedury składowanej z parametrami wejściowymi.
Pobieranie parametrów z procedury składowanej
Jeśli musisz pobrać parametry z procedury składowanej, musisz najpierw zarejestrować out parametr według nazwy lub indeksu przy użyciu metody registerOutParameter klasy SQLServerCallableStatement. Następnie przypisz zwrócony parametr do odpowiedniej zmiennej po uruchomieniu wywołania procedury składowanej. W poniższym przykładzie metoda prepareCall służy do konfigurowania wywołania procedury składowanej, metoda registerOutParameter służy do konfigurowania parametru out , a następnie metoda setString służy do ustawiania parametru dla wywołania przed wywołaniem metody executeQuery. Wartość out parametru procedury składowanej jest pobierana przy użyciu metody getShort .
try(CallableStatement cstmt = con.prepareCall("{call employee_jobid (?, ?)}");) {
cstmt.registerOutParameter(2, java.sql.Types.SMALLINT);
String lname = "Brown";
cstmt.setString(1, lname);
ResultSet rs = cstmt.executeQuery();
short empJobID = cstmt.getShort(2);
}
Uwaga / Notatka
Oprócz zwróconego parametru zestaw wyników może być również zwracany z wynikami uruchomienia procedury składowanej.
Aby uzyskać więcej informacji na temat używania sterownika JDBC z procedurami składowanymi i parametrami wyjściowymi, zobacz Używanie procedury składowanej z parametrami wyjściowymi.