2011-12-19 38 views
1

我使用下面的代碼來創建新的數據庫。如果給定的數據庫名稱與現有的數據庫名稱相同,則意味着需要刪除現有的數據庫,否則需要使用給定的名稱創建新的數據庫。我在創建新數據庫時出錯。在mysql中創建和刪除數據庫

package db1; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.io.*; 
import java.sql.*; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement; 
public class Main implements ActionListener 
{ 
    JTextField txt; 
    JButton create; 
    JFrame frame; 
    JPanel panel; 
    JOptionPane jop; 
    //Font font = UIManager.getFont("txt.font"); 
    public Main() 
    { 
     frame=new JFrame(); 
     panel=new JPanel(); 
     txt=new JTextField(10); 
     create=new JButton("create"); 
     create.setBounds(20, 200, 50, 40); 
    panel.add(txt); 
    panel.add(create); 
    create.addActionListener(this); 
    frame.add(panel); 
     // n.getContentPane().add(new textf()); 
     frame.setSize(440,310); 
     frame.setVisible(true); 
    } 
    public void actionPerformed(ActionEvent e) 
    { 
    Connection con = null; 
     try{ 
      Class.forName("com.mysql.jdbc.Driver"); 
      con = DriverManager.getConnection("jdbc:mysql://localhost:3306/vijay1","root","root"); 
      try{ 

       Statement st = con.createStatement(); 
           String database=txt.getText(); 
           st.executeUpdate("DROP DATABASE IF EXISTS "+database); 
           JOptionPane.showMessageDialog(frame,"EXISTING DATABASE DELETED"); 
           st.executeUpdate("CREATE DATABASE "+database); 
       JOptionPane.showMessageDialog(frame,"DATABASE CREATED"); 
      } 
      catch (SQLException s){ 
       System.out.println("SQL statement is not executed!"); 
      } 
     } 
     catch (Exception ea){ 
        ea.printStackTrace(); 
     } 
    } 
    public static void main(String[] args) 
    { 
     new Main(); 
    } 
} 
+0

安置自己的** **棧跟蹤(拋出異常),請。 – 2011-12-19 06:48:40

+0

另外,這是糟糕的設計。你應該有兩個類:一個用於UI,一個用於處理數據庫的東西。 'actionPerformed()'應該實例化數據庫操作類的實例(或調用靜態方法),傳遞新的數據庫名稱並告訴它運行更新。 – 2011-12-19 06:52:34

+0

另外,如果您的用戶提供了數據庫變量的值,那麼您將面臨SQL注入攻擊。在傳遞給MySQL之前,您應該過濾該值(例如,白名單正則表達式)。 – jackrabbit 2011-12-19 08:27:57

回答

0

試試這個作爲你內在的嘗試塊,希望這會有所幫助。

try 
    { 
    String database=txt.getText(); 
    String query = "if exists(select * from sys.databases where (name = ?))" 
        + "drop database " + database 
        + "create database " + database; 
    PreparedStatement statement = con.prepareStatement(query);    
    statement.setString(1, database); 


    statement.executeUpdate(); 
    JOptionPane.showMessageDialog(frame,"EXISTING DATABASE DELETED"); 

    JOptionPane.showMessageDialog(frame,"DATABASE CREATED"); 
    } 

問候