Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将参数安全地注入到string DB query java中?_Java_Database_Google Bigquery_Sql Injection - Fatal编程技术网

如何将参数安全地注入到string DB query java中?

如何将参数安全地注入到string DB query java中?,java,database,google-bigquery,sql-injection,Java,Database,Google Bigquery,Sql Injection,我有一个bigQuery示例代码: List<TableRow> rows = executeQuery( "SELECT TOP(corpus, 10) as title, COUNT(*) as unique_words Where country = 'USA' " + + "FROM [publicdata:samples.shake

我有一个bigQuery示例代码:

List<TableRow> rows =
                executeQuery(
                        "SELECT TOP(corpus, 10) as title, COUNT(*) as unique_words Where country = 'USA' " +
                                + "FROM [publicdata:samples.shakespeare]",
                        bigquery,
                        PROJECT_ID);
列出行=
行刑(
“选择TOP(语料库,10)作为标题,将(*)计算为唯一的单词,其中国家=‘美国’”+
+“摘自[publicdata:samples.shakespeare]”,
bigquery,
项目编号);
如果我想把国家安全地注入到这根弦上

我该怎么做

我想避免sql注入的风险,这是有风险的:

public void foo(String countryParam) {
    List<TableRow> rows =
                    executeQuery(
                            "SELECT TOP(corpus, 10) as title, COUNT(*) as unique_words Where country = '"+countryParam+"' " +
                                    + "FROM [publicdata:samples.shakespeare]",
                            bigquery,
                            PROJECT_ID);
}
public void foo(字符串countryParam){
列出行=
行刑(
“选择TOP(语料库,10)作为标题,将(*)作为唯一的_单词,其中country='”+countryParam+“”+
+“摘自[publicdata:samples.shakespeare]”,
bigquery,
项目编号);
}
更新

找不到Elliott Brossard建议的明确示例:

public List<String> getVenuesForBrand(BrandChangeDataUi brandChangeDataUi) throws IOException {
    QueryParameter param = new QueryParameter();
    param.setName("country");
    param.setParameterValue(new QueryParameterValue().setValue("USA"));
    param.setParameterType(new QueryParameterType().setType("string"));

    List<QueryParameter> params =  new ArrayList<>();
    params.add(param);

    JobConfigurationQuery jobConfigurationQuery = new JobConfigurationQuery();
    jobConfigurationQuery.setQueryParameters(params);

    jobConfigurationQuery.setQuery( "SELECT TOP(corpus, 10) as title, COUNT(*) as unique_words Where country = 'USA' " +
                                    + "FROM [publicdata:samples.shakespeare]");



    List<TableRow> rows =
            executeQuery(
                    jobConfigurationQuery.toString(),
                    bigquery,
                    PROJECT_ID);

    printResults(rows);

    return null;
}
public List getVenuesForBrand(BrandChangeDataUi-BrandChangeDataUi)抛出IOException{
QueryParameter param=新的QueryParameter();
参数设置名称(“国家”);
参数setParameterValue(新的QueryParameterValue().setValue(“美国”));
setParameterType(新的QueryParameterType().setType(“字符串”));
List params=new ArrayList();
参数添加(参数);
JobConfigurationQuery JobConfigurationQuery=新建JobConfigurationQuery();
jobConfigurationQuery.setQueryParameters(参数);
setQuery(“选择TOP(语料库,10)作为标题,将(*)作为唯一的单词,其中国家='USA'”+
+“摘自[publicdata:samples.shakespeare]”;
列出行=
行刑(
jobConfigurationQuery.toString(),
bigquery,
项目编号);
打印结果(行);
返回null;
}

查看下的
查询参数。对于JavaAPI,它们作为的一部分进行了记录。请注意,查询参数只能使用。

我找不到明确的示例。你能看看我的试用版并建议如何修复它吗?选择。。。Where country=@country FROM[publicdata:samples.shakespeare]不起作用。对于标准SQL,它需要
选择大约顶部计数(语料库,10)作为标题,其中country=@country FROM publicdata.samples.shakespeare
你是对的-忘记修复表引用-我的重点是引用参数,但我想使用
bigQuery
语法,那么如何使用
标准SQL
?在你的示例中,你需要调用
jobConfigurationQuery.setUseLegacySql(false)以启用标准SQL。要测试查询参数在查询中是否可用,请尝试执行
jobConfigurationQuery.setQuery(“选择@country作为国家;”)