【问题标题】:How to use the mysql connection on multiple classes?如何在多个类上使用 mysql 连接?
【发布时间】:2013-12-14 20:39:42
【问题描述】:

我对 java 应用程序和 mysql 之间的连接有一些问题。
这是我的文件(这个文件很好用):

import java.sql.*;

import javax.swing.JFrame;

public class MysqlConnect{

public static void main(String[] args) throws SQLException {

    Connection conn = null;
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "jdbctutorial";
    String driver = "com.mysql.jdbc.Driver";
    String userName = "birthday"; 
    String password = "123456";
    try {
        Class.forName(driver).newInstance();
        conn = DriverManager.getConnection(url+dbName,userName,password);
        System.out.println("Connected to the database");
    } catch (Exception e) {
        e.printStackTrace();
    }


}
}

是否可以“分离”主连接和 mysql 连接?? 我的想法是这样的:我有 MysqlConnection 文件和另一个 GUI 文件。 在 GUI 文件中,我有一个按钮(添加),每当我单击此按钮时,一些数据都会存储到数据库中。我的问题是我不知道如何运行查询,因为我需要 Statement 变量、Connection 变量等..我想做什么?在同一个文件中执行 mysqlConnection 和 GUI?我的另一个想法是做一个 MysqlConnection 类型的对象并使用该对象。问题是:如果我删除 (public void main .....)我在 try and catch 时出错。

对不起,如果我的英语不好,但我希望我能说清楚。 提前致谢 。

【问题讨论】:

  • 在尝试使用数据库之前,学习语言/编程的基础知识可能是个好主意?

标签: java mysql swing connection


【解决方案1】:

我从您的问题中了解到,您想要制作一个应用程序,在 GUI 中显示来自数据库的数据。也许您应该研究像 MVC(模型-视图-控制器)这样的架构,其中您将模型作为数据库中数据的表示,并将视图作为模型的图形表示。

由于没有想到应用某种架构,我建议您先研究一下,做一些研究,然后实施您的系统。在研究 MVC 架构时,我建议您从 here 开始。这确实是你能想到的最简单的例子。

关于您的数据库连接:您的设置看起来不错,但首先,将它放在一个单独的类中并为其添加查询功能。在实现该部分时,this 会派上用场。之后,您可以让控制器调用数据库以在按下按钮时操作模型,这将更新 MVC 架构中的视图 (GUI)。

所以,不要将您的数据库连接和您的 Main 或 GUI 放在同一个类中!这是一种糟糕的代码风格,违反了Single Responsibility Principle,会给你以后的开发带来更多麻烦!相反,请使用适当的架构

如果您需要进一步的帮助,请随时提出!我最近研究了这种东西,做了一个这样的应用。

【讨论】:

    【解决方案2】:

    嗨,RvanHeest 非常感谢您抽出宝贵的时间。我尝试这样做:
    MysqlConnect.java

    public class MysqlConnect{
    
    
        public Connection conn = null;
        public String url = "jdbc:mysql://localhost:3306/";
        public String dbName = "jdbctutorial";
        public String driver = "com.mysql.jdbc.Driver";
        public String userName = "birthday"; 
        public String password = "123456";
        public String query="Select * From Person";
        public Statement stmt;
        public ResultSet rs;
    
    
        public void crearedatabase(){
    
            try {
    
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url+dbName,userName,password);
            System.out.println("Connected to the database");
            Statement stmt = conn.createStatement();
    
        } catch (Exception e) {
            System.out.println("Error!!!");
        }
    
    
        }
    

    } 在我的 Gui 类中:
    图形用户界面文件:

      .................
       ................
     MysqlConnect mysqlitem = new MysqlConnect();
           mysqlitem.crearedatabase();
            String query = "INSERT INTO persons("
                + "id"
                + "name"
                + "lastname"
                + "date) "
                + "VALUES(null,Maxim,Alexandru-Vasile,1990-12-28)";
    
            try{
                mysqlitem.rs=mysqlitem.stmt.executeQuery(query);
            }
            catch(Exception e1){
                System.out.println("Eroare");
            }
    

    关于“mysqlitem.rs=mysqlitem.stmt.executeQuery(query);”我有一个 Exeption 错误,我不知道如何解决.. 再次非常感谢!!!

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。

      我发现根本原因是您两次声明了 stmt 变量。

      您的代码应如下所示:

      public class MysqlConnect{
          public Connection conn = null;
          public String url = "jdbc:mysql://localhost:3306/";
          public String dbName = "jdbctutorial";
          public String driver = "com.mysql.jdbc.Driver";
          public String userName = "birthday"; 
          public String password = "123456";
          public String query="Select * From Person";
          public Statement stmt;
          public ResultSet rs;
      
      
          public void crearedatabase(){
              try {
                  Class.forName(driver).newInstance();
                  conn = DriverManager.getConnection(url+dbName,userName,password);
                  System.out.println("Connected to the database");
                  stmt = conn.createStatement();
              } catch (Exception e) {
                  System.out.println("Error!!!");
              }
          }
      }
      

      注意对第 18 行“stmt = conn.createStatement();”的更改

      【讨论】:

        【解决方案4】:

        我编写这段代码是为了在一个单独的 java 文件上创建一个单独的 dbconnection 类,它对我来说工作正常。

        public class dbConnection{
        
         public Connection getConnection()
         {
             String url = "jdbc:mysql://localhost:88/shop";
             String username = "root";
             String password = "";
             Connection con = null;
             try 
             {
                Class.forName("com.mysql.jdbc.Driver");
             } 
             catch (ClassNotFoundException e1) 
             {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        
             try 
             {
                 con = DriverManager.getConnection(url, username, password);
             } 
             catch (Exception e) 
             {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
            return con;
            }
        }
        

        // 在 DIFF 类上使用上述连接

        -----------
        Connection con=new dbConnection().getConnection();
        ------------   
        

        感谢 StackOverFlow...

        【讨论】:

          【解决方案5】:
          public class LoadDriver {
          
          public static void sqlDriver(String[] args) throws InstantiationException,
                  IllegalAccessException, ClassNotFoundException {
              // TODO Auto-generated method stub
          
              try {
          
                  Class.forName("com.mysql.jdbc.Driver").newInstance();
          

          在你的主课中

          try {
          LoadDriver.sqlDriver(null);
          

          【讨论】:

            猜你喜欢
            • 2012-09-10
            • 1970-01-01
            • 2017-08-08
            • 1970-01-01
            • 1970-01-01
            • 2012-02-15
            • 1970-01-01
            • 2010-09-21
            相关资源
            最近更新 更多