Enviar dados ao BD pelo socket!

Pessoal,

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 . . .

Obrigado desde já . . . !

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.

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!

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:

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:

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:

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!

O que você quer dizer a frase abaixo?

[quote=Bru_Java_RS]RMarin,
o que eu não consigo e colocar o código SQL dentro deste socket.
[/quote]

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!

Mas você já está com os dois sockets prontos? O servidor e o cliente?

Coloque o código aqui… :wink:

Carinha,

Está no meu note pessoal, assim que chegar na faculdade te mando;vou te mandar também a classe do banco.

Vlw!

rmarin,

Ai vai os sockets:

Servidor:


package Socket;
import java.io.BufferedReader; 
import java.io.IOException;
import java.io.InputStreamReader; 
import java.net.ServerSocket; 
import java.net.Socket;


public class Servidor {
    
 
     public static void main(String[] args) { 
    //Declaro o ServerSocket 12         
        ServerSocket serv=null; 
        //Declaro o Socket de comunicação 
        Socket s= null; 
        //Declaro o leitor para a entrada de dados
        BufferedReader entrada=null; 
        try{
              //Cria o ServerSocket na porta 3306 se estiver disponível 
              serv = new ServerSocket(3306);
              //Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente
              s = serv.accept();
             //Cria um BufferedReader para o canal da stream de entrada de dados do socket s 
             entrada = new BufferedReader(new InputStreamReader(s.getInputStream()));
             //Aguarda por algum dado e imprime a linha recebida quando recebe
             System.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(IOException e){ 
                //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ção
                     s.close();
                    //Encerro o ServerSocket
                    serv.close();
             }catch(IOException e){ 
             }
          } 
     }
          }

Cliente



package Cliente;

import java.io.IOException; 
import java.io.PrintStream;
import java.net.Socket;


public class Cliente {
public static void main(String[] args) {

//Declaro o socket cliente
Socket s = null;

//Declaro a Stream de saida de dados
PrintStream ps = null;

try{ 

    //Cria o socket com o recurso desejado na porta 3306
    s = new Socket("127.0.0.1",3306); 

    //Cria a Stream de saida de dados
    ps = new PrintStream(s.getOutputStream());

    //Imprime uma linha para a stream de saída de dados
    ps.println("Cheguei ao servidor");

    //Trata possíveis exceções
    }catch(IOException e){
        System.out.println("Erro ao criar ou enviar dados pelo socket.");
    }finally{ 
        
        try{ 

                //Encerra o socket cliente
                s.close();
        
                }catch(IOException e){}
    
            }
    }
}

Chamar BD. Este não cheguei a fazer o finally.




package trabalhog1_2;

import java.sql.*;
import javax.sql.*;

public class conexaoBanco {
    
    public void conecta() {
        Connection con = null;
		Statement stmt = null;
		ResultSet res = 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 (ClassNotFoundException e) {
			e.printStackTrace();
			System.out.println("Estou no ClassNotFoundException");
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("Estou no SQLException");
		}
		finally{
				//colocar o que aqui?????
		}

	}
	
	public static void main(String[] args) {
		
	    }
    
}