在java中,在与数据库的连接之间切换的最佳方式是什么?
我正在用java开发一个应用程序,它必须不断地执行对远程数据库的查询,但是,如果这种连接失败,必须在本地sqlite数据库上执行相同的查询。 我试过这样做:在java中,在与数据库的连接之间切换的最佳方式是什么?,java,jdbc,Java,Jdbc,我正在用java开发一个应用程序,它必须不断地执行对远程数据库的查询,但是,如果这种连接失败,必须在本地sqlite数据库上执行相同的查询。 我试过这样做: public static Connection connect() { Connection c = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); c = DriverManager.getCon
public static Connection connect() {
Connection c = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
c = DriverManager.getConnection("jdbc:mysql://192.168.1.30/database", "root", "");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (com.mysql.cj.jdbc.exceptions.CommunicationsException e) {
//Here I get the connection to sqlite in case of exception
c = SQLiteDb.sqliteInit();
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return c;
}
有没有其他更干净的方法来处理这些情况?首先,您应该使用连接池,否则每次操作都会创建一个超级昂贵的新连接。 Java有许多可用的连接池。例如,Hikari提供了一个非常好的连接池,还有C3P0和DBCP 现在,有一个称为数据源的抽象,它可能会根据您使用的基础设施而使用 我不建议使用普通的JDBC,因为它的级别低而且容易出错。 看看JOOQ或MyBatis 现在,为了满足您对回退的需求,您可以保留两个带有连接池的数据源,并以一种在调用mysql失败时使用sql lite的方式组织流。然而,请注意,如果mysql宕机,那么每次给它打电话可能是没有意义的,也许它是在试图恢复 以断路器模式为例,它将解决这个问题 除此之外,我觉得这个问题太宽泛了,所以更倾向于非常具体的技术问题。这些答案有助于克服一个具体的技术难题。如果你有这样的想法,请随时提问: