我对java很新,在我生命中的这一点上,在编程方面是一个最蠢的,所以这个问题可能有点傻但是这里有:我试图决定是否一个java我创建的应用程序应该紧密集成到数据库teir或更多的失去耦合。
比如说,我有一个我想要连接的数据库并从中获取一些数据我希望"做一些事情"使用该数据,例如在应用程序中显示它或将其用于其他目的。我应该做我的数据库连接并查询我的" main"我写的类的方法,或者我应该创建一个类来获取返回结果集的数据,然后我将使用它?
我假设后者,但它似乎也会产生一些复杂性,这对于使用起来会有点痛苦(或者至少考虑到我知道它会带来的痛苦)。例如,在下面的示例中,如果我在获取结果时遇到问题,我依靠DataAccessor类来记录问题。这就是woudl通常是如何完成的,或者我应该通过某种方式将错误消息人为地传递给返回值,或者我应该将错误消息传回给返回值,或者我应该使用&#34抛出"或者我应该使用完全不同的东西?最后,我想我认为我有一个数据访问层,可以选择"选择"和#34;插入"并且"更新"以便主类与断开连接的数据集协同工作,DataAccessor类处理连接,查询和更新数据库的详细信息。这是最好的方法吗?
感谢, ShermanTheCat
Class TheMainClass{
main {
DataAccessor myDA = new DataAccessor("bob", "bobspassord", "127.0.0.1"...);
Resultset myResults = myDA.getResultSet("select something from somethign");
//do something here with myresults looping through the resultset
}
}
Class DataAccessor{
String dbUser;
String dbPwd;
String dbServer;
...
public DataAccessor(int dbType, String dbUser, String dbPwd, String dbServer....){
dbUser=dbUser;
dbPwd=dbPwd;
dbServer=dbServer;
...
}
public ResultSet getResultSet(String queryString){
ResultSet queryResults = null;
try{
logWriter.logMessage("INFO", "SelectString: " + selectString);
if (dbType==1){
Class.forName("oracle.jdbc.OracleDriver");
} else if (dbType==2) {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
//create connection
Connection dbConn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword);
// execute the query to get a result set
Statement dbQuery = dbConn.createStatement();
//populate the result set
queryResults = dbQuery.executeQuery(selectString);
} catch (Exception e) {
logWriter.logMessage("DEBUG", "Error creating connection or populating
result set:" + e);
}
return queryResults;
}
}
答案 0 :(得分:0)
如果你是一个业余爱好者和编码学习,或者正在将一个小工具放在一起以快速解决问题,这种方法很好。如果您正在专业地这样做或者正在尝试解决像构建Web服务这样的更大问题,那么您应该:
答案 1 :(得分:0)
您想要记录捕获的错误,这都是主观的。尽管如此,我个人的方法是在我的签名方法SQLException
中声明Exception
(而不是getResultSet
),以便我可以自由地操纵异常和日志消息
答案 2 :(得分:0)
我认为典型的方法是抛出一个异常并让#34; TheMainClass"处理它。
如果您不希望数据库相关的例外情况发生,那么"已知"通过" TheMainClass"你抓住了数据库异常,又引发了另外一个与业务相关的事情。
您还应该添加一个finally语句来关闭连接。