Referencia Recursiva, Um problema mais para SQL

2 respostas
F

Bem, eu estou fazendo um applet em Java que se integra com um banco de dados e quanto as conexões tudo rola certo, o problema é o seguinte, como usar insert into com chave estrangeira???
Tipo, as minhas tabelas usadas são as seguintes:

Aluno (IdAluno INT,Nome VARCHAR(50), Email VARCHAR(50), Telefone INT)
Pasta(NomePasta VARCHAR(30),PastaPai VARCHAR(30))
PastaPai references Pasta (NomePasta)
MapaConceitual(NomeMapa VARCHAR(30),NomePasta VARCHAR(30),PastaPai VARCHAR(30) ,IdAluno INT,MapaDsnho BLOB,XMLMapa BLOB)
NomePasta, PastaPai references Pasta (NomePasta,PastaPai)
IdAluno references Aluno(IdAluno)

Bem, então eu tenho este problema, crio um novo campo Aluno tranquilamente, problema é criar Pasta e MapaConceitual, realmente não tenho ideia de como fzer isso, já que a ideia por exemplo da pasta é realmenter uma recursão, aonde quando chegar numa pasta que se referencia a si mesma como pasta pai, esta será a root. E na de mapaconceitual que imagino ser mais fácil eu fiz algo assim para inserir elementos :
//Considere aqui que uma tabela pasta e aluno jah foram criadas
            // e que as variáveis pasta, pastaPai e idAluno contém String
            // que identificam as tabelas que desejamos procurar
               
            //agora vai criar um novo statement           
            sql = new StringBuffer();
            // o Select que vai escolher a pasta que tem que referenciar          
            String selectNomePasta = "SELECT nomePasta"
                                       +"WHERE nomePasta = "+pasta
                                       +"AND pastaPai = "+pastaPai;
            // e o nome da pasta pai dessa pasta
            String selectNomePastaPai = "SELECT pastaPai"
                                       +"WHERE nomePasta = "+pasta
                                       +"AND pastaPai = "+pastaPai;
             String selectIdAluno = "SELECT IdAluno "
                                        +"WHERE IdAluno = "+idAluno;
             //Insere numa tabela mapa conceitual
            sql.append("INSERT INTO MapaConceitual");
            //nos seguintes campos                   sql.append("(NOMEMAPA,NOMEPASTA,PASTAPAI,IDALUNO,DESENHO_MAPA,XML_MAPA)");
            sql.append("VALUES (?,"+selectNomePasta+","+selectNomePastaPai+","+selectIdAluno+",?,?)");

Mas e agora para criar uma tabela Pasta?

Não consegui achar nada na inet que m ajudasse qto a isso :/ Espero que alguém possa me ajudar. Obrigado e abraços.

2 Respostas

J

Não seria isso?

PreparedStatement stmt = conexao.prepareStatement("insert into pasta(nomepasta, pastapai)  values (?, ?)");

stmt.setString(1, "root");
stmt.setString(2, "root");

stmt.executeUpdate();
F

Hunnns.. o negocio é o seguinte, ai tu soh cria a root.. e depois para as outras?

Funciona daquela forma que eu apresentei ali encima para criar a tabela mapa conceitual?

Só para mostrar o último código editado, pq eu vi que o de cima está com bastantes errinhos de sintaxe :

sql = new StringBuffer();
            String selectNomePasta = "SELECT pasta.nomePasta "
                                       +"FROM pasta " 
                                       +"WHERE pasta.nomePasta = '"+pasta+"' "
                                       +"AND pasta.pastaPai = '"+pastaPai+"'";
            String selectNomePastaPai = "SELECT pastaPai "
                                       +"FROM pasta "
                                       +"WHERE nomePasta = '"+pasta+"' "
                                       +"AND pastaPai = '"+pastaPai+"'";
            //Insere numa tabela mapa conceitual
            sql.append("INSERT INTO MapaConceitual");
            //nos seguintes campos
            sql.append("(NOMEMAPA,NOMEPASTA,PASTAPAI,IDALUNO,DESENHO_MAPA,XML_MAPA)");
            sql.append("VALUES (?,"+selectNomePasta+","+selectNomePastaPai+",?,?,?)");
            
            //cria o prepared statement
            stmt = (PreparedStatement) getConnector().getConnection().prepareStatement(sql.toString());
            //e salva os arquivos
            stmt.setString(1,name);
            stmt.setInt(2,dono);            
            stmt.setBytes(3,drawingData);
            stmt.setBytes(4,xmlData);
            stmt.executeUpdate();
            stmt.close();
Criado 29 de setembro de 2006
Ultima resposta 29 de set. de 2006
Respostas 2
Participantes 2