2011-12-19 7 views
1

次のコードを使用して新しいデータベースを作成します。指定されたデータベース名が既存のデータベース名と同じ場合は、既存のデータベースを削除する必要があることを意味します。それ以外の場合は、指定した名前で新しいデータベースを作成する必要があります。新しいデータベースを作成する際にエラーが発生しました。mysqlでのDBの作成と削除

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

**あなたの**スタックトレースを投稿(例外がスロー)してください。 –

+0

また、これは悪い設計です。 UI用とデータベース用の2つのクラスが必要です。 'actionPerformed()'は、データベース操作クラスのインスタンスをインスタンス化(または静的メソッドを呼び出す)し、新しいデータベース名を渡し、更新を実行するよう指示します。 –

+0

また、ユーザーがデータベース変数の値を提供する場合は、SQLインジェクション攻撃が可能です。値をMySQLに渡す前に、その値をフィルタリングする(たとえば、正規表現をホワイトリストする)必要があります。 – jackrabbit

答えて

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"); 
    } 

よろしく

関連する問題