9 changed files with 282 additions and 130 deletions
@ -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 @@ |
|||||||
|
/* |
||||||
|
* 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 @@ |
|||||||
|
/* |
||||||
|
* 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 @@ |
|||||||
|
/* |
||||||
|
* 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 @@ |
|||||||
|
/* |
||||||
|
* 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