Estou desenvolvendo um aplicativo para cadastro de clientes, sendo que este será realizado para um trabalho da disciplina de redes, o cadastro vai salvar BD MySQL, sei que posso fazer isso por meio do JDBC e HIBERNATE, porém, o requisito principal do trabalho é utilizar o socket para comunicação entre cliente/servidor(BD), é “reinventar a roda”, mas . . . . Estou com ele todo pronto, porém, não consegui achar uma forma de comunicar BD por este meio. Conversei com alguns colegas de faculdade que vivenciam com a linguagem a mais tempo, porém, ninguém sabe. Alguém tem um idéia de como fazer isto, uma luz . . .
Isso não é complicado nao, na url que vc fez para a conexao com o bd, aonde ´vc colocou localHost, trocar para o ip da onde está seu bd.
B
Bru_Java_RS
Carinha,
Pois é, já fiz um “insert” nesta condição de chamar o MySQL em localhost e na porta 3306, e quando fui fazer um Run File ele acusou um erro. Vou tentar com IP 127.0.0.1, mas, se tiveres um exemplo prático, te agradeceria . .
Vlw pela força!
R
rmarin
Olá,
Crie um client socket que envia os dados para um server socket. Este servidor pega os dados, você pode receber via xml - recomendo xstream pela facilidade, algum formato texto posicional, ou com separadores (’|’, ‘;’).
No socket servidor você pega os dados, transforma nos objetos equivalentes e grava no banco.
Para gravar no banco utilize JDBC ou algum framework de persistência.
Com certeza o que seu professor quer, é que você faça algo que trafegue pela rede, mas com relação a comunicação com o banco, pouco importa.
Afinal, você não vai montar um driver na unha, vai? :thumbup:
R
rmarin
Olá,
Crie um client socket que envia os dados para um server socket. Este servidor pega os dados, você pode receber via xml - recomendo xstream pela facilidade, algum formato texto posicional, ou com separadores (’|’, ‘;’).
No socket servidor você pega os dados, transforma nos objetos equivalentes e grava no banco.
Para gravar no banco utilize JDBC ou algum framework de persistência.
Com certeza o que seu professor quer, é que você faça algo que trafegue pela rede, mas com relação a comunicação com o banco, pouco importa.
Afinal, você não vai montar um driver na unha, vai? :thumbup:
R
rmarin
Olá,
Crie um client socket que envia os dados para um server socket. Este servidor pega os dados, você pode receber via xml - recomendo xstream pela facilidade, algum formato texto posicional, ou com separadores (’|’, ‘;’).
No socket servidor você pega os dados, transforma nos objetos equivalentes e grava no banco.
Para gravar no banco utilize JDBC ou algum framework de persistência.
Com certeza o que seu professor quer, é que você faça algo que trafegue pela rede, mas com relação a comunicação com o banco, pouco importa.
Afinal, você não vai montar um driver na unha, vai? :thumbup:
B
Bru_Java_RS
RMarin,
O servidor socket de cliente e servidor já estão pronto, o que eu preciso é inserir o SQL para query e insert, eu peguei o exemplo aqui do GUJ mesmo e adaptei as minhas necessidades, fiz um teste enviando uma frase para o server e rolou legal; o que eu não consigo e colocar o código SQL dentro deste socket. Eu também tentei fazer uma classe só para comunicar com o banco, instanciando este dentro do Socket, usando o drive JDBC, porém apresentou alguns erros, quando dei o Run File. Faz umas 2 semanas que comecei a estudar a linguagem, por isso, que estou um pouco perdido.
Vlw pela ajuda!
R
rmarin
O que você quer dizer a frase abaixo?
Bru_Java_RS:
RMarin,
o que eu não consigo e colocar o código SQL dentro deste socket.
B
Bru_Java_RS
Tipo fazer um insert ou um query dentro do código. Peguei alguns livros na faculdade, mas, pouco parece sobre socket, no que aperece, mostra aquele “jogo da velha” e alguns exemplos que não trabalham com banco. Espero não estar falando besteira.
Obrigado pelo interesse em me ajudar!
R
rmarin
Mas você já está com os dois sockets prontos? O servidor e o cliente?
Coloque o código aqui…
B
Bru_Java_RS
Carinha,
Está no meu note pessoal, assim que chegar na faculdade te mando;vou te mandar também a classe do banco.
Vlw!
B
Bru_Java_RS
rmarin,
Ai vai os sockets:
Servidor:
packageSocket;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.net.ServerSocket;importjava.net.Socket;publicclassServidor{publicstaticvoidmain(String[]args){//Declaro o ServerSocket 12 ServerSocketserv=null;//Declaro o Socket de comunicação Sockets=null;//Declaro o leitor para a entrada de dadosBufferedReaderentrada=null;try{//Cria o ServerSocket na porta 3306 se estiver disponível serv=newServerSocket(3306);//Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o clientes=serv.accept();//Cria um BufferedReader para o canal da stream de entrada de dados do socket s entrada=newBufferedReader(newInputStreamReader(s.getInputStream()));//Aguarda por algum dado e imprime a linha recebida quando recebeSystem.out.println(entrada.readLine());//trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io System.out.println("Iniciação de servidor OK");}catch(IOExceptione){//Imprime uma notificação na saída padrão caso haja algo errado. System.out.println("Erro para criar ou receber o socket.");}finally{try{//Encerro o socket de comunicaçãos.close();//Encerro o ServerSocketserv.close();}catch(IOExceptione){}}}}
Cliente
packageCliente;importjava.io.IOException;importjava.io.PrintStream;importjava.net.Socket;publicclassCliente{publicstaticvoidmain(String[]args){//Declaro o socket clienteSockets=null;//Declaro a Stream de saida de dadosPrintStreamps=null;try{//Cria o socket com o recurso desejado na porta 3306s=newSocket("127.0.0.1",3306);//Cria a Stream de saida de dadosps=newPrintStream(s.getOutputStream());//Imprime uma linha para a stream de saída de dadosps.println("Cheguei ao servidor");//Trata possíveis exceções}catch(IOExceptione){System.out.println("Erro ao criar ou enviar dados pelo socket.");}finally{try{//Encerra o socket clientes.close();}catch(IOExceptione){}}}}
Chamar BD. Este não cheguei a fazer o finally.
packagetrabalhog1_2;importjava.sql.*;importjavax.sql.*;publicclassconexaoBanco{publicvoidconecta(){Connectioncon=null;Statementstmt=null;ResultSetres=null;try{Class.forName("com.mysql.jdbc.Driver");con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/","root","muniz");stmt=con.createStatement();res=stmt.executeQuery("select * from alunos");while(res.next()){System.out.println(res.getString("nome"));}}catch(ClassNotFoundExceptione){e.printStackTrace();System.out.println("Estou no ClassNotFoundException");}catch(SQLExceptione){e.printStackTrace();System.out.println("Estou no SQLException");}finally{//colocar o que aqui?????}}publicstaticvoidmain(String[]args){}}