繁体   English   中英

如何检查Java JDBC代码使用正确的列名?

[英]How can I check that Java JDBC code uses the right column names?

我有一个端到端测试的测试套件。 他们应该捕获SQL语句中的错字,错误的表或列名(任何与数据库架构和Java代码不同的东西),或者缺少数据库权限。 我不想依赖数据库中的数据(设置起来太复杂了); 这只是一个基本测试。

import java.sql.*;
import org.junit.Test;

public class TypoTest {
    private Connection getConnection() throws Exception {
        String connectionString = "jdbc:postgresql://127.0.0.1:5432/db";
        String driverClassName = "org.postgresql.ds.PGConnectionPoolDataSource";
        Class.forName(driverClassName).newInstance();
        return DriverManager.getConnection(connectionString, "robert", "");
    }

    @Test
    public void runQuery() throws Exception {
        try (Connection connection = getConnection();
             PreparedStatement ps = connection.prepareStatement("SELECT relname FROM pg_catalog.pg_class");
             ResultSet data = ps.executeQuery()) {
            while (data.next()) {
                data.getString("relname");
            }
        }
    }
}

当我运行上述测试时,如果我在SELECT语句中有错字,它将失败。 (很好。)如果我在data.getString("typo here")的列名中有错字,如果查询的表中没有数据,则不会被捕获,因为这样就永远不会进入循环。 为了简化测试(设置),我不想先将数据插入表中。

我想我可以将列名称设置为常量,然后将我的代码干燥 ,以解决该问题。

但是,我想知道是否有更简单的方法...我很懒,不想编辑所有查询。 有没有更好的方法对SQL进行单元测试?

我正在使用Postgres 9.5和JDBC 4。

我想您已经找到了答案,但是仅为了回答,您可以尝试使用result-set-metadata ,方法是使用select * from tableselect * from table ,然后根据查询检查列名(您必须解析我猜查询字符串...)。

我相信它也适用于空表,但请注意,我尚未测试空表方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM