这是让我头疼的代码:
public List<String> listColumnsForTable(String tableName) throws SQLException {
List<String> columns = new ArrayList<String>();
DatabaseMetaData metadata = _connection.getMetaData();
ResultSet resultSet = metadata.getColumns(null, null, tableName, null);
while (resultSet.next())
columns.add(resultSet.getString("COLUMN_NAME"));
return columns;
}
这段代码在 SQL Server 上运行良好(我没有用 MySQL、Oracle 或其他检查过),但我需要在内存数据库上运行一些集成测试。我尝试过的所有数据库(h2、hsqldb 和 derby)都失败了。
这是github 上的链接。
如果您想要完整的项目(包含对 h2、hsqldb、derby 和 sql server 的测试),请执行以下操作:
git clone git://github.com/sensui/InMemoryColumns.git
cd InMemoryColumns
gradlew
所有依赖项将自动下载。如果要检查库版本,请查看build.gradle
脚本。
现在在您最喜欢的 IDE(eclipse 或 idea)中导入项目。
测试在DatabaseMetadataCheckerTests
类 (canListColumnsForTable
和canCheckIfColumnsExistInTable
) 中可用。
通常你不应该修改这些。我创建了4 个测试类,它们为每个内存数据库提供连接详细信息,您需要运行它们(这DatabaseMetadataCheckerTests
是抽象的,所以您不运行它)。
注意:
当/如果您找到解决方案而不是该特定数据库的测试将通过。DatabaseMetadataCheckerTests
只需扩展类并提供连接详细信息(检查其他测试),您就可以轻松尝试其他数据库,如 Oracle 或 MySQL 。
问题已解决
表名和列名应该大写。检查此提交以获取详细信息。