Tutorial JavaFX e banco de dados

Alguém conhece algum tutorial de um formulário em JavaFX acessando banco de dados? Os que encontrei foram somente com desenhos.

Opaaa…
tambem quero
=)

Você pode usar um DAO Java na sua aplicação… O mesmo DAO de sua aplicação WEB, Swing…

Faça um teste!

Coincidentemente, estou descrevendo uma APP usando JavaFX e banco de dados, em breve postarei em algum site…

Mas siga esse exemplo que é muito, muito velho!!! fiz com JavaFX 1.1, perceba que só existiam dois layouts na época, pelo meu comentário no código…

EDIT: OBS: Este exemplo é velho… Não me julguem por isso, mais um vez falando :S

Antes, quero deixar claro que embora muitas pessoas apontem os problemas de JavaFX como sendo performance, falta de componentes blá blá, eu digo que o maior problema do JavaFX é o Deploy… isso eu apanhei e apanho para fazer!!!

Enfim, meu Script JavaFX:

/*
Exemplo de aplicação utilizando banco de dados com a View no JavaFX
É utilizada uma interface simples, no entanto, você pode aplicar os conceitos para aplicar a uma interface mais aprimorada! Uma interface RICH
*/

/*************************************Import's*/
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.ext.swing.*; //Componentes Swing disponiveis para uso no JavaFX
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.input.MouseEvent;
import dao.DaoNome;
import javafx.util.Sequences;
import javafx.scene.paint.Color;

/*************************************Declaração de variáveis*/
var painel: Scene;				//"Onde tudo Acontece!"
var txtNome: SwingTextField; 	//Campo de texto do componente
var btnAdicionar: SwingButton;  //Botao para adicionar
var btnBuscar: SwingButton;     //Busca
var btnApagar: SwingButton;     //Apagar
var barraSuperior: VBox;   		//Caixa com os widgets
var painelConteudo: VBox;   	//O conteúdo do banco de dados!
var conteudo: SwingLabel[]; 	//Os dados que estarão sendo trabalhados no programa
var dao: DaoNome;               //Nosso DAO
var atual: SwingLabel;			//O nome Atualmente Selecionado


//Estilos !
var styleBtn: String = "height:30; width: 150;";

/*************************************instanciando*/
txtNome = SwingTextField{height: 20; width: 200;}

dao = new DaoNome();
/*
O Gerenciamento de Layout em Java FX é feito exclusivamente com somente 
o gerenciador Vertical (VBOX) e o horizontal(HBOX)
*/
painelConteudo = VBox{
					spacing: 5;
					content: [
								SwingLabel{ text: "Dados:"},
								VBox{									
									translateX: 30; 
									content: bind conteudo									
								}								
							];
				}
				
btnAdicionar = SwingButton{
				style: styleBtn;		
				text: "Adicionar";
				onMousePressed: addNome;
			}

btnBuscar = SwingButton{
				style: styleBtn;
				text: "Buscar";
				onMousePressed: buscar;
			}
			
btnApagar = SwingButton{
				style: styleBtn;
				text: "Apagar";
				onMousePressed: apagar;
			}
			
barraSuperior = VBox{
					translateX: 10;	
					translateY: 10;	
					spacing: 10;
					//Content é uma sequence( tupla ) que recebe
					//os componentes que ficarão armazenados
					content:[
								HBox{									
									spacing: 5;									
									content:[
												SwingLabel{ text:"Nome:"},
												txtNome
											]
								},
								HBox{
									spacing: 5;		
									content:[	
												btnBuscar,
												btnAdicionar,
												btnApagar																									
											];
								}						
							]
				}

painel =  Scene{
			content: VBox{
						spacing: 15;
						content:[
									barraSuperior,						
									painelConteudo
								];
					}			
		}
		
/*************************************Funções*/
//Todo Listener tem que receber um atributo do tipo Mouse
function addNome(e: MouseEvent){
			dao.inserir(txtNome.text);
			delete conteudo;
			busca(txtNome.text);
			return;		
}		

function buscar(e: MouseEvent){
		busca(txtNome.text);
		if(sizeof conteudo == 0){
			insert
				SwingLabel{
					text: "Não foram encontrados resultados!";
					foreground: Color.RED;
				}
			into 
				conteudo;
		}
		return;
}

function apagar(e:MouseEvent){
		dao.apagar(atual.text);
		busca(txtNome.text);		
		return;
}
	
function busca(texto: String){
		delete conteudo;
		var dados = dao.buscaDadosPessoais(texto);		
		for(txt in dados){
			insert
				SwingLabel{
					text: txt;
					onMousePressed: setarAtual;
				}				
			into 
				conteudo;				
		}
}
function setarAtual(e: MouseEvent){	
	if(atual != null){
		atual.foreground = Color.BLACK
	}
	atual = conteudo [ Sequences.nextIndexOf(conteudo, e.node, 0) ];
	atual.foreground = Color.RED;
	return;
}		
/*************************************Frame*/
//Usamos a forma declarativa para gerar a tela
Stage{
		height: 400; width: 500;
		scene: painel;
		title: "Acessando banco de dados com JavaFX"
}

Meu dao ridículo e antigo(nunca façam um DAO como este, é só o meu DAO antigo):

package dao;


import java.sql.ResultSet;
import java.sql.SQLException;

public class DaoNome {
	MySQLCon con;	
	
	public DaoNome(){
		con = new MySQLCon();	
	}
	public String[] buscaDadosPessoais(String nome){
		ResultSet rs = null;
		String[] dados = null;
				
		try {
			rs = con.retornaComando().executeQuery("SELECT COUNT(nome) FROM pessoa WHERE nome LIKE '"+nome + "%'");
			rs.next();
			dados = new String[rs.getInt("COUNT(nome)")];
			if( dados == null) throw new Exception("Não há resultados");
			rs = con.retornaComando().executeQuery("SELECT * FROM pessoa WHERE nome LIKE '"+nome + "%' ORDER BY nome");
			int i=0;
			while(rs.next())dados[i++] = rs.getString("nome"); 
		} catch (Exception e) {
			e.printStackTrace();
		}
		con.desconectar();
		return dados;
	}
	
	public boolean apagar(String nome){
		try {
			con.retornaComando().executeUpdate("DELETE FROM pessoa WHERE nome = '"+nome+"'");
			con.desconectar();
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}		
		return true;
	}
	
	public boolean inserir(String nome){
		try {
			con.retornaComando().executeUpdate("INSERT INTO pessoa(nome) VALUES('"+nome+"')");
			con.desconectar();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}		
	}	
}

EDIT: Imagem:

[]'s

Ótimo exemplo, bem didático! Parabens!
Vou testar qndo tiver oportunidade!

At.
Wallfox

eu preciso de qual jar no meu projeto pra funcionar.
eu baixei o sqljdbc4.jar do site da microsoft e nao deu certo, da esse erro:

alguem saberia me ajudar?

Hey…

Um tutorial legal sobre JavaFX begin, você irá encontrar na Java Magazine, nesta última edição(ed: 72), que foi feito pelo Osvaldo Doederlein.
Ainda não consegui me concentrar totalmente nele, mas pelo que vi é bem interessante. Só que não é em BD, é apenas um Arquivo que ele trabalhar atavés de IO.
No caso dae você podem utilizar o exemplo do Jesuino!

Assim que eu estudar este tutorial, irei pesquisar algo sobre BD com JavaFX e deixo informações aqui!

[]'s

Muito interessante o exemplo. Só uma dúvida como colocar isso na WEB? Afinal pelo que eu entendi ai todo o processamento está no cliente e nada no servidor.

[quote=rafaelbtz]Muito interessante o exemplo. Só uma dúvida como colocar isso na WEB? Afinal pelo que eu entendi ai todo o processamento está no cliente e nada no servidor.

[/quote]

respondi seu post anterior:

http://www.guj.com.br/posts/list/142061.java

[]'s