Skip to content

Commit 1ac7a63

Browse files
committed
Teking into account samples review comments
1 parent 94317cc commit 1ac7a63

7 files changed

+163
-7
lines changed

ojdbc-provider-samples/example-configuration.properties

+6-1
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,9 @@ azure_redirect_url=http://localhost:7071
111111
# Google Cloud Platform
112112
gcp_secret_version_name=projects/138028249883/secrets/test-secret/versions/2
113113
gcp_secret_version_name_config=projects/138028249883/secrets/config-secret/versions/4
114-
gcp_cloud_storage_properties=project=onyx-eye-426013-i5;bucket=fm-test-bucket-123564;object=testObjectStorage.json
114+
gcp_cloud_storage_properties=project=onyx-eye-426013-i5;bucket=fm-test-bucket-123564;object=testObjectStorage.json
115+
116+
# Jackson OSON samples properties
117+
jackson_oson_url=jdbc:oracle:thin:@...
118+
jackson_oson_username=USERNAME
119+
jackson_oson_password=***********

ojdbc-provider-samples/src/main/java/oracle/jdbc/provider/oson/sample/AccessJsonColumnUsingJacksonObjectNode.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@
5454
/**
5555
* <p>
5656
* A standalone example that inserts and retrieves JSON data to the Oracle database
57-
* using an {@link OsonFactory} and {@link ObjectNode}.
57+
* using an {@link OsonFactory} and {@link ObjectNode}. Recommended for applications
58+
* that already consume {@link ObjectNode}, for other application it is recommended
59+
* to use a POJO instead.
5860
* </p><p>
5961
* The JSON object is created using Jackson API's {@link ObjectNode}. The {@link OsonFactory}
6062
* and {@link OsonGenerator} are used to write the JSON Object to an OutputStream. The data

ojdbc-provider-samples/src/main/java/oracle/jdbc/provider/oson/sample/AccessJsonColumnUsingPOJOAndJsonProvider.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@
3939

4040
import oracle.jdbc.OracleConnection;
4141
import oracle.jdbc.OracleType;
42-
import oracle.jdbc.provider.oson.JacksonOsonProvider;
4342
import oracle.jdbc.provider.oson.sample.model.Emp;
4443

4544
import java.sql.*;
45+
import java.util.Properties;
4646

4747
/**
4848
* <p>
@@ -86,10 +86,10 @@ public static void retrieveFromDatabase(Connection conn) throws SQLException {
8686

8787
public static void main(String[] args) {
8888
try {
89-
// set the system property to the class implementing the "oracle.jdbc.spi.JsonProvider interface"
90-
System.setProperty(OracleConnection.CONNECTION_PROPERTY_PROVIDER_JSON, JacksonOsonProvider.PROVIDER_NAME);
89+
Properties properties = new Properties();
90+
properties.setProperty(OracleConnection.CONNECTION_PROPERTY_PROVIDER_JSON, "jackson-json-provider");
9191

92-
Connection conn = JacksonOsonSampleUtil.createConnection();
92+
Connection conn = JacksonOsonSampleUtil.createConnectionWithProperties(properties);
9393
JacksonOsonSampleUtil.createTable(conn);
9494
insertIntoDatabase(conn);
9595
retrieveFromDatabase(conn);

ojdbc-provider-samples/src/main/java/oracle/jdbc/provider/oson/sample/JacksonOsonSampleUtil.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import java.sql.Statement;
5252
import java.util.ArrayList;
5353
import java.util.List;
54+
import java.util.Properties;
5455

5556
public class JacksonOsonSampleUtil {
5657

@@ -66,10 +67,19 @@ public static Connection createConnection() throws SQLException {
6667
return ods.getConnection();
6768
}
6869

70+
public static Connection createConnectionWithProperties(Properties properties) throws SQLException {
71+
OracleDataSource ods = new OracleDataSource();
72+
ods.setURL(URL);
73+
ods.setUser(USER);
74+
ods.setPassword(PASSWORD);
75+
ods.setConnectionProperties(properties);
76+
return ods.getConnection();
77+
}
78+
6979
public static void createTable(Connection conn) throws SQLException {
7080
try (Statement stmt = conn.createStatement()) {
7181
stmt.addBatch("drop table if exists jackson_oson_sample");
72-
stmt.addBatch("create table jackson_oson_sample(id number, json_value JSON) tablespace tbs1");
82+
stmt.addBatch("create table jackson_oson_sample(id number, json_value JSON)");
7383
stmt.executeBatch();
7484
}
7585
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package oracle.jdbc.provider.oson.sample;
2+
import java.math.BigDecimal;
3+
import java.sql.Connection;
4+
import java.sql.DriverManager;
5+
import java.sql.PreparedStatement;
6+
import java.sql.ResultSet;
7+
import java.sql.SQLException;
8+
import java.sql.Statement;
9+
import java.time.OffsetDateTime;
10+
import java.util.ArrayList;
11+
import java.util.Arrays;
12+
import java.util.List;
13+
import java.util.Properties;
14+
15+
import oracle.jdbc.OracleConnection;
16+
import oracle.jdbc.OracleType;
17+
import oracle.jdbc.provider.oson.sample.model.Movie;
18+
import oracle.jdbc.provider.oson.sample.model.Image;
19+
20+
public class NestedStructurePOJO {
21+
public static void main(String[] args) throws SQLException {
22+
Properties properties = new Properties();
23+
properties.setProperty(OracleConnection.CONNECTION_PROPERTY_PROVIDER_JSON, "jackson-json-provider");
24+
properties.setProperty(OracleConnection.CONNECTION_PROPERTY_JSON_DEFAULT_GET_OBJECT_TYPE, "oracle.sql.json.OracleJsonValue");
25+
try (Connection con = JacksonOsonSampleUtil.createConnectionWithProperties(properties)) {
26+
Statement stmt = con.createStatement();
27+
stmt.execute("drop table if exists movie");
28+
stmt.execute("create json collection table movie");
29+
30+
Movie matrix = new Movie(
31+
123,
32+
"The Matrix",
33+
"Sci-fi",
34+
BigDecimal.valueOf(353212323),
35+
OffsetDateTime.now(),
36+
Arrays.asList(
37+
new Image("poster.png", "The Matrix"),
38+
new Image("showtimes.png", "Matrix Showtimes")
39+
)
40+
);
41+
42+
Movie shawshank = new Movie(
43+
456,
44+
"The Shawshank Redemption",
45+
"Drama",
46+
BigDecimal.valueOf(453212345),
47+
OffsetDateTime.now(),
48+
null
49+
);
50+
51+
PreparedStatement insert = con.prepareStatement("insert into movie values (:1)");
52+
insert.setObject(1, matrix, OracleType.JSON);
53+
insert.execute();
54+
55+
insert.setObject(1, shawshank, OracleType.JSON);
56+
insert.execute();
57+
58+
ResultSet rs = stmt.executeQuery("select * from movie m where m.data.title = 'The Matrix'");
59+
rs.next();
60+
Movie result = rs.getObject(1, Movie.class);
61+
System.out.println("Objects are equal: " + matrix.equals(result));
62+
}
63+
}
64+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package oracle.jdbc.provider.oson.sample.model;
2+
3+
import java.util.Objects;
4+
5+
public class Image {
6+
public String location;
7+
public String description;
8+
9+
public Image() {}
10+
public Image (String location, String description) {
11+
this.description = description;
12+
this.location = location;
13+
}
14+
15+
@Override
16+
public boolean equals(Object o) {
17+
if (this == o) return true;
18+
if (o == null || getClass() != o.getClass()) return false;
19+
Image image = (Image) o;
20+
return location.equals(image.location) && description.equals(image.description);
21+
}
22+
23+
@Override
24+
public int hashCode() {
25+
return Objects.hash(location, description);
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package oracle.jdbc.provider.oson.sample.model;
2+
3+
import java.math.BigDecimal;
4+
import java.time.OffsetDateTime;
5+
import java.util.List;
6+
import java.util.Objects;
7+
8+
import com.fasterxml.jackson.annotation.JsonProperty;
9+
10+
public class Movie {
11+
@JsonProperty("_id")
12+
public int id;
13+
public String title;
14+
public String genre;
15+
public BigDecimal gross;
16+
public OffsetDateTime released;
17+
public List<Image> image;
18+
19+
public Movie() {}
20+
public Movie(int id, String title, String genre, BigDecimal gross, OffsetDateTime released, List<Image> image) {
21+
this.id = id;
22+
this.title = title;
23+
this.genre = genre;
24+
this.gross = gross;
25+
this.released = released;
26+
this.image = image;
27+
}
28+
29+
@Override
30+
public boolean equals(Object o) {
31+
if (this == o) return true;
32+
if (o == null || getClass() != o.getClass()) return false;
33+
Movie movie = (Movie) o;
34+
return id == movie.id
35+
&& title.equals(movie.title)
36+
&& genre.equals(movie.genre)
37+
&& gross.compareTo(movie.gross) == 0
38+
&& released.isEqual(movie.released)
39+
&& image.equals(movie.image);
40+
}
41+
42+
@Override
43+
public int hashCode() {
44+
return Objects.hash(id, title, genre, gross, released, image);
45+
}
46+
}
47+
48+

0 commit comments

Comments
 (0)