2013-10-04 2 views
0

Я создаю программу для переименования баз данных в mysql. Я преуспел во всем, и это успешно происходит. Но в конце моего сценария в нем отображается ошибка/исключение, говорящее «Операция не разрешена после закрытия ResultSet». Я действительно не знаю, почему эта ошибка появляется даже после изучения этой ошибки. Хотя полная операция успешно завершена и база данных переименована. Вот мой код->Операция не разрешена после ResultSet Закрытая ошибка Netbeans MySQL Подключение

String x = (String) jComboBox1.getSelectedItem(); //jComboBox1 contains the name of current database selected 
String z = JOptionPane.showInputDialog("Please enter new name for Database"); //Where user enters the name for new database. 
new CustComm().setVisible(false); //Frame that carries the names of tables. 
     try{ 
     Class.forName("java.sql.DriverManager"); 
     Connection con = (Connection) 
     DriverManager.getConnection("jdbc:mysql://localhost:"+GlobalParams.portvar+"/",""+k,""+j); 
     Statement stmnt = (Statement) con.createStatement(); 
     String query = "use "+x; 
     stmnt.executeQuery(query); 
     String query2 = "show tables"; 
     ResultSet rs = stmnt.executeQuery(query2); 
     while (rs.next()){ 
     String dname = rs.getString("Tables_in_"+x); 
     if(CustComm.jTextArea1.getText().equals("")){ 
     CustComm.jTextArea1.setText(CustComm.jTextArea1.getText()+dname); 
     } 
     else{ 
      CustComm.jTextArea1.setText(CustComm.jTextArea1.getText()+"\n"+dname); 
     } 
     String y = CustComm.jTextArea1.getText(); 
     Scanner scanner = new Scanner(y); 
while (scanner.hasNextLine()) { 
     String line = scanner.nextLine(); 
     String query3 = "Create database "+z; 
     stmnt.executeUpdate(query3); 
     //alter table my_old_db.mytable rename my_new_db.mytable 
     String query4 = "RENAME TABLE "+x+"."+line+" TO "+z+"."+line; 
     stmnt.executeUpdate(query4); 
     String query5 = "drop database "+x; 
     stmnt.executeUpdate(query5); 
}}} 

    catch(Exception e){ 
     JOptionPane.showMessageDialog(this,e.getMessage()); 
    } 

Пожалуйста, помогите.

+0

вместо e.getMessage используйте e.printstacktrace и опубликуйте сообщение об ошибке. Также укажите, в какой строке он дает исключение – SpringLearner

+0

Привет и спасибо за ответ. Затем он выдает следующую ошибку (извините, ошибка слишком длинная, чтобы ее можно было разместить здесь, поэтому я дал ссылку) -> http://pastebin.com/wt7UwwuE Я не могу определить строку, вызывающую эту ошибку:/Даже попытался прочитать и после ошибка, которую он дал, но никакой помощи. Это был день с тех пор, как я столкнулся с этой ошибкой, и я опубликовал здесь, когда мои лучшие попытки удалить его. Поскольку я совершенно не знаком с java, я не могу представить такую ​​ошибку, вызывающую линейку: (Пожалуйста, помогите. И да, еще одна вещь, кодировка для этой цели начинается с строки 443 и заканчивается на 478. – Hoobla

ответ

0

Вы не должны выполнять новые запросы в инструкции Statement stmnt = (Statement) con.createStatement();, пока вы используете ResultSet, потому что это закроет ваш ResultSet.

По умолчанию только один объект ResultSet для объекта Statement может быть открыт одновременно. Поэтому, если чтение одного объекта ResultSet равно , чередующегося с чтением другого, каждый должен быть сгенерирован разными объектами Statement. Все методы выполнения в интерфейсе Statement неявно закрывают текущий объект ResultSet объекта, если существует открытый .

Вы должны создать 2 разных оператора: сначала для query2 и second для запросов 3-5.

Также лучше использовать PreparedStatement. Вы можете прочитать о разнице here.

+0

Спасибо! большая помощь – Hoobla

0

Вам нужно сделать эту работу с помощью кода? Вы изучали инструменты вроде Liquibase?

Смежные вопросы