2015-03-26 4 views
0

У меня есть сервлет под названием DBChart, отображаемый на url /db. Сервлет выводит некоторые данные на основе SQL-запроса, используемого здесь.Динамический SQL с сервлетами

Что у меня есть:

На стороне клиента, я сделав Ajax вызов, как это:

$.ajax({ 
       type : 'POST', 
       async: false, 
       url : 'http://localhost:8080/DBCHART/db', 
       success : function(data) {/*some code*/}) 

и На стороне сервера, статический запрос, который говорит:

String sql ="select * from Employee" 

Что я хочу: Я хочу, чтобы иметь возможность передавать некоторые параметры здесь:

url: http://localhost:8080/DBCHART/db?Name = 'xyz'?Age = 21 

и на стороне сервера, запрос в данном случае должно стать:

select * from Employee where Name ='xyz' and Age = 21 

т.е. только если эти параметры были supllied в противном случае она должна оставаться

select * from Employee 

Могу ли я, пожалуйста, получить некоторые направление для создания динамического sql для этого эффективно?

ответ

-1

скажу, в этом случае вы используете VarName как «А» и varAge, как 21 - - Name = «А» Age = 21

вы можете использовать некоторую логику, как это (точка в ponder: WHERE 1 = 1)

string sqlQuery = " select * from Employee where 1 = 1 "; 

if(null != varName && !varName.isEmpty())){ 
    // add criteria for Name 
    sqlQuery += " AND Name = '"+ varName + "'"; // TODO: use parametrized query 
} 

if(null != varAge && varAge > 0){ 
    // add criteria for Age 
    sqlQuery += " AND Age = "+ varAge ; // TODO: use parametrized query 
} 
+0

Этот ответ идет в правильном направлении, но он ошибочен из-за секретных проблем. Он упоминает параметризованные запросы, но образцы кода не используют их. Примером является _crazy-уязвимость_ для инъекционных атак. -1 –

+0

@JoelCoehoorn: Как я могу преодолеть такие уязвимости? Могу ли я иметь что-то в этом направлении, пожалуйста? –

+0

@Raushan: Как вынуть varName и varAge из этой строки? –

Смежные вопросы