它是一个java mysql应用程序我将连接字符串放在Connect.java中并从Registration.java中调用它,其设计模式是??
Connect.java
import java.sql.*;
import javax.swing.*;
public class Connect {
Connection con=null;
public static Connection ConnectDB(){
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hms_db","root","1474514745");
return con;
}catch(ClassNotFoundException | SQLException e){
JOptionPane.showMessageDialog(null, e);
return null;
}
}
}
Registration.java
con=Connect.ConnectDB();
con=Connect.ConnectDB();
Statement stmt;
stmt= con.createStatement();
String sql1="Select PatientID from PatientRegistration where PatientID= '" + txtPatientID.getText() + "'";
rs=stmt.executeQuery(sql1);
if(rs.next()){
JOptionPane.showMessageDialog( this, "Patient ID already exists","Error", JOptionPane.ERROR_MESSAGE);
txtPatientID.setText("");
txtPatientID.requestDefaultFocus();
return;
}
String sql= "";
pst=con.prepareStatement(sql);
pst.execute();
JOptionPane.showMessageDialog(this,"Successfully Registered","Patient",JOptionPane.INFORMATION_MESSAGE);
btnSave.setEnabled(false);
}
答案 0 :(得分:1)
命令模式
那是Command Pattern。这种模式背后的想法是允许传递功能。典型的Command类包含一个简单的execute方法。例如:
public interface Command {
public void execute();
}
public class MyCommand implements Command {
public void execute() {
System.out.println("This is the output from MyCommand");
}
}
当您不确定在运行时需要哪些功能时,这很有用,因此您可以创建命令池并根据需要选择它们,通常是通过某些外部配置。
此模式的另一个动机是它允许您在动态数据结构中将命令链接在一起,从而可以非常轻松地实现“撤消”功能。显然,这将在我们的示例中创建对revert()
方法的需求。
工厂模式
它也是Factory Pattern。此模式允许您从调用它的类中抽象出对象创建的详细信息。在您的情况下,您不希望您的应用程序遍布数据库连接详细信息的内部知识,因此您将其包装在Factory方法中,以便在需要时简单地生成连接对象。
注意强>
您的代码中存在SQL注入漏洞。这将允许用户插入自己的SQL并在数据库上运行未经授权的查询。
这样做会在您的应用程序中引入一个名为“Global State”的概念。这通常是不合需要的。相反,我建议使用依赖注入框架将此对象注入您的类。这样,没有代码需要知道您的数据库细节;它全部存储在配置文件中。
答案 1 :(得分:0)
我认为你最好使用Thread safe Singleton
,这是建立数据库连接和处理SQL的最好方法