Boa noite a todos
Estou com um problema um pouco bizarro :shock:
Estou usando preparedStatement para criar meu banco de dados a partir de um diretório do sistema de arquivos.
Crio as tabelas perfeitamente, mas na hora de realizar os INSERTS, o preparedStatement parece esquecer de algumas linhas…
Procurando pelo erro, utilizei 2 JOptionPanes para me apontarem o “percurso” dos dados enquanto estavam sendo inseridos (os dois estão comentados no código abaixo). Quando uso os JOptionPanes, os inserts funcionam e o banco de dados é preenchido corretamente.
Alguém já passou por isso?
Eu estou me esquecendo de alguma coisa?
import java.io.*;
import java.sql.*;
import java.util.Properties;
import javax.swing.*;
public class DBGenerator {
private Connection con;
private Statement stm;
private PreparedStatement pstm;
private MyProperties properties = MyProperties.getInstance();
private String
driver = properties.getProperty("DB_DRIVER"),
url = properties.getProperty("DB_URL"),
user = properties.getProperty("DB_USER"),
password = properties.getProperty("DB_PASSWORD"),
path = properties.getProperty("MUSIC_DIRECTORY"),
dbHome = properties.getProperty("DB_HOME");
public DBGenerator() {
deleteDBFiles();
createDB();
insertDB();
}
public void insertDB() {
String insertStyle = properties.getProperty("INSERT_STYLE");
String insertArtist = properties.getProperty("INSERT_ARTIST");
String insertAlbum = properties.getProperty("INSERT_ALBUM");
String insertSong = properties.getProperty("INSERT_SONG");
String updateStyle = properties.getProperty("UPDATE_STYLE");
String updateArtist = properties.getProperty("UPDATE_ARTIST");
String updateAlbum = properties.getProperty("UPDATE_ALBUM");
int iArtist = -1;
int iAlbum = -1;
int iSong = -1;
try {
con = DriverManager.getConnection(url, user, password);
File musicDir = new File(path);
String[] styles = musicDir.list();
for(int i = 0; i < styles.length; i++) {
File f1 = new File(musicDir + File.separator + styles[i]);
if(f1.isDirectory()) {
pstm = con.prepareStatement(insertStyle);
pstm.setInt(1, i);
pstm.setString(2, styles[i]);
pstm.executeUpdate();
// JOptionPane.showMessageDialog(null, f1.getAbsoluteFile() + " " + i
// + "\n" + insertStyle + " " + i + " " + styles[i]);
String[] artists = f1.list();
for(int j = 0; j < artists.length; j++) {
File f2 = new File(f1 + File.separator + artists[j]);
if(f2.isDirectory()) {
pstm = con.prepareStatement(insertArtist);
pstm.setInt(1, ++iArtist);
pstm.setString(2, artists[j]);
pstm.setInt(3, i);
pstm.executeUpdate();
String[] albums = f2.list();
for(int k = 0; k < albums.length; k++) {
File f3 = new File(f2 + File.separator + albums[k]);
if(f3.isDirectory()) {
String[] songs = f3.list();
pstm = con.prepareStatement(insertAlbum);
pstm.setInt(1, ++iAlbum);
pstm.setString(2, albums[k]);
pstm.setInt(3, iArtist);
pstm.executeUpdate();
for(int l = 0; l < songs.length; l++) {
if((songs[l].contains(".jpg")) || (songs[l].contains(".jpeg")) || (songs[l].contains(".png"))) {
String s = f3 + File.separator + songs[l];
pstm = con.prepareStatement(updateAlbum);
pstm.setString(1, s);
pstm.setInt(1, iAlbum);
pstm.executeUpdate();
} else {
int format = 0;
if(songs[l].contains(Constants.AUDIO_FORMAT)) {
format = 1;
} else if(songs[l].contains(Constants.VIDEO_FORMAT)) {
format = 2;
}
pstm = con.prepareStatement(insertSong);//FIXME execution e length no random
pstm.setInt(1, ++iSong);
pstm.setString(2, songs[l]);
pstm.setInt(3, format);
pstm.setInt(4, (int)(1000 * Math.random()));
pstm.setInt(5, iAlbum);
pstm.setInt(6, (int)(1000 * Math.random()));
pstm.executeUpdate();
}
}
} else if((f3.toString().contains(".jpg")) ||
(f3.toString().contains(".jpeg")) ||
(f3.toString().contains(".png"))){
pstm = con.prepareStatement(updateArtist);
pstm.setString(1, f3.getAbsolutePath());
pstm.setInt(2, iArtist);
pstm.executeUpdate();
}
}
} else if((f2.toString().contains(".jpg")) ||
(f2.toString().contains(".jpeg")) ||
(f2.toString().contains(".png"))){
pstm = con.prepareStatement(updateStyle);
pstm.setString(1, f2.getAbsolutePath());
pstm.setInt(2, i);
pstm.executeUpdate();
}
}
} else {
// JOptionPane.showMessageDialog(null, f1.getAbsoluteFile() + "\nEstá no diretório errado...");
}
}
} catch(SQLException e) {
JOptionPane.showMessageDialog(null, "sql exception");
e.printStackTrace();
} finally {
try {
con.close();
} catch(SQLException onConClose) {
JOptionPane.showMessageDialog(null, "Houve erro no fechamento da conexão");
onConClose.printStackTrace();
}
}
}
public void createDB() {
String createStyle = properties.getProperty("CREATE_STYLE");
String createArtist = properties.getProperty("CREATE_ARTIST");
String createAlbum = properties.getProperty("CREATE_ALBUM");
String createSong = properties.getProperty("CREATE_SONG");
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
stm = con.createStatement();
stm.executeQuery(createStyle + createArtist + createAlbum + createSong);
} catch(ClassNotFoundException e){
JOptionPane.showMessageDialog(null, "Classe nao encontrada");
e.printStackTrace();
} catch(SQLException e) {
JOptionPane.showMessageDialog(null, "Excessão SQL");
e.printStackTrace();
} finally {
try {
stm.execute("SHUTDOWN");
con.close();
} catch(SQLException onConClose) {
JOptionPane.showMessageDialog(null, "Houve erro no fechamento da conexão");
onConClose.printStackTrace();
}
}
}
public void deleteDBFiles() {
try {
File[] dbFiles = new File(dbHome).listFiles();
for(int i = 0; i < dbFiles.length; i++) {
dbFiles[i].delete();
}
} catch(SecurityException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new DBGenerator();
}
}
Obrigado a todos