Como executar uma view no netbans 6.5 ?
Criei no MySql 5.1 uma view
é bem simples:
create or replace view total_estoque
select sum(valor_materiais) as Total
from materiais
Quero atribuir esse valor encontrado a um JTextField
desde já, obrigado.
Como executar uma view no netbans 6.5 ?
Criei no MySql 5.1 uma view
é bem simples:
create or replace view total_estoque
select sum(valor_materiais) as Total
from materiais
Quero atribuir esse valor encontrado a um JTextField
desde já, obrigado.
Ola,
na verdade vc nao precisa fazer nada de especial. Vc pode executar um select na view como se fosse uma tabela no BD.
Se vc nao sabe como executar selects, da uma olhada aqui:
http://download.oracle.com/javase/tutorial/jdbc/index.html
Mas basicamente vc vai ter que fazer algo do tipo:
String mySQLDriver = "org.gjt.mm.mysql.Driver";
String dbUrl = "jdbc:mysql://localhost/test";
Class.forName(mySQLDriver);
Connection conn = DriverManager.getConnection(dbUrl, usuario, senha);
String query = "SELECT * FROM nome_da_sua_view";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
// faz o necessario com os dados retornados pelo select.
// como vc disse, pega o valor e atribui ao textbox.
}
//Daniel
Muitooooooooo obrigado, deu certo aqui.
Mas sem querer abusar, gostaria de fazer a mesma coisa com uma tigger e uma function do Mysql, vou tentar aqui fazer o mesmo procedimento. Mas se tiver exemplos, por favor mande.
Obrigado mesmo. É bom ter alguém pra apoiar agente.
Valeu mesmo.
Muitooooooooo obrigado, deu certo aqui.Mas sem querer abusar, gostaria de fazer a mesma coisa com uma tigger e uma function do Mysql, vou tentar aqui fazer o mesmo procedimento. Mas se tiver exemplos, por favor mande.
Obrigado mesmo. É bom ter alguém pra apoiar agente.
Valeu mesmo.
Ola,
Nao tenho certeza se da certo rodar a trigger diretamente do java, triggers sao geralmente rodadas apos alguma operacao (um insert, update ou delete) em alguma tabela do banco.
Quando vc cria a trigger no banco vc ja especifica em qual situacao a trigger vai rodar. Exemplo:
CREATE TRIGGER nome_da_trigger BEFORE INSERT ON nome_da_tabela
FOR EACH ROW
BEGIN
// FAZ ALGUMA COISA.
END;
Para rodar uma Stored Procedure ou Function vc poder usar o metodo prepareCall.
Suponha que vc tenha uma procedure no banco que recebe nome e sobrenome do usuario para executar alguma coisa:
CallableStatement proc = connection.prepareCall("{ call setNomeDoUsuario_proc(?, ?) }");
proc.setString(1, nome);
proc.setInt(2, sobrenome);
cs.execute();
//Daniel
/*Fiz essa procedure no MySql
DELIMITER $$
CREATE PROCEDURE nome_obrigatorio_materiaisInsert(Valor_nome varchar(100))
BEGIN
if (valor_nome != '') then
insert into materiais(nome_materiais) values (valor_nome);
else
select 'Nome do material é obrigatório' as Msg;
end if;
END $$
DELIMITER ;*/
//Gostaria de colocar isso no evento do botão salvar, ou seja, é obrigatório cadastrar o nome do material.
//Não sei se está correto.
public class Nome_Obrigatorio_Materiais {
ComandosSql con_materiais; //Conexão com o Banco e execução de String de comandos SQL
Connection conn = this.getConnection();// Esse getConnection me obrigou a fazer um método aqui em baixo...
CallableStatement CStmChamarStored;
ResultSet RsConsultarChamarStored;
public String vMaterial = "";//variavel global pra eu usar no
public void Verificando_Nome_Material(String nome){
try{
con_materiais = new ComandosSql(); //inicializando o con_materiais
con_materiais.conecta();//conexão com o banco
try {//---------------------------------CHAMANDO A PROCEDURE
CStmChamarStored = (CallableStatement) conn.prepareCall("{call nome_obrigatorio_materiaisInsert(?)}");
CStmChamarStored.setString(1,"");
CStmChamarStored.execute();
RsConsultarChamarStored = (ResultSet) CStmChamarStored.getResultSet();
vMaterial = RsConsultarChamarStored.getString("nomeMateriais");//nomeMateriais de acordo com a classe materiais
} catch (Exception err) {
Funcoes.mensagemAviso("A funcionalidade não foi executada...");
}
}catch(Exception err){
}
}
private Connection getConnection() {
throw new UnsupportedOperationException("Not yet implemented");
}
Eh, esta ok a sua implementacao.
Soh uma observacao, a validacao se o nome do material eh branco poderia ser feita diferente:
Vc poderia fazer a validacao no banco igual vc esta fazendo, mas ao inves de retornar uma mensagem dizendo que o nome do materia eh obrigatoria, seria melhor vc disparar um erro.
O metodo execute() em CallableStatement retorna true se a operacao foi bem sucedida e false caso contrario, entao se vc disparar um erro na procedure vai retornar false ai vc faz o resto no seu codigo, mostrar a mensagem de erro pro usuario por exemplo.
Eu acho que essa forma seria o ideal.
Ou talvez fazer a validacao antes de executar o insert, ai vc tem certeza que vc esta inserindo dados validos.
Faz sentido??
Outra coisa, vc colocou dois try catches, encadeados.
Nao seria melhor ter apenas um??? Por exemplo:
try {
// conecta no banco, prepara query, executa, pega os resultados.
} catch(SQLException sqlException) {
int errorCode = sqlException.getErrorCode();
// tratar o erro.
}
getErrorCode() vai retornar o codigo de erro especifico pro banco que vc esta usando. Dessa forma vc pode exibir mensagens mais informativas pros usuarios do seu sistema. Porque do jeito que esta, vc nao sabe se a conexao falhou, se vc passou dados invalidos.
//Daniel
Muito obrigado, consegui fazer duas trigger no Mysql e deu certo, essa Procedure que eu fiz não é necessária, pois, achei mais simples fazer um evento pelo próprio JTextField. Tenho outra dúvida, mas vou abrir outro tópico, esse aqui foi resolvido.
Valeu Daniel. 