Add tutorial files for ResultSet2JSON Article (#11912)
* Add tutorial files * Move script to new folder * Use Maven/H2 instead of JBang/DuckDB * Use Java 8 * Usen an older versio of JOOQ * Format according to Beldung Intellij guide * Remove dangling commit * Use 2-space indentation * Apply formatting from Eclipse * Add unit test * Add assertion * Change test names * Change method names Co-authored-by: root <root@localhost.localdomain> Co-authored-by: Alireza Ghasemi <alireza.ghasemi1@swisscom.com>
This commit is contained in:
		
							parent
							
								
									b3a7e039f1
								
							
						
					
					
						commit
						365f029e3a
					
				
							
								
								
									
										4
									
								
								persistence-modules/core-java-persistence-2/example.csv
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								persistence-modules/core-java-persistence-2/example.csv
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| Username,Id,First name,Last name | ||||
| doe1,7173,John,Doe | ||||
| smith3,3722,Dana,Smith | ||||
| john22,5490,John,Wang | ||||
| 
 | 
| @ -1,7 +1,5 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||
|     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
|     <modelVersion>4.0.0</modelVersion> | ||||
|     <groupId>com.baeldung.core-java-persistence-2</groupId> | ||||
|     <artifactId>core-java-persistence-2</artifactId> | ||||
| @ -41,6 +39,20 @@ | ||||
|             <artifactId>mssql-jdbc</artifactId> | ||||
|             <version>${mssql.driver.version}</version> | ||||
|         </dependency> | ||||
| 
 | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>org.jooq</groupId> | ||||
|             <artifactId>jooq</artifactId> | ||||
|             <version>3.11.11</version> | ||||
|         </dependency> | ||||
| 
 | ||||
|         <dependency> | ||||
|             <groupId>org.json</groupId> | ||||
|             <artifactId>json</artifactId> | ||||
|             <version>20220320</version> | ||||
|         </dependency> | ||||
| 
 | ||||
|     </dependencies> | ||||
| 
 | ||||
|     <properties> | ||||
|  | ||||
| @ -0,0 +1,137 @@ | ||||
| package com.baeldung.resultset2json; | ||||
| 
 | ||||
| import java.sql.Connection; | ||||
| import java.sql.DriverManager; | ||||
| import java.sql.ResultSet; | ||||
| import java.sql.ResultSetMetaData; | ||||
| import java.sql.SQLException; | ||||
| import java.sql.Statement; | ||||
| import java.util.List; | ||||
| import java.util.stream.Collectors; | ||||
| import java.util.stream.IntStream; | ||||
| 
 | ||||
| import org.jooq.Record; | ||||
| import org.jooq.RecordMapper; | ||||
| import org.jooq.impl.DSL; | ||||
| import org.json.JSONException; | ||||
| import org.json.JSONObject; | ||||
| import org.json.JSONArray; | ||||
| 
 | ||||
| public class ResultSet2JSON { | ||||
| 
 | ||||
|     public static void main(String... args) throws ClassNotFoundException, SQLException { | ||||
| 
 | ||||
|         ResultSet2JSON testClass = new ResultSet2JSON(); | ||||
|         testClass.convertWithoutJOOQ(); | ||||
|     } | ||||
| 
 | ||||
|     public void convertWithoutJOOQ() throws ClassNotFoundException, SQLException { | ||||
|         Class.forName("org.h2.Driver"); | ||||
|         Connection dbConnection = DriverManager.getConnection("jdbc:h2:mem:rs2jdbc", "user", "password"); | ||||
| 
 | ||||
|         // Create a table | ||||
|         Statement stmt = dbConnection.createStatement(); | ||||
|         stmt.execute("CREATE TABLE words AS SELECT * FROM CSVREAD('./example.csv')"); | ||||
|         ResultSet resultSet = stmt.executeQuery("SELECT * FROM words"); | ||||
| 
 | ||||
|         JSONArray result1 = resultSet2JdbcWithoutJOOQ(resultSet); | ||||
|         System.out.println(result1); | ||||
| 
 | ||||
|         resultSet.close(); | ||||
|     } | ||||
| 
 | ||||
|     public void convertUsingJOOQDefaultApproach() throws ClassNotFoundException, SQLException { | ||||
|         Class.forName("org.h2.Driver"); | ||||
|         Connection dbConnection = DriverManager.getConnection("jdbc:h2:mem:rs2jdbc", "user", "password"); | ||||
|         // Create a table | ||||
|         Statement stmt = dbConnection.createStatement(); | ||||
|         stmt.execute("CREATE TABLE words AS SELECT * FROM CSVREAD('./example.csv')"); | ||||
|         ResultSet resultSet = stmt.executeQuery("SELECT * FROM words"); | ||||
| 
 | ||||
|         JSONObject result1 = resultSet2JdbcUsingJOOQDefaultApproach(resultSet, dbConnection); | ||||
|         System.out.println(result1); | ||||
| 
 | ||||
|         resultSet.close(); | ||||
|     } | ||||
| 
 | ||||
|     public void convertUsingCustomisedJOOQ() throws ClassNotFoundException, SQLException { | ||||
|         Class.forName("org.h2.Driver"); | ||||
|         Connection dbConnection = DriverManager.getConnection("jdbc:h2:mem:rs2jdbc", "user", "password"); | ||||
|         // Create a table | ||||
|         Statement stmt = dbConnection.createStatement(); | ||||
|         stmt.execute("CREATE TABLE words AS SELECT * FROM CSVREAD('./example.csv')"); | ||||
|         ResultSet resultSet = stmt.executeQuery("SELECT * FROM words"); | ||||
| 
 | ||||
|         JSONArray result1 = resultSet2JdbcUsingCustomisedJOOQ(resultSet, dbConnection); | ||||
|         System.out.println(result1); | ||||
| 
 | ||||
|         resultSet.close(); | ||||
|     } | ||||
| 
 | ||||
|     public static JSONArray resultSet2JdbcWithoutJOOQ(ResultSet resultSet) throws SQLException { | ||||
|         ResultSetMetaData md = resultSet.getMetaData(); | ||||
|         int numCols = md.getColumnCount(); | ||||
|         List<String> colNames = IntStream.range(0, numCols) | ||||
|             .mapToObj(i -> { | ||||
|                 try { | ||||
|                     return md.getColumnName(i + 1); | ||||
|                 } catch (SQLException e) { | ||||
| 
 | ||||
|                     e.printStackTrace(); | ||||
|                     return "?"; | ||||
|                 } | ||||
|             }) | ||||
|             .collect(Collectors.toList()); | ||||
| 
 | ||||
|         JSONArray result = new JSONArray(); | ||||
|         while (resultSet.next()) { | ||||
|             JSONObject row = new JSONObject(); | ||||
|             colNames.forEach(cn -> { | ||||
|                 try { | ||||
|                     row.put(cn, resultSet.getObject(cn)); | ||||
|                 } catch (JSONException | SQLException e) { | ||||
| 
 | ||||
|                     e.printStackTrace(); | ||||
|                 } | ||||
|             }); | ||||
|             result.put(row); | ||||
|         } | ||||
|         return result; | ||||
|     } | ||||
| 
 | ||||
|     public static JSONObject resultSet2JdbcUsingJOOQDefaultApproach(ResultSet resultSet, Connection dbConnection) throws SQLException { | ||||
|         JSONObject result = new JSONObject(DSL.using(dbConnection) | ||||
|             .fetch(resultSet) | ||||
|             .formatJSON()); | ||||
|         return result; | ||||
|     } | ||||
| 
 | ||||
|     public static JSONArray resultSet2JdbcUsingCustomisedJOOQ(ResultSet resultSet, Connection dbConnection) throws SQLException { | ||||
|         ResultSetMetaData md = resultSet.getMetaData(); | ||||
|         int numCols = md.getColumnCount(); | ||||
|         List<String> colNames = IntStream.range(0, numCols) | ||||
|             .mapToObj(i -> { | ||||
|                 try { | ||||
|                     return md.getColumnName(i + 1); | ||||
|                 } catch (SQLException e) { | ||||
| 
 | ||||
|                     e.printStackTrace(); | ||||
|                     return "?"; | ||||
|                 } | ||||
|             }) | ||||
|             .collect(Collectors.toList()); | ||||
| 
 | ||||
|         List<JSONObject> json = DSL.using(dbConnection) | ||||
|             .fetch(resultSet) | ||||
|             .map(new RecordMapper<Record, JSONObject>() { | ||||
| 
 | ||||
|                 @Override | ||||
|                 public JSONObject map(Record r) { | ||||
|                     JSONObject obj = new JSONObject(); | ||||
|                     colNames.forEach(cn -> obj.put(cn, r.get(cn))); | ||||
|                     return obj; | ||||
|                 } | ||||
|             }); | ||||
|     return new JSONArray(json); | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,75 @@ | ||||
| package com.baeldung.resultset2json; | ||||
| 
 | ||||
| import static com.baeldung.resultset2json.ResultSet2JSON.resultSet2JdbcWithoutJOOQ; | ||||
| import static com.baeldung.resultset2json.ResultSet2JSON.resultSet2JdbcUsingJOOQDefaultApproach; | ||||
| import static com.baeldung.resultset2json.ResultSet2JSON.resultSet2JdbcUsingCustomisedJOOQ; | ||||
| 
 | ||||
| import java.sql.Connection; | ||||
| import java.sql.DriverManager; | ||||
| import java.sql.ResultSet; | ||||
| import java.sql.SQLException; | ||||
| import java.sql.Statement; | ||||
| 
 | ||||
| import org.json.JSONArray; | ||||
| import org.json.JSONObject; | ||||
| import org.junit.jupiter.api.Test; | ||||
| 
 | ||||
| import static org.junit.jupiter.api.Assertions.assertTrue; | ||||
| 
 | ||||
| public class ResultSet2JSONUnitTest { | ||||
|   JSONObject object = new JSONObject( | ||||
|     "{\"records\":[[\"doe1\",\"7173\",\"John\",\"Doe\"],[\"smith3\",\"3722\",\"Dana\",\"Smith\"],[\"john22\",\"5490\",\"John\",\"Wang\"]],\"fields\":[{\"schema\":\"PUBLIC\",\"name\":\"USERNAME\",\"type\":\"VARCHAR\",\"table\":\"WORDS\"},{\"schema\":\"PUBLIC\",\"name\":\"ID\",\"type\":\"VARCHAR\",\"table\":\"WORDS\"},{\"schema\":\"PUBLIC\",\"name\":\"First name\",\"type\":\"VARCHAR\",\"table\":\"WORDS\"},{\"schema\":\"PUBLIC\",\"name\":\"Last name\",\"type\":\"VARCHAR\",\"table\":\"WORDS\"}]}"); | ||||
| 
 | ||||
|   JSONArray array = new JSONArray( | ||||
|     "[{\"USERNAME\":\"doe1\",\"First name\":\"John\",\"ID\":\"7173\",\"Last name\":\"Doe\"},{\"USERNAME\":\"smith3\",\"First name\":\"Dana\",\"ID\":\"3722\",\"Last name\":\"Smith\"},{\"USERNAME\":\"john22\",\"First name\":\"John\",\"ID\":\"5490\",\"Last name\":\"Wang\"}]"); | ||||
| 
 | ||||
|   @Test | ||||
|   void whenResultSetConvertedWithoutJOOQ_shouldMatchJSON() throws SQLException, ClassNotFoundException { | ||||
|     Class.forName("org.h2.Driver"); | ||||
|     Connection dbConnection = DriverManager.getConnection("jdbc:h2:mem:rs2jdbc1", "user", "password"); | ||||
| 
 | ||||
|     // Create a table | ||||
|     Statement stmt = dbConnection.createStatement(); | ||||
|     stmt.execute("CREATE TABLE words AS SELECT * FROM CSVREAD('./example.csv')"); | ||||
|     ResultSet resultSet = stmt.executeQuery("SELECT * FROM words"); | ||||
| 
 | ||||
|     JSONArray result1 = resultSet2JdbcWithoutJOOQ(resultSet); | ||||
| 
 | ||||
|     resultSet.close(); | ||||
| 
 | ||||
|     assertTrue(array.similar(result1)); | ||||
|   } | ||||
| 
 | ||||
|   @Test | ||||
|   void whenResultSetConvertedUsingJOOQDefaultApproach_shouldMatchJSON() throws SQLException, ClassNotFoundException { | ||||
|     Class.forName("org.h2.Driver"); | ||||
|     Connection dbConnection = DriverManager.getConnection("jdbc:h2:mem:rs2jdbc2", "user", "password"); | ||||
|     // Create a table | ||||
|     Statement stmt = dbConnection.createStatement(); | ||||
|     stmt.execute("CREATE TABLE words AS SELECT * FROM CSVREAD('./example.csv')"); | ||||
|     ResultSet resultSet = stmt.executeQuery("SELECT * FROM words"); | ||||
| 
 | ||||
|     JSONObject result2 = resultSet2JdbcUsingJOOQDefaultApproach(resultSet, dbConnection); | ||||
| 
 | ||||
|     resultSet.close(); | ||||
| 
 | ||||
|     assertTrue(object.similar(result2)); | ||||
|   } | ||||
| 
 | ||||
|   @Test | ||||
|   void whenResultSetConvertedUsingCustomisedJOOQ_shouldMatchJSON() throws SQLException, ClassNotFoundException { | ||||
|     Class.forName("org.h2.Driver"); | ||||
|     Connection dbConnection = DriverManager.getConnection("jdbc:h2:mem:rs2jdbc3", "user", "password"); | ||||
|     // Create a table | ||||
|     Statement stmt = dbConnection.createStatement(); | ||||
|     stmt.execute("CREATE TABLE words AS SELECT * FROM CSVREAD('./example.csv')"); | ||||
|     ResultSet resultSet = stmt.executeQuery("SELECT * FROM words"); | ||||
| 
 | ||||
|     JSONArray result3 = resultSet2JdbcUsingCustomisedJOOQ(resultSet, dbConnection); | ||||
| 
 | ||||
|     resultSet.close(); | ||||
| 
 | ||||
|     assertTrue(array.similar(result3)); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user