Browse Source
* pr/33248: Polish "Stop referring to STRUCT and ARRAY as they are deprecated" Stop referring to STRUCT and ARRAY as they are deprecated Closes gh-33248pull/33365/head
10 changed files with 286 additions and 130 deletions
@ -0,0 +1,59 @@
@@ -0,0 +1,59 @@
|
||||
/* |
||||
* Copyright 2002-2024 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.docs.dataaccess.jdbc.jdbccomplextypes; |
||||
|
||||
import java.sql.Connection; |
||||
import java.sql.SQLException; |
||||
import java.text.ParseException; |
||||
import java.text.SimpleDateFormat; |
||||
|
||||
import oracle.jdbc.driver.OracleConnection; |
||||
|
||||
import org.springframework.jdbc.core.SqlTypeValue; |
||||
import org.springframework.jdbc.core.support.AbstractSqlTypeValue; |
||||
|
||||
@SuppressWarnings("unused") |
||||
class SqlTypeValueFactory { |
||||
|
||||
void createStructSample() throws ParseException { |
||||
// tag::struct[]
|
||||
TestItem testItem = new TestItem(123L, "A test item", |
||||
new SimpleDateFormat("yyyy-M-d").parse("2010-12-31")); |
||||
|
||||
SqlTypeValue value = new AbstractSqlTypeValue() { |
||||
protected Object createTypeValue(Connection connection, int sqlType, String typeName) throws SQLException { |
||||
Object[] item = new Object[] { testItem.getId(), testItem.getDescription(), |
||||
new java.sql.Date(testItem.getExpirationDate().getTime()) }; |
||||
return connection.createStruct(typeName, item); |
||||
} |
||||
}; |
||||
// end::struct[]
|
||||
} |
||||
|
||||
void createOracleArray() { |
||||
// tag::oracle-array[]
|
||||
Long[] ids = new Long[] {1L, 2L}; |
||||
|
||||
SqlTypeValue value = new AbstractSqlTypeValue() { |
||||
protected Object createTypeValue(Connection conn, int sqlType, String typeName) throws SQLException { |
||||
return conn.unwrap(OracleConnection.class).createOracleArray(typeName, ids); |
||||
} |
||||
}; |
||||
// end::oracle-array[]
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
/* |
||||
* Copyright 2002-2024 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.docs.dataaccess.jdbc.jdbccomplextypes; |
||||
|
||||
import java.util.Date; |
||||
|
||||
class TestItem { |
||||
|
||||
private Long id; |
||||
|
||||
private String description; |
||||
|
||||
private Date expirationDate; |
||||
|
||||
public TestItem() { |
||||
} |
||||
|
||||
public TestItem(Long id, String description, Date expirationDate) { |
||||
this.id = id; |
||||
this.description = description; |
||||
this.expirationDate = expirationDate; |
||||
} |
||||
|
||||
public Long getId() { |
||||
return this.id; |
||||
} |
||||
|
||||
public void setId(Long id) { |
||||
this.id = id; |
||||
} |
||||
|
||||
public String getDescription() { |
||||
return this.description; |
||||
} |
||||
|
||||
public void setDescription(String description) { |
||||
this.description = description; |
||||
} |
||||
|
||||
public Date getExpirationDate() { |
||||
return this.expirationDate; |
||||
} |
||||
|
||||
public void setExpirationDate(Date expirationDate) { |
||||
this.expirationDate = expirationDate; |
||||
} |
||||
} |
||||
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
/* |
||||
* Copyright 2002-2024 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.docs.dataaccess.jdbc.jdbccomplextypes; |
||||
|
||||
import java.sql.CallableStatement; |
||||
import java.sql.Struct; |
||||
import java.sql.Types; |
||||
|
||||
import javax.sql.DataSource; |
||||
|
||||
import org.springframework.jdbc.core.SqlOutParameter; |
||||
import org.springframework.jdbc.object.StoredProcedure; |
||||
|
||||
@SuppressWarnings("unused") |
||||
public class TestItemStoredProcedure extends StoredProcedure { |
||||
|
||||
public TestItemStoredProcedure(DataSource dataSource) { |
||||
super(dataSource, "get_item"); |
||||
declareParameter(new SqlOutParameter("item", Types.STRUCT, "ITEM_TYPE", |
||||
(CallableStatement cs, int colIndx, int sqlType, String typeName) -> { |
||||
Struct struct = (Struct) cs.getObject(colIndx); |
||||
Object[] attr = struct.getAttributes(); |
||||
TestItem item = new TestItem(); |
||||
item.setId(((Number) attr[0]).longValue()); |
||||
item.setDescription((String) attr[1]); |
||||
item.setExpirationDate((java.util.Date) attr[2]); |
||||
return item; |
||||
})); |
||||
// ...
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,57 @@
@@ -0,0 +1,57 @@
|
||||
/* |
||||
* Copyright 2002-2024 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.docs.dataaccess.jdbc.jdbccomplextypes |
||||
|
||||
import oracle.jdbc.driver.OracleConnection |
||||
import org.springframework.jdbc.core.SqlTypeValue |
||||
import org.springframework.jdbc.core.support.AbstractSqlTypeValue |
||||
import java.sql.Connection |
||||
import java.sql.Date |
||||
import java.text.SimpleDateFormat |
||||
|
||||
@Suppress("unused") |
||||
class SqlTypeValueFactory { |
||||
|
||||
fun createStructSample(): AbstractSqlTypeValue { |
||||
// tag::struct[] |
||||
val testItem = TestItem(123L, "A test item", |
||||
SimpleDateFormat("yyyy-M-d").parse("2010-12-31")) |
||||
|
||||
val value = object : AbstractSqlTypeValue() { |
||||
override fun createTypeValue(connection: Connection, sqlType: Int, typeName: String?): Any { |
||||
val item = arrayOf<Any>(testItem.id, testItem.description, |
||||
Date(testItem.expirationDate.time)) |
||||
return connection.createStruct(typeName, item) |
||||
} |
||||
} |
||||
// end::struct[] |
||||
return value |
||||
} |
||||
|
||||
fun createOracleArray() : SqlTypeValue { |
||||
// tag::oracle-array[] |
||||
val ids = arrayOf(1L, 2L) |
||||
val value: SqlTypeValue = object : AbstractSqlTypeValue() { |
||||
override fun createTypeValue(conn: Connection, sqlType: Int, typeName: String?): Any { |
||||
return conn.unwrap(OracleConnection::class.java).createOracleArray(typeName, ids) |
||||
} |
||||
} |
||||
// end::oracle-array[] |
||||
return value |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
|
||||
/* |
||||
* Copyright 2002-2024 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.docs.dataaccess.jdbc.jdbccomplextypes |
||||
|
||||
import org.springframework.jdbc.core.SqlOutParameter |
||||
import org.springframework.jdbc.`object`.StoredProcedure |
||||
import java.sql.CallableStatement |
||||
import java.sql.Struct |
||||
import java.sql.Types |
||||
import java.util.Date |
||||
import javax.sql.DataSource |
||||
|
||||
@Suppress("unused") |
||||
class TestItemStoredProcedure(dataSource: DataSource) : StoredProcedure(dataSource, "get_item") { |
||||
init { |
||||
declareParameter(SqlOutParameter("item",Types.STRUCT,"ITEM_TYPE") { |
||||
cs: CallableStatement, colIndx: Int, _: Int, _: String? -> |
||||
val struct = cs.getObject(colIndx) as Struct |
||||
val attr = struct.attributes |
||||
val item = TestItem() |
||||
item.id = (attr[0] as Number).toLong() |
||||
item.description = attr[1] as String |
||||
item.expirationDate = attr[2] as Date |
||||
item |
||||
}) |
||||
// ... |
||||
} |
||||
} |
||||
Loading…
Reference in new issue