-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathJSONB.java
More file actions
82 lines (66 loc) · 2.97 KB
/
JSONB.java
File metadata and controls
82 lines (66 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package movie;
import java.io.ByteArrayOutputStream;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import jakarta.json.bind.JsonbBuilder;
import jakarta.json.stream.JsonGenerator;
import jakarta.json.stream.JsonParser;
import org.eclipse.yasson.YassonJsonb;
import movie.model.Movie;
import movie.model.Image;
import oracle.jdbc.OracleTypes;
import oracle.sql.json.OracleJsonFactory;
import oracle.ucp.jdbc.PoolDataSource;
import oracle.ucp.jdbc.PoolDataSourceFactory;
/**
* Stores and retrieves a plain/custom Java object as JSON using JSON-B (jakarta.json.bind).
* @see https://javaee.github.io/jsonb-spec/
*/
public class JSONB {
public static void main(String[] args) throws SQLException {
OracleJsonFactory factory = new OracleJsonFactory();
YassonJsonb jsonb = (YassonJsonb) JsonbBuilder.create();
PoolDataSource pool = PoolDataSourceFactory.getPoolDataSource();
pool.setURL(String.join("", args));
pool.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
try (Connection con = pool.getConnection()) {
Movie movie = new Movie();
movie.setName("The Godfather");
movie.setGross(BigDecimal.valueOf(246120974));
movie.setGenre("Drama");
List<Image> images = new ArrayList<Image>();
images.add(new Image("img1.png", "Main movie poster"));
images.add(new Image("img2.png", "Marlon Brando"));
movie.setImages(images);
// convert Movie class to binary JSON
ByteArrayOutputStream out = new ByteArrayOutputStream();
JsonGenerator gen = factory.createJsonBinaryGenerator(out)
.wrap(JsonGenerator.class);
jsonb.toJson(movie, gen);
gen.close();
byte[] oson = out.toByteArray();
PreparedStatement stmt = con.prepareStatement("INSERT INTO movie VALUES (?)");
stmt.setObject(1, oson, OracleTypes.JSON);
stmt.execute();
stmt.close();
System.out.println("Movie object inserted successfully!");
stmt = con.prepareStatement(
"SELECT m.data FROM movie m WHERE m.data.name.string() = :1");
stmt.setString(1, "The Godfather");
ResultSet rs = stmt.executeQuery();
rs.next();
JsonParser parser = rs.getObject(1, JsonParser.class);
Movie m = jsonb.fromJson(parser, Movie.class);
System.out.println("Movie object retrieved from database. ");
System.out.println(m.getName() + ", " + m.getGenre());
for (Image p : m.getImages()) {
System.out.println(" " + p.getFile() + " " + p.getDescription());
}
}
}
}