Esse é a classe que fiz que eu acho que posso chamar de DAO pelo que vi na internet, onde uso para chamar conexão e o statement.
package conection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
/**
*
* @author LeandroDM
*/
public class DataBaseConfig {
Connection conn;
Statement stmt;
String mydatabase;
public Connection getConn() {
try {
//Captura em qual Sistema Operacional esta sendo executado.
String OS = System.getProperty("os.name").toLowerCase();
//#########################################################
if(OS.contains("windows")){
mydatabase = "C:/derby/databases/ssdb";
}else if(OS.contains("linux")){
mydatabase = "/derby/databases/ssdb";
}
//DB Derby Networked.
String database = "derby";
String ip = "localhost";
String port = "1527";
String username = "admin";
String password = "admin";
String url = "jdbc:" + database + "://" + ip + ":" + port + "/" + mydatabase; // a JDBC url
//
Class.forName("org.apache.derby.jdbc.ClientDriver");
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex);
}catch (ClassNotFoundException ex) {
Logger.getLogger(DataBaseConfig.class.getName()).log(Level.SEVERE, null, ex);
}
return conn;
}
public Statement getStmt() {
try {
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex);
}
return stmt;
}
}
Agora um exemplo de consulta que faço:
Botão onde faço consulta na tabla Produtos
public class GrupoProd extends javax.swing.JInternalFrame {
private TelaPrincipal frmTelaPrincipal;
DataBaseConfig dbconfig = new DataBaseConfig();
//Para consulta da tabela GRUPO_PROD
Connection conn = dbconfig.getConn();
Statement stmt = dbconfig.getStmt();
ResultSet rs;
//
//Para consulta da tabela PRODUTOS
Connection connProd = dbconfig.getConn();
Statement stmtProd = dbconfig.getStmt();
ResultSet rsProd;
//
String GCod;
String GNome;
Short GPorcent;
int i = 0;
int update = 0;
String CodProd;
String grupo;
String subgrupo;
String item;
public GrupoProd(TelaPrincipal frmTelaPrincipal) {
initComponents();
desabilitarTF();
DocumentFilters();
iniB();
this.frmTelaPrincipal = frmTelaPrincipal;
atualizar();
logicControl();
}
.
.
.
private void jButtonSubstActionPerformed(java.awt.event.ActionEvent evt) {
try {
rsProd = stmtProd.executeQuery("SELECT * FROM PRODUTOS");//Tabela Produtos
while (rsProd.next()) {
CodProd = rsProd.getString("COD_PRODUTO");
grupo = CodProd.substring(0, 3);
subgrupo = CodProd.substring(3, 6);
item = CodProd.substring(6, 10);
if (GCod.equals(grupo)) {
float CustUni = rsProd.getFloat("VALOR_CUSTO");
int Qtd = rsProd.getInt("QTD");
float ValVend = CustUni + ((CustUni * GPorcent) / 100);
float ValTotEst = CustUni * Qtd;
rsProd.updateShort("LUCRO", GPorcent);
rsProd.updateFloat("VALOR_VENDA", ValVend);
rsProd.updateFloat("VALOR_TOT_EST", ValTotEst);
rsProd.updateRow();
}
}
rsProd.close();
} catch (SQLException ex) {
Logger.getLogger(GrupoProd.class.getName()).log(Level.SEVERE, null, ex);
}
}
Tenho outro jInternalFrame que se conecta a mesma tabela que segue o mesmo estilo desse.
Porém enquano um estiver aberto e eu tentar fazer um rsProd = stmtProd.executeQuery(“SELECT * FROM PRODUTOS”); , awe que trava tudo.
Se eu esperar por um bom tempo, aparece os seguintes erros:
java.sql.SQLTransactionRollbackException: Não foi possível obter o bloqueio dentro do tempo requerido.
e
java.sql.SQLException: O ResultSet não está aberto. Verifique se a auto-efetivação está desabilitada.