Java + banco ! duvida

3 respostas
T

minha duvida eh de iniciante, mas vamos lah

tenho essas duas tabelas

CREATE TABLE marca (

idmarca INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,

desc_marca VARCHAR(20) NULL,

PRIMARY KEY(idmarca)

)

TYPE=InnoDB;
CREATE TABLE modelo (

idmodelo INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,

idmarca INTEGER UNSIGNED NOT NULL,

desc_modelo VARCHAR(20) NULL,

PRIMARY KEY(idmodelo),

INDEX modelo_FKIndex1(idmarca),

INDEX modelo_FKIndex2(idveiculo)

)

TYPE=InnoDB;

primeiro eu do um insert na tabela marca, para dpois inserir na tabela modelo passando o valor da FK, ate aqui td bem!

mas a duvida eh o seguinte, qnd eu tenho uma aplicação, como q eu faço pra recuperar o id do ultimo valor inserido na tabela marca pra poder inseri-lo na tabela pai

jah tentei dessas duas formas e nao funcionou :

OBS.: qnd executo esses comando no prompt do mysql funciona blz…mas na aplicaçao nao

String  sql= "insert into modelo (idmarca,desc_modelo)values(last_insert_id(),'teste')";
String sql = "insert into marca(desc_marca)values(?)";
String sql2="select last_insert_id() into @id";
String sql3="insert into modelo(idmarca,desc_modelo) values(@id,?)";

alguem tem alguma soluçao, agradeceria e mtooo

abraçoo

3 Respostas

M

Está utilizando o mesmo sql client para executar as duas inserções?
Caso não, existe um commit após o insert into marca… ?
Qual o erro retornado na aplicação?

P

Colega este é um exemplo de inserção de dados em duas tabelas no BD e a recuperação da id gerada para ser utilizada em outras manipulações.
na criação das tabelas a tabela filha usa como id o id da tabela pai, evitando referências cruzadas.

EX:
/**
*

  • @author Paulo Dantas
    */

public class DataBaseClientePF{

private ResultSet rs;
private static String id="";

/** Creates a new instance of DataBaseMaterial */
public DataBaseClientePF(String[] clientePF)
{
    new ConexaoDataBase();
    try {
            ConexaoDataBase.bancoDadosState.executeUpdate("insert into cliente" +
               " values(null,'"+clientePF[1]+"','"+clientePF[2]+"')"); 
            ConexaoDataBase.bancoDadosState.executeUpdate("insert into  clientepf " +
               "values('"+clientePF[0]+"',LAST_INSERT_ID())");
           rs =ConexaoDataBase.bancoDadosState.executeQuery("select idCliente from" +
              " clientepf where cpf=('"+clientePF[0]+"')");              
           rs.first();
           id=rs.getString(1);
                          
        JOptionPane.showMessageDialog(null,"SUCESSO ao Gravar" +
           " os dados do Cliente:  "+clientePF[1]);
        ConexaoDataBase.fecharConexao();
        
    } catch (SQLException ex)
    {
        JOptionPane.showMessageDialog(null,"ERRO ao Gravar" +
           " os dados do Cliente:  "+clientePF[1]);
        ConexaoDataBase.fecharConexao();
        
   }        
}
public static String id()
{
  System.out.println("id gerada: "+id.trim());
  return id.trim();
}

}

T

o problema e q essa funçao do mysql LAST_INSERT_ID() nao esta funcionando.

ele me retorna o erro de q esta faltando um parametro.
Column count doesn’t match value count at row 1

alguem teria otra solução ?

abraçoo

Criado 26 de março de 2008
Ultima resposta 27 de mar. de 2008
Respostas 3
Participantes 3