【问题标题】:How to pass a connection code?如何传递连接代码?
【发布时间】:2012-01-15 01:42:36
【问题描述】:

我正在使用 JDBC,如何将我的连接代码实际传递给其他对象?这样继续编码就不会那么麻烦了,如果我需要关闭数据库连接,是否需要创建其他对象?这是我的代码

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import javax.sql.DataSource;

public class DisplayUsers {

    ResultSet resultSet = null;
    Statement statement = null;
    Scanner input = new Scanner(System.in);
    DataSource ds = null;



    public void showAll() {

        System.out.println("Search User: ");
        String user = input.nextLine();

        String query = "Select * from user";
        try {
            resultSet = statement.executeQuery(query);
            ResultSetMetaData metadata = resultSet.getMetaData();
            int columns = metadata.getColumnCount();
            while(resultSet.next()){
                for(int i = 1 ; i<=columns;i++){
                    System.out.printf("%-8s\t",resultSet.getObject(i));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这是我的连接器代码

import java.sql.*;

public class Jdbc {

        public void dbConn(){
            final String url = "jdbc:mysql://localhost:3306/payroll";
            Connection conn = null;
            try{
                 Class.forName("com.mysql.jdbc.Driver");
                 conn = DriverManager.getConnection(url,"root","123192");  
            }catch(Exception e){
                e.printStackTrace();
            }
        }
}

【问题讨论】:

    标签: java mysql database jdbc connection


    【解决方案1】:

    您通常会根据需要获取连接,执行 SQL,然后将其关闭。 如果您使用的是连接池,您通常会从池中请求它并在完成后返回池中。

    大多数时候 Connection 对象是短期的,仅用于单个事务。 打开的连接占用了数据库资源,您不想让这些打开超出需要。 没有什么能阻止你在其他物体周围传递这些,但要小心......

    【讨论】:

      【解决方案2】:

      最好的方法是使用连接池。如果您正在编写 Java EE 应用程序,您可以在配置中创建池(在 glassfish 中,您可以使用管理控制台)。服务器会将此池(通过 DataSource)绑定到您指定的 JNDI 名称(例如“jndi/mydb”)。

      所以在代码中获取连接非常简单:

      InitialContext ctx = new InitialContext();
      //Application Server will automatically bind new InitialContext() call to its 
      //own context (where your DataSource is located).
      DataSource ds = ctx.lookup("jndi/mydb") 
      

      您可以将这个 DataSource 传递到任何地方,并像 ds.getConnection() 一样简单地获取连接,永远不要关闭它(因为它已被合并和重用)。

      附:使用 DriverManager 作为一种获取连接的方式适用于对性能和可扩展性没有要求的小型控制台应用程序。

      【讨论】:

      • 这不是 java EE,这是独立的
      猜你喜欢
      • 2021-10-03
      • 2013-11-19
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 2023-03-29
      • 1970-01-01
      • 2016-07-22
      相关资源
      最近更新 更多