-
Notifications
You must be signed in to change notification settings - Fork 0
/
StarsInMoviesDomParser.java
133 lines (118 loc) · 4.42 KB
/
StarsInMoviesDomParser.java
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class StarsInMoviesDomParser {
private List<StarInMovie> stars_in_movies = new ArrayList<>();
private Document dom;
private Connection conn;
public StarsInMoviesDomParser() throws SQLException, ClassNotFoundException {
init();
}
public void init() throws SQLException, ClassNotFoundException {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/moviedb?autoReconnect=true&useSSL=false",
"mytestuser", "My6$Password");
}
public void runExample() {
try {
parseXmlFile();
parseDocument();
printData();
insertStarsInMovies();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private void parseXmlFile() {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
dom = dBuilder.parse("casts124.xml");
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
private void parseDocument() {
Element docElement = dom.getDocumentElement();
NodeList nodeList = docElement.getElementsByTagName("m");
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
StarInMovie starinmovie = parseStarInMovie(element);
stars_in_movies.add(starinmovie);
}
}
private StarInMovie parseStarInMovie(Element element) {
int genreId = 25; // Default genre ID
String movieId = getTextValue(element, "f");
String starName = getTextValue(element,"a");
return new StarInMovie(movieId, starName);
}
private String getTextValue(Element elem, String tagName) {
NodeList nl = elem.getElementsByTagName(tagName);
if (nl != null && nl.getLength() > 0) {
Element el = (Element) nl.item(0);
Node node = el.getFirstChild();
if (node != null) {
return node.getNodeValue();
}
}
return null;
}
// private int getIntValue(Element elem, String tagName) {
// try {
// return Integer.parseInt(getTextValue(elem, tagName));
// } catch (NumberFormatException e) {
// e.printStackTrace();
// return -1;
// }
// }
private void printData() {
System.out.println("Total parsed " + stars_in_movies.size() + " movies");
for (StarInMovie starinmovie : stars_in_movies) {
System.out.println(starinmovie);
}
}
private void insertStarsInMovies() throws SQLException {
conn.setAutoCommit(false);
String callSQL = "{CALL InsertStarInMovie(?, ?)}"; // SQL to call the stored procedure
try (CallableStatement cstmt = conn.prepareCall(callSQL)) {
int count = 0;
for (StarInMovie starinmovie : stars_in_movies) {
cstmt.setString(1, starinmovie.getMovieId());
cstmt.setString(2, starinmovie.getStarName());
cstmt.addBatch(); // Add to batch
count++;
if (count % 1000 == 0 || count == stars_in_movies.size()) {
cstmt.executeBatch(); // Execute batch
conn.commit(); // Commit transaction
}
}
} catch (SQLException e) {
conn.rollback(); // Rollback in case of any error during batch execution
throw e;
}
}
public static void main(String[] args) {
try {
StarsInMoviesDomParser domParser = new StarsInMoviesDomParser();
domParser.runExample();
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}