[RESOLVIDO] JDBC Mysql: problema com rollback()

Boa dia a todos, estou querendo executar intruções DDL com o banco, e a minha intenção é que ao ocorrer um erro na execução todo o código seja “descartado”.
Andei pesquisando sobre o método rollback, e teoricamente ele se encarrega de fazer isso. Porém nos testes que faço eu forço um erro em uma String (base3) para forçar o rollback.
O que acontece, é que ao executar os dois primeiros Statements, eles estão sendo criados.
Segue abaixo o código:

public static void teste2() { try { String base = "novaBase"; Connection con = null; Class.forName("com.mysql.jdbc.Driver"); String conexao = "jdbc:mysql://localhost/" + base + "?user=root&password="; con = DriverManager.getConnection(conexao); Savepoint antes = con.setSavepoint("boa"); con.setAutoCommit(false); try { String base1 = "CREATE TABLE `agendaoperacao` (`id` int(11) NOT NULL AUTO_INCREMENT) ENGINE=innodb DEFAULT CHARSET=utf8 ;"; String base2 = "CREATE TABLE `alarme` (`id` int(10) NOT NULL AUTO_INCREMENT, `data` datetime DEFAULT NULL) ENGINE=innodb DEFAULT CHARSET=utf8 ;"; String base3 = "CREATE ABLE `cancelamentohorarios` (`id` int(11) NOT NULL AUTO_INCREMENT, `motivo` varchar(60) NOT NULL DEFAULT '') ENGINE=innodb DEFAULT CHARSET=utf8 ;"; System.out.println(con.getAutoCommit()); Statement st = null; st = con.createStatement(); st.execute(base1); st.execute(base2); st.execute(base3); con.commit(); System.out.println("con commit..."); } catch (SQLException e) { con.rollback(antes); System.out.println("con rollback..."); con.close(); System.out.println("con fechada..."); } } catch (Exception e) { e.printStackTrace(); } } //fim do teste2

Estou fazendo alguma confusão?
Comando DDL são commitados automaticamente? Devo usar outra classe?
Espero que possam me ajudar.

Como você criou suas tabelas?
Você deve cria-las como InnoDB.

*Nunca usei paramêtros no rollback.

Espero ter ajudado.

Pois é. Li isso. Apenas a innodb tem suporte a rollback de transaction.
Mas elas estão criadas como innodb.

Em ambos os casos (rollback com ou sem parametros) não esta funcionando.
Usei o savepoint para testar…

O que parece mesmo com o autocommit marcado como false, o commit é feito automaticamente.
Talvez não funcione para intruções DDL e só para DML.

Por isso postei aqui, alguém saberia me dizer se devo utilizar algum outro recurso para este tipo de situação? Já pensei em utilizar StoredProcedure, deve funcionar, mas não gostaria de passar para esta alternativa.

Para comandos DDL não existe rollback… se não me engano existe um commit implicito em todos os commandos DDL…
vc pode verificar q o comando rollback funciona normalmente para inserts e deletes, não existindo portanto um problema no método rollback()… isso é um conceito de banco de dados…

caso queira voltar para o estado anterior, desenvolva scripts q anulem a criação das tabelas q vc fez, fazendo o caminho inverso (drop table …)

Hmmm.
Ok, é uma boa alternativa esta de dar um drop.
Observei que o rollback funcionava apenas com o DDL, por isso criei o tópico. Achei que haveria outra forma de fazer este controle de transação.

Obrigado pela ajuda.