【发布时间】:2019-09-27 17:37:58
【问题描述】:
我正在使用带有 JDBC 的 Java Spring 应用程序查询本地 MySQL 数据库。我的应用程序使用SimpleDriverDataSource() 构造函数配置了一个DataSource 对象。然后它从该DataSource 中创建一个JDBCTemplate 对象。
它应该通过该模板对象在 MySQL 数据库上运行查询,但查询由于某些未知原因而失败!我认为这可能与我的DataSource有关。
以下是相关的代码。首先,我像这样配置一个数据源对象:
public DataSource getDataSource() {
DataSource dbsrc = null;
try {
dbsrc = new SimpleDriverDataSource(new com.mysql.jdbc.Driver(), "jdbc:mysql://localhost/test?useSSL=false", "root", "");
} catch (SQLException e) {
e.printStackTrace();
}
return dbsrc;
}
在调试中,dbsrc 似乎已被定义。它是否被正确定义是另一回事。这是 Eclipse 在定义后所说的剪辑:
dbsrc definition
我认为 connectionProperties 是 null 有什么不对的地方。
这是一个失败的查询示例:
final List<String> methods = jdbcTemplate.query(methodsQuery, new RowMapper<String>() {
@Override
public String mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getString("PLANETDISCMETH");
}
});
当我单步执行该语句时,它进入jdbcTemplate.query() 方法并似乎在某个我看不到的步骤抛出异常(Eclipse 告诉我在项目中找不到源文件)。
任何帮助将不胜感激,我很乐意提供任何其他必要的信息。谢谢!
【问题讨论】:
-
你能发布你的异常的堆栈跟踪吗?你用的是spring的SimpleDriverDataSource吗?
-
@Daniele 感谢您的回复!由于某种原因,它实际上并没有显示堆栈跟踪。事实上,它甚至可能不会抛出一个实际的异常。我所知道的是,由于调试器在该调用中暂停,因此执行被卡在
query()调用中的某个地方。是的,我正在使用 SimpleDriverDataSource 来定义我的 DataSource 对象,如第一个代码 sn-p 所示。然后使用该 DataSource 构造我正在运行查询的 JDBCTemplate 对象。 -
如果你没有堆栈跟踪,你怎么知道你的查询失败了。如果没有异常信息或对您的问题的清晰描述,我们真的无法为您提供帮助。
-
可能驱动库抛出异常,然后这个异常被spring库捕获。在这种情况下,您不想暂停执行。如果您使用的是 Eclipse,请参阅此链接以避免暂停:stackoverflow.com/questions/3685294/…。如果然后spring爆炸,它应该报告原因
-
@MarkRotteveel 感谢您的回复!我知道它失败了,因为查询调用之后的代码永远不会执行,RowMapper 中的代码也不会执行。我认为执行在查询调用内停止,因为抛出了一些异常。我看不到堆栈跟踪,因为异常是在 JDBCTemplate 对象内部处理的。我真希望我能明白为什么它失败了!但是我还没有找到方法。
标签: java mysql eclipse maven jdbc