forked from MrBesen/YoutubeCrawler
134 lines
4.0 KiB
Java
134 lines
4.0 KiB
Java
package de.mrbesen.youtubecrawler;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.DriverManager;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
import java.util.List;
|
|
|
|
import org.apache.log4j.Logger;
|
|
|
|
import de.mrbesen.youtubecrawler.Crawler.Video;
|
|
|
|
public class DB {
|
|
|
|
private Connection con;
|
|
//private String server = "localhost", user = "ytcrawler", pw ="pDWmDhmZKArwvG2q", db = "ytcrawler";
|
|
private String server = Config.prop.getProperty("db.host", "localhost"), user = Config.prop.getProperty("db.user", "ytcrawler"), pw = Config.prop.getProperty("db.pw", ""), db = Config.prop.getProperty("db.dbname", "ytcrawler");
|
|
private int port = Integer.parseInt(Config.prop.getProperty("db.port", "3306"));
|
|
private Logger log = Logger.getLogger(DB.class.getName());
|
|
|
|
|
|
public DB() {
|
|
try {
|
|
connect(false);
|
|
|
|
//set the database up!
|
|
boolean found = false;
|
|
ResultSet set = con.getMetaData().getCatalogs();//does the db exists?
|
|
while(set.next()) {
|
|
if(set.getString(1).equalsIgnoreCase(db)) {
|
|
found = true;
|
|
con.setCatalog(db);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(!found) {//DataBase not found, try to create
|
|
log.warn("Database not found! tring to create!");
|
|
//create DB, table: konten / player / Transactions
|
|
update("CREATE DATABASE `" + db + "` /*!40100 DEFAULT CHARACTER SET latin1*/;");
|
|
con.setCatalog(db);
|
|
update("CREATE TABLE `videos` (`id` varchar(13) NOT NULL,`length` int(11) NOT NULL,`created` int(11) NOT NULL,`langcode` varchar(3) NOT NULL DEFAULT 'en',`category` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;");
|
|
|
|
log.info("Database is set up! -> \n\nFirst Entry in uploaded needed!!!!!!\nPlease insert MANUALY!\n ");
|
|
}
|
|
} catch (SQLException e) {
|
|
log.error("Error while connecting to the database! ", e);
|
|
}
|
|
}
|
|
|
|
private void connect(boolean selectdb) {
|
|
try {
|
|
Class.forName("com.mysql.jdbc.Driver");//Treiber laden try this driver: com.mysql.cj.jdbc.Driver
|
|
//verbinden
|
|
con = DriverManager.getConnection("jdbc:mysql://" + server + ":" + port + "/" + (selectdb ? db : "") + "?serverTimezone=UTC" ,user,pw);
|
|
}catch (ClassNotFoundException | SQLException e) {
|
|
log.error("Error while connecting to the database! ", e);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* removes all videos, that are known from the db
|
|
* @param input
|
|
* @return
|
|
*/
|
|
public List<String> checkvideos(List<String> input) {
|
|
StringBuilder ids = new StringBuilder();
|
|
for(int i = 0; i < input.size(); i++) {
|
|
ids.append(',').append(input.get(i));
|
|
}
|
|
String query = "SELECT `id` FROM `videos` WHERE concat('%',`id`,'%') LIKE '" + ids.toString() + "';";
|
|
ResultSet res = query(query);
|
|
try {
|
|
while(res.next()) {
|
|
input.remove(res.getString(1));
|
|
}
|
|
} catch(SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
return input;
|
|
}
|
|
|
|
/**
|
|
* save the list of videos to the DB
|
|
* @param input
|
|
*/
|
|
public void addVideos(List<Video> input) {
|
|
log.info("add " + input.size() + " videos");
|
|
if(input.size() > 0) {
|
|
StringBuilder sb = new StringBuilder();
|
|
for(int i = 0; i< input.size(); i++) {
|
|
if(i > 0)
|
|
sb.append(',');
|
|
Video v = input.get(i);
|
|
sb.append("('").append(v.id).append("','").append(v.length).append("','").append(v.created).append("','").append(v.languageCode).append("','").append(v.categorie).append("') ");
|
|
}
|
|
String qu = "INSERT IGNORE INTO `ytcrawler`.`videos`(`id`, `length`, `created`, `langcode`, `category`) VALUES " + sb.toString();
|
|
update(qu);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* instant query
|
|
* @param q
|
|
* @return Das resultSet der Query
|
|
*/
|
|
public ResultSet query(String q) {
|
|
try {
|
|
if(con.isClosed()) {
|
|
connect(true);
|
|
}
|
|
return con.prepareStatement(q).executeQuery();
|
|
} catch (SQLException e) {
|
|
log.error("Fehler bim ausführen der Query: " + q, e);
|
|
}
|
|
return null;//ERROR!
|
|
}
|
|
|
|
/**
|
|
* instant update
|
|
* @param q
|
|
*/
|
|
public void update(String q) {
|
|
try {
|
|
if(con.isClosed()) {
|
|
connect(true);
|
|
}
|
|
con.prepareStatement(q).executeUpdate();
|
|
} catch (SQLException e) {
|
|
log.error("Fehler bim ausführen der Update-Query: " + q, e);
|
|
}
|
|
}
|
|
} |