如何将参数安全地注入到string DB query java中?
我有一个bigQuery示例代码:如何将参数安全地注入到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
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作为国家;”)代码>。