Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
上个月关闭。
我正在用Java开发应用程序,该应用程序必须不断执行对远程数据库的查询,但是,如果这种连接失败,则必须在本地sqlite数据库上执行相同的查询。
我已经尝试过这种方式:
是否有另一种更清洁的方式来处理这些情况?
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
上个月关闭。
我正在用Java开发应用程序,该应用程序必须不断执行对远程数据库的查询,但是,如果这种连接失败,则必须在本地sqlite数据库上执行相同的查询。
我已经尝试过这种方式:
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关闭,则每次调用它可能都没有意义,也许是它试图恢复健康。
以电路断路器模式为例,它将解决此问题。
除此之外,我觉得这个问题太广泛了,所以SO更适合非常具体的技术问题。答案有助于克服具体的技术难题。如果您提出这样的建议,请随时提出:)
10-06 15:23