Caríssimos,
Eu acredito que este seja um problema bem comum por aqui, muito embora, por mais que eu buscasse, não encontrei solução:
Preciso criar uma aplicação Cliente-Servidor usando Socket. Pra ir um passo a frente, configurei um JDBC em MySQL que está funcionando perfeitamente no servidor, faço consultas e as imprimo tranquilamente, repito, no servidor.
Mas eu não consigo achar em lugar nenhum alguma informação completa de como transportar os ResultSets. Depois de muito Googleing achei alguma coisa me dizendo que eu deveria serializá-lo, mas não achei nada que me ajudasse a faze-lo, então, de volta a estaca zero.
Nos comandos de UPDATE e INSERT INTO eu retor uma String dizendo se eu tive sucesso ou não na execução. Mas COMO EU RETORNO UM SELECT em uma conexão socket?
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.rowset.CachedRowSet;
public class ReceitasServidor {
public static void main(String[] args) throws Exception{
String comando;
String retorno;
ServerSocket welcomeSocket = new ServerSocket(7890);
while(true){
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromCliente = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToCliente = new DataOutputStream(connectionSocket.getOutputStream());
comando = inFromCliente.readLine();
retorno = executarQry(comando);
outToCliente.writeBytes(retorno);
}
}
public static String executarQry(String comando) throws SQLException{
if(comando.substring(0, 11).equalsIgnoreCase("INSERT INTO")){
Statement stm = ConexaoBD.getConnection().createStatement();
int count = stm.executeUpdate(comando);
return count+" linha(s) inserida na Tabela.";
}
if(comando.substring(0, 6).equalsIgnoreCase("UPDATE")){
Statement stm = ConexaoBD.getConnection().createStatement();
int count = stm.executeUpdate(comando);
return count+" linha(s) atualizada(s) na Tabela.";
}
if(comando.equalsIgnoreCase("SELECT * FROM TAB_RECEITAS")){
Statement stm = ConexaoBD.getConnection().createStatement();
ResultSet rs = stm.executeQuery(comando);
//O que fazer??
}
if(comando.substring(0, 52).equalsIgnoreCase("SELECT * FROM TAB_RECEITAS WHERE TITULO_RECEITA LIKE")){
Statement stm = ConexaoBD.getConnection().createStatement();
ResultSet rs = stm.executeQuery(comando);
//O que fazer??
}
if(comando.substring(0, 48).equalsIgnoreCase("SELECT * FROM TAB_RECEITAS WHERE DSC_RECEITA LIKE")){
Statement stm = ConexaoBD.getConnection().createStatement();
ResultSet rs = stm.executeQuery(comando);
//O que fazer??
}
return "Query :'"+comando+"' Não foi reconhecida.";
}
}
Eu sei que está rabugento, mas eu não tenho experiência nenhuma em aplicação Cliente-Servidor.
A tabela armazena receitas de cozinha. Tem um ID_RECEITA, NOME_RECEITA, DSC_RECEITA.