Oracle&java动态'Order by'子句

zig*_*ggy 2 java sql oracle jdbc

我试图在java中构建一个动态的SQL查询(如下所示)

    sqlStr = "Select * " +
        "from " + tableName

    if(tableName!=null){
        if(tableName.equals("Table1"){
            sqlStr = sqlStr.concat("order by city desc");
        }else if(tableName.equals("Table2"){
            sqlStr = sqlStr.concat("order by country desc");
        }else if(tableName.equals("Table3"){
            sqlStr = sqlStr.concat("order by price desc");
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在我想要做的是添加一个最终的'else'语句,该语句将根据表中是否包含名为'custID'的列来对查询进行排序.将有几个表与该列,所以我想按custID排序那些列.(而不是为每个具有该列名的表提供数百个额外的if语句.)这可能吗?我见过人们使用'解码'功能,但我不知道如何在这里使用它.

Jig*_*shi 6

使用DatabaseMetaData获取表信息.

您可以使用getTablexxx()getColumnxx()方法获取表信息.

Connection conn = DriverManager.getConnection(.....);
DatabaseMetaData dbmd = conn.getMetaData();
dbmd.getxxxx(); 
Run Code Online (Sandbox Code Playgroud)

注意:您在代码前面的代码中忘记了空格ORDER BY.