[英]How can we upgrade our Java 7 code which uses JDBC connection to Cassandra?
[英]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 table
的select * from table
,然后根据查询检查列名(您必须解析我猜查询字符串...)。
我相信它也适用于空表,但请注意,我尚未测试空表方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.