如何传递连接代码?
Posted
技术标签:
【中文标题】如何传递连接代码?【英文标题】: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();
【问题讨论】:
【参考方案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,这是独立的以上是关于如何传递连接代码?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Java HashMap 传递给自定义 Mule 连接器?
如何在 EF6 中将连接字符串传递给 DataContext