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();
    }
}
1
スタックトレースを送信してください(例外がスローされます)。
追加された 著者 Buhake Sindi,
また、これは悪いデザインです。 UI用とデータベース用の2つのクラスが必要です。 actionPerformed()は、データベース操作クラスのインスタンスをインスタンス化(または静的メソッドを呼び出す)し、新しいデータベース名を渡し、更新を実行するように指示する必要があります。
追加された 著者 Visionary Software Solutions,
swingxタグを削除するように編集しました(私がどこにでも見るのが大好きですが、これは完全に無関係です:-)
追加された 著者 kleopatra,
また、ユーザーがデータベース変数の値を提供している場合、SQLインジェクション攻撃は広く行われています。値をMySQLに渡す前に、その値をフィルタリングする(たとえば、正規表現をホワイトリストする)必要があります。
追加された 著者 jackrabbit,

1 答え

あなたの内側のtryブロックとしてこれを試してください、これが助けてくれることを望みます。

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

よろしく

0
追加された