【问题标题】:How to use returned String value from a method in SQL query如何在 SQL 查询中使用方法返回的字符串值
【发布时间】:2019-02-27 12:20:03
【问题描述】:

我有getSites() 的一种方法,它返回 csv 文件中的所有站点名称。现在我想在 SQL 查询中使用返回的字符串变量。这是getSites() 方法:

public class ReadCSVFile {

    public static String getSites() {
        // .csv comma separated values
        String csvFile = "C:\\data.csv";
        BufferedReader br = null;
        String line = "";
        String sites = "";

        try {
            br = new BufferedReader(new FileReader(csvFile));
            while ((line = br.readLine()) != null) {
                sites = sites + line + ",";
            }
            sites = sites.substring(0, sites.length() - 1);
            // System.out.println(sites);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return sites;
    }
}

这是我想在这个 SQL 查询中使用的值:

String query = select NodeID, Site_Name from csproperties where Site_Name IN ("+sites+") ORDER BY Site_Name

所以,当我在("+sites+") 中传递字符串的值时,查询变量将被触发,并基于 site_names 我将获得 API 输出。

现在我在 com.gds.service 包下创建了一个 GFNSService 的类文件,我在其中创建了一个 API 的方法 getRigStatistics 并且在此方法下我想要一个代码来获取此 ("+sites+") 下的站点值sql查询如下-

@GET

@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Path("/getRigStatistics") 公共列表 getRigStatistics(@HeaderParam("authorization") String authString) { logger.info("API 方法 getRigStatistics 调用。");

        if (!isAppDynamicsUserAuthenticatedRigStatistics(authString)) {
            throw new WebApplicationException(Response.status(Response.Status.UNAUTHORIZED).build();
        }

List rigList = new ArrayList();

        String query = "String query = select NodeID, Site_Name from csproperties where Site_Name IN ("+sites+") ORDER BY Site_Name";.....and so on  code to map properties.....

所以,基本上我想要一个代码,在其中我应该在 getRigStatistics 方法中创建一个方法,以将站点值放入(“+sites+”)。

【问题讨论】:

  • sql 不是 Java。您是在为 java 部分苦苦挣扎,还是在为 sql 苦苦挣扎?
  • 虽然我在 java 部分苦苦挣扎,但我想创建一个将值放入该块(“+sites+”)的方法
  • 你现在得到了什么?
  • 不,我没有得到任何值,但我想知道如何编写一个方法来从站点获取值并返回该方法的值应该进入 ("+sites "+)。
  • 正确的查询是这样的 - String query = select NodeID, Site_Name from csproperties where Site_Name IN ("+sites+") ORDER BY Site_Name

标签: java


【解决方案1】:

我猜getSites() 返回的字符串如下所示:

String sites = "site1,site2,site3,site4"; 

你不能在 SQL 查询中使用它,因为它的语法应该是这样的:

SELECT .... IN ('site1','site2','site3','site4') ...;

要从您的方法中获取这样的字符串,一种可能的方法可能是更改:

 return sites;  

return Stream.of(sites.split(",")).collect(Collectors.joining("','", "'", "'"));

或者,如果您不想使用流,请更改

String sites = "";           to    String sites = "'";
sites = sites + line + ",";  to    sites = sites + line + "','";
sites = sites.substring(0, sites.length() - 1); to  sites = sites.substring(0, sites.length() - 2);
and keep return sites; 

【讨论】:

  • 先生,我想向您展示我的原始代码......我想你有我的问题......你能建议我如何向你展示我的代码......
  • @ManuSPanicker 只需编辑您的问题并发布您的代码,以便其他人可以看到它。看到的人越多,你得到的帮助就越多。如果您的代码中有一些敏感数据,只需将其删除或用点屏蔽......
  • 嗨,厄立特里亚人,我在输出中得到了 Central Azeri'、'East Azeri' 这样的字样,开头缺少一个引号......但我想要这种格式的 'Central阿塞拜疆','东阿塞拜疆'......等等
  • 知道了,先生,这是我的错误,我没有从 String sites = "" 更新变量; to String sites = "'";
  • 得到了解决方案,我只是将get方法返回变量传递给String sites.....String sites = ReadCSVFile.getSites();
猜你喜欢
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多