我通常使用SQLDeveloper浏览数据库,但我无法使用hsqldb,我不知道哪些表已经创建...我想这是供应商特定的问题,而不是普通的sql,但重点是:我如何看到表格,以便我可以删除/更改它们?
我正在寻找一个简单的DB2查询,可用于测试池中的数据库连接是否仍然有效.它需要是一个通用查询,无论存在哪个数据库都会执行.
对于其他数据库服务器,我使用了'SELECT 1'或'SELECT version();'
什么是DB2的等价物?
谢谢!
我正在编写一些单元测试,以确保我的应用程序中的所有内容都正常工作,并认为编写一个简短的测试脚本以确保mySQL连接按预期工作是个好主意.
有没有我可以运行的查询总是输出一些我可以验证连接的甜点,而不必考虑mySQL数据库中最终存储的数据?
"无法验证新建立的连接"错误发生.
我用Google搜索并阅读与此错误相关的每个问题.但是没能找到解决方案.
我正在使用spring-boot-starter-data-jpa.
它与Postgresql没有任何错误.但我想使用嵌入式数据库!
application.properties:
#We don't need JMX here - disabling it allows for faster startup
spring.jmx.enabled=false
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.driver-class-name=org.hsqldb.jdbcDriver
spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect
spring.datasource.url=jdbc:hsqldb:file:${user.home}/db/data;user=sa;password=123;
spring.datasource.username=sa
spring.datasource.password=123
Run Code Online (Sandbox Code Playgroud)
MainApplication类的标题:
@ComponentScan(value = {"db", "app", "ui"})
@EnableJpaRepositories(basePackages = "db")
@EntityScan(basePackages = "db")
@EnableTransactionManagement
@SpringBootApplication
Run Code Online (Sandbox Code Playgroud)
仅当我使用嵌入式数据库(至少是Derby,HSQLDB)时才抛出此错误,而不是总是如此.有时它会正常启动,查找并保存实体而不会出现错误,但有时会在等待一段时间后或成功交易后立即发生.
我怎么解决这个问题?
我们已经开发了一个 Springboot Java 应用程序,我把它放在一个用于开发环境的 docker 容器上。
Spring 启动版本为 1.5.6
使用的 DB 是 SQL server 2016,它再次位于 docker(windows 容器)上。
问题: 每当我重新启动 SQL DB 容器时,应用程序就会开始出现此错误。
2018-10-29 16:00:08,993 ERROR pool-13-thread-1 org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in scheduled task.
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:447)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:277)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at …Run Code Online (Sandbox Code Playgroud) 我们在Windows Server 2008 R2上运行的Apache Tomcat 7.0.54上运行了一个JSF2.0 Web服务器.我们在运行它的机器上有2个SQL服务器,另一个托管我们的库存软件.我们网页的一部分是对要添加的PartNumbers的验证.在阅读了连接池是与SQL服务器交谈的最佳实践之后,我们创建了一个并使用它来对我们的库存软件进行一些验证.
因为我想要一种方法来检查连接池的运行状况,所以我创建了一个带有ViewScoped辅助bean的测试页面,该辅助bean验证了2个已知的好的部件号.今天是本周第二次出现错误信息"Connection is closed".由于我是新来的conenction池,似乎无法找到任何有关这方面的信息,我感到困惑的是我们没有正确设置.我刚刚重置Apache服务器,它已备份并运行.所以..为了创建我的连接池,我在应用程序的META-INF/context.xml中添加了一些代码.
<Resource type="javax.sql.DataSource"
name="jdbc/FOODB"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://Foobar\Inventory;databaseName=FooInventory;user=johnDoe;password=astrongpassword;"
/>
Run Code Online (Sandbox Code Playgroud)
我必须使用ConnectionPool的基本概念是我有一个名为SqlAccessCommand的接口.它或多或少是适配器模式.在我的测试页面中,我使用RunUnsafe方法,以便我可以显示错误消息.所以这是RunUnsafe方法.
protected static DataSource getDataSource() throws NamingException {
Context context = (Context) new InitialContext().lookup("java:/comp/env");
DataSource ds = (DataSource) context.lookup("jdbc/FOODB");
return ds;
}
public static <T> T RunUnsafe(SqlAccessCommand<T> command) throws NamingException, SQLException {
try {
DataSource ds = getDataSource();
try (Connection connection = ds.getConnection();
PreparedStatement statement = connection.prepareStatement(command.getSqlStatement())) {
command.prepareStatment(statement);
try (ResultSet rs = statement.executeQuery()) {
return command.getResults(rs);
}
}
} catch (NamingException | …Run Code Online (Sandbox Code Playgroud) java ×3
spring-boot ×2
sql ×2
db2 ×1
hsqldb ×1
jsf ×1
mysql ×1
postgresql ×1
spring ×1
sql-server ×1
testing ×1
tomcat ×1
unit-testing ×1