YoutubeCrawler/src/de/mrbesen/youtubecrawler/DB.java

121 lines
3.7 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(Config.class.getName());
public DB() {
try {
Class.forName("com.mysql.jdbc.Driver");//Treiber laden
//verbinden
con = DriverManager.getConnection("jdbc:mysql://" + server + ":" + port + "/?serverTimezone=UTC" ,user,pw);
//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 (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 {
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 {
con.prepareStatement(q).executeUpdate();
} catch (SQLException e) {
log.error("Fehler bim ausführen der Update-Query: " + q, e);
}
}
}