Названные параметры в JDBC

Там названы параметрами в JDBC вместо позиционных, как @name, @city в ADO.NET запрашивают ниже?

select * from customers where name=@name and city = @city
68
задан Jonas 9 November 2011 в 20:50
поделиться

3 ответа

JDBC не поддерживает именованные параметры. Если вы не привязаны к использованию обычного JDBC (что причиняет боль, скажу я вам), я бы предложил использовать Springs Excellent JDBCTemplate, который можно использовать без всего IoC-контейнера.

NamedParameterJDBCTemplate поддерживает именованные параметры, вы можете использовать их следующим образом:

 NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);

 MapSqlParameterSource paramSource = new MapSqlParameterSource();
 paramSource.addValue("name", name);
 paramSource.addValue("city", city);
 jdbcTemplate.queryForRowSet("SELECT * FROM customers WHERE name = :name AND city = :city", paramSource);
68
ответ дан 24 November 2019 в 14:16
поделиться

Стандартный JDBC поддерживает только именованные параметры в CallableStatement (например, setString ("name", name) ) , и даже в этом случае я подозреваю, что базовая реализация хранимой процедуры должна его поддерживать.

Пример использования именованных параметров:

//uss Sybase ASE sysobjects table...adjust for your RDBMS
stmt = conn.prepareCall("create procedure p1 (@id int = null, @name varchar(255) = null) as begin "
        + "if @id is not null "
        + "select * from sysobjects where id = @id "
        + "else if @name is not null "
        + "select * from sysobjects where name = @name "
        + " end");
stmt.execute();

//call the proc using one of the 2 optional params
stmt = conn.prepareCall("{call p1 ?}");
stmt.setInt("@id", 10);
ResultSet rs = stmt.executeQuery();
while (rs.next())
{
    System.out.println(rs.getString(1));
}


//use the other optional param
stmt = conn.prepareCall("{call p1 ?}");
stmt.setString("@name", "sysprocedures");
rs = stmt.executeQuery();
while (rs.next())
{
    System.out.println(rs.getString(1));
}
23
ответ дан 24 November 2019 в 14:16
поделиться

Просто введите?

т. е. вместо com.mycompany. $ {PRODUCT _ NAME: rfc1034identifier} просто введите com.mycompany.MyApp

Если у вас есть несколько целевых объектов, которым нужны разные имена пакетов, один из способов сделать это - создать собственную переменную и использовать ее вместо этого.

В меню сборки (выберите свой проект и выберите Получить информацию) можно добавить собственные переменные в проект. Если сделать один из них MY_BUNDLE_NAME и установить его в MyApp, вы можете поместить com.mycompany. $ {MY _ BUNDLE _ NAME} в файл plist. Для различных целей необходимо иметь возможность установки MY_BUNDLE_NAME различных значений.

-121--1388707-

Полагаю, именно для этого и нужен ПОСТ: «U» в «CRUD».

Вы проводите данные POST на существующий ресурс. Ресурс решает, что с ним делать, и обновляется. Кроме того, данные POST могут быть только фрагментом всего ресурса.

Подход Twitter IMHO не RESTful, потому что они перегружают GET.

-121--2717390-

Нельзя использовать именованные параметры в самом JDBC. Можно попробовать использовать рамку Spring, поскольку она имеет некоторые расширения, позволяющие использовать именованные параметры в запросах.

1
ответ дан 24 November 2019 в 14:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: