【问题标题】:Create a class to connect to any database using jdbc创建一个类以使用 jdbc 连接到任何数据库
【发布时间】:2012-06-06 13:38:47
【问题描述】:

我正在尝试设计一个 Java swing 应用程序。我想试验并使用 MVC 类型的架构,其中我的 UI 与实际逻辑分离以访问数据并连接到数据库。我决定我需要创建一个自定义类,其中包含连接到数据库的所有逻辑,然后在我的操作事件中为任何特定的表单和按钮简单地调用该类的方法。这样我可以切换数据库,我需要做的(如果我有一个包含许多表单的大型代码库)就是更改 JDBC 连接字符串以连接到 oracle 而不是 MySQL。到目前为止,我有连接到数据库的代码,但我正在尝试弄清楚如何将其设为一个类。

try
     {
         Class.forName("com.mysql.jdbc.Driver");
         Connection con=(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/prototypeeop","root","triala");
         Statement stmt=con.createStatement();
         ResultSet rs=stmt.executeQuery(sql);

然后我将从我的连接类的成员函数返回结果集以进行处理并显示在屏幕上。

【问题讨论】:

  • 使用DAO 模式。
  • 那篇文章对我来说似乎太复杂了......我只想用上面的代码创建我自己的类......我有点像初学者,需要更多的指导

标签: java jdbc


【解决方案1】:

只需创建一个单独的类并委托给他获取与数据库的连接:

public class ConnectionManager {
    private static String url = "jdbc:mysql://localhost:3306/prototypeeop";    
    private static String driverName = "com.mysql.jdbc.Driver";   
    private static String username = "root";   
    private static String password = "triala";
    private static Connection con;
    private static String urlstring;

    public static Connection getConnection() {
        try {
            Class.forName(driverName);
            try {
                con = DriverManager.getConnection(urlstring, username, password);
            } catch (SQLException ex) {
                // log an exception. fro example:
                System.out.println("Failed to create the database connection."); 
            }
        } catch (ClassNotFoundException ex) {
            // log an exception. for example:
            System.out.println("Driver not found."); 
        }
        return con;
    }
}

然后在如下代码中获取连接:

private Connection con = null;
private Statement stmt = null;
private ResultSet rs = null;

con = ConnectionManager.getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery(sql);

【讨论】:

  • 谢谢你,伙计......你太酷了......另一个问题是如果我必须将我的数据库从 mysql 更改为 postgress,我只需要更改驱动程序名称和我的字符串 url类,然后仍然在我的动作事件中使用相同的调用?抱歉新手问题
  • 这个类也是数据对象访问层吗?我猜它如何适合模型视图控制器
  • 嘿,我正在制作这个类,但我得到一个 classnotfound 异常从未在相应的 try 语句的主体中抛出?这与我的 try and catch 块有关,我想知道问题出在哪里。对于 try 错误,它说 ....unreported excpetion java.lang.classnotfound excpetion 必须在抛出之前被捕获或声明?对于明显的问题,我深表歉意,但我也是尝试捕捉障碍的新手。我知道它与我没有声明此类错误有关,因为 SQLException 已在 java.sql 包中声明,因此为什么我没有收到错误
  • @rambokayambo 类 ConnectionManager() 的部分已正确定义,您只需根据您的数据库提及属性值,对于第二部分,您只需提及里面的 classname.methodName主要方法(),这就是我所做的。 public static void main(String[]args){ ConnectionManager. getConnection()} 因为该方法被声明为 public static 您可以只编写 className .methode() ,而无需为该方法声明对象,我的意思是这对我有用。记得为数据库添加外部库
  • 为什么不抛出异常,例如ex.printStackTrace(); 而不是使用System.out.println();?连接失败时,会显示系统输出 println,但此时代码在空指针上失败。
【解决方案2】:

您可以尝试使用MySQL JDBC Utilities API 进行 MySQL 连接。

此 API 提供了非常酷的功能,也可以满足您的要求!

【讨论】:

    【解决方案3】:

    两种方法可以实现

    1. 重写 Spring 的 AbstractRoutingDataSource 类的 determineCurrentLookupKey() 方法。

    2. 您可以创建一个基于系统返回 Connection 的类。

    【讨论】:

      【解决方案4】:

      你可以使用像Hibernate这样更高级的东西,或者如果你的数据库使用很简单,那么你可以试试Commons DbUtils

      礼仪连接码

      String db = "jdbc:h2:mem:;INIT=runscript from 'classpath:/prototypeeop.sql'"; 
      //for H2 in-memory database:
      Connection DriverManager.getConnection(db);
      
      

      请记住Commons DbUtils 中的核心类和接口是QueryRunnerResultSetHandler

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-05
        • 1970-01-01
        • 1970-01-01
        • 2021-03-10
        • 1970-01-01
        • 2015-12-30
        • 2015-02-13
        相关资源
        最近更新 更多