Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/27: Рейтинг темы: голосов - 27, средняя оценка - 4.67
rookie

PostgreSQL autoincrement PreparedStatement

04.08.2011, 01:12. Показов 5716. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги кто нибудь работал с PostgreSQL?
B MySQL всё просто задаешь колонке параметер AUTO_INCREMENT и всем хорошо
в PostgreSQL всё сложнее надо создавать sequence(типа как в Оракл).
Ну лана создал я этот sequence а вот как заставить его работать с PreparedStatement так и не разобрался.Пришлось сначала вытаскивать следующее значение из sequence а потом засовывать его в PreparedStatement.Может кто то знает как напрямую заставить работать sequence в PreparedStatement
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Class.forName('org.postgresql.Driver');
          conn = DriverManager.getConnection('jdbc:postgresql://localhost:5432/Baza','user','pass');
          String sql = 'select nextval('tablename_propertyid_seq')';
          ResultSet rs = conn.createStatement().executeQuery(sql);
          int id = 0;
          while(rs.next()){
              id = rs.getInt('nextval');//вот это мне не нравится
          }
          String sqlAdd = 'INSERT INTO tablename VALUES(?,?,?,?,?,?,?,?)';
            pSt = conn.prepareStatement(sqlAdd);
            pSt.setInt(1,id);
            pSt.setString(2,pBean.getAddress());
            pSt.setString(3,pBean.getCounty());
            pSt.setString(4,pBean.getState());
            pSt.setString(5,pBean.getZip());
            pSt.setString(6,pBean.getPropertyType());
            pSt.setInt(7,pBean.getNumberOfApartments());
            pSt.setString(8,pBean.getStatus());
            pSt.executeUpdate();
          conn.commit();
          pSt.close();
          conn.close();
Посоветуйте чем сможете плиззз
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.08.2011, 01:12
Ответы с готовыми решениями:

Установка даты в PreparedStatement для сохранения в БД PostgreSQL
Здравствуйте!) В базу записывается год, месяц день - часы, минуты, секунды равны нулю. Возможно использовал сильно замороченный способ,...

PreparedStatement
всем добрый день, есть код : package com.mysql; public class DaoAllSubjectsStudents implements...

PreparedStatement
Здравствуйте, необходимо сделать одно DAO, и в нём 2 PreparedStatement (для каждого из методов), один я создаю и использую, а второй не...

15
1 / 1 / 0
Регистрация: 15.02.2010
Сообщений: 311
04.08.2011, 01:31
Кроме последовательности, следует написать также триггер на добавление записи. Он и будет брать следующее значение из последовательности и писать его в ID.
0
rookie
04.08.2011, 03:18
А как его вызывать?
И ещё вопрос есть такой код - скриплет.Не подскажете хорошую инфу или хотя бы пример как сделать тоже самое используя jstl?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<jsp:useBean id='WrapperBean' scope='session' class='dcowners.property.PropertyBeanWrapper'/>
<%
java.util.Set set = WrapperBean.getPropertyList().keySet();
java.util.SortedMap map = WrapperBean.getPropertyList();
dcowners.property.PropertyBean bean = null;
  for(java.util.Iterator iter = set.iterator();iter.hasNext();){
    Integer id = (Integer) iter.next();
    bean = (dcowners.property.PropertyBean)map.get(id);
   
 %>
 <%=bean.getAddress()%>
<%     
  }  
%>
Спасибо заранее за помощь
1 / 1 / 0
Регистрация: 15.02.2010
Сообщений: 311
04.08.2011, 13:36
Триггер не надо вызывать. Его сервер БД вызывает. Когда добавляете запись.
0
1 / 1 / 0
Регистрация: 15.02.2010
Сообщений: 311
04.08.2011, 13:39
Пример для Оракла из моих проектов:

Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- Create table
CREATE TABLE ADVERTISEMENT(
  ID        NUMBER NOT NULL,
... )
 
-- Create ID sequence
CREATE SEQUENCE ADVERTISEMENT_ID_SEQ
       minvalue 1
       maxvalue 999999999999999999999999999
       START WITH 1
       INCREMENT BY 1
       cache 20;
 
-- Create ON_INSERT trigger firing on insert
CREATE OR REPLACE TRIGGER ADVERTISEMENT_ON_INSERT
  before INSERT ON advertisement
  FOR each ROW
DECLARE
  -- local variables here
BEGIN
  IF :NEW.ID IS NULL OR :NEW.ID = 0 THEN
    SELECT ADVERTISEMENT_ID_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
  END IF;
END ADVERTISEMENT_ON_INSERT;
0
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
04.08.2011, 13:51
допустим что cats_table_seq - индекс для таблицы cats

инсерт выглядит так:

insert into cats(id, name) values(nextval('cats_table_seq'), 'boy')
0
0 / 0 / 1
Регистрация: 29.05.2009
Сообщений: 52
04.08.2011, 13:57
> insert into cats(id, name) values(nextval('cats_table_seq'), 'boy')
Если далее в коде приложения необходимо будет знать какое значение было присвоено записи (и, соответственно, sequence) его можно получить командой:

select currval('cats_table_seq');

Только нужно это сделать до следующего вызова nextval, что и так понятно.
0
rookie
04.08.2011, 17:55
Souljah и Dederer огромное спасибо только если вы внимательно читали я просил подсказать как работать с триггером из PreparedStatement а уж создать сиквенс я и сам сподобился и даже вызвать его из Джавы и прочее..
А вот насчет jstl так никто ничего и не сказал((( Подвкажитте пожадста
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
04.08.2011, 18:01
перечитал вопрос
не нашел в нем слова 'триггер'
по поводу jstl - на их сайте примеры есть
если совсем все плохо - отпишись под вечер, наваяю пример
0
rookie
04.08.2011, 18:31
Дык разговор зашел за триггер.
И как мне в эту строчку вставить то что ты написал - insert into cats(id, name) values(nextval('cats_table_seq'), 'boy')?
String sqlAdd = 'INSERT INTO tablename VALUES(?,?,?,?,?,?,?,?)';
и потом выполнить PreperedStatement.Мой вопрос был как их вместе заставить работать без предварительного вызова сиквенса а вызывать из PreperedStatementю
Если я напишу так(а я пробовал)

String sqlAdd = 'INSERT INTO tablename VALUES(nextval('cats_table_seq'),?,?,?,? ,?,?,?)'; - стройными рядами идем далеко далеко.Грит что ArrayIndexOutOfBoundException.так вот мой вопрос куда запихать ентот сиквенс чтоб он екзекьютнулся из моей аппликухи
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
04.08.2011, 18:45
Code
1
2
3
4
5
String query = 'insert into cats(id, name) values(nextval('cats_table_seq'), ?)';
 
PreparedStatement pst = conn.prepareStatement(query);
pst.setString(1, 'Tomcat');
pst.executeUpdate();
и все. никаких предварительных вычитываний значений из индекса.

ArrayIndexOutOfBounds говорит о попытке установить параметр с некорректным индексом. Посмотри внимательнее.
0
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
04.08.2011, 18:48
вычитываний значений из индекса = вычитываний значений из сиквенса

пятница, однако
0
rookie
04.08.2011, 19:02
Странные вещи творятся вчера так делал не работало.А сегодня заработало.Спасибо тебе Солдат )))
rookie
04.08.2011, 20:50
Поможите с jstl плиз
вот код wrapper-a для бина
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package dcowners.property;
 
import java.util.SortedMap;
import java.util.TreeMap;
import java.io.Serializable;
import java.util.ArrayList;
 
public class PropertyBeanWrapper implements Serializable{
 
    private SortedMap propertyList = new TreeMap();
    private PropertyBean [] propertyBean;
 
   public void setPropertyList(Integer id,PropertyBean bean){
      propertyList.put(id,bean);
   }
 
   public SortedMap getPropertyList(){
       return propertyList;
   }
 
    public PropertyBean[] getPropertyBeans(){
      ArrayList values = (ArrayList)propertyList.values();
      propertyBean = (PropertyBean [])values.toArray();
      return propertyBean;  
    }
 
}
вот код страницы
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ taglib prefix='c' uri='/WEB-INF/tld/c.tld' %>
<jsp:useBean id='WrapperBean' scope='session' class='dcowners.property.PropertyBeanWrapper'/>
 
<html>
<header><title>List Of Properties</title></header>
<body>
 
  
   
   <c:forEach var='bean' items='${WrapperBean.propertyBean}'>
     <table border=1>
      <tr> <td  bgcolor='#cccccc'> 
       <c:out value='${bean.address}' />
     </td></tr>
     </table>
   </c:forEach> 
  
 
</body>
</html>
А получаю вот это
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<html>
<header><title>List Of Properties</title></header>
<body>
 
  
   
   
     <table border=1>
      <tr> <td  bgcolor='#cccccc'> 
       ${bean.address}
     </td></tr>
 
     </table>
    
  
 
</body>
</html>
Где тут грабли?Почему не работает
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
04.08.2011, 21:09
Code
1
<c:forEach var='bean' items='${WrapperBean.propertyBean}'>
must be:
Code
1
<c:forEach var='bean' items='${WrapperBean.propertyBeans}'>
0
rookie
04.08.2011, 21:37
не помогает (( сделал даже так
насколько я понял foreach итерирует через Map тоже
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ taglib prefix='c' uri='/WEB-INF/tld/c.tld' %>
<jsp:useBean id='WrapperBean' scope='session' class='dcowners.property.PropertyBeanWrapper'/>
 
<html>
<header><title>List Of Properties</title></header>
<body>
 
   
   <c:forEach var='bean' items='${WrapperBean.propertyBeans}'>
     <table border=1>
      <tr> <td  bgcolor='#cccccc'> 
     <c:out value='${bean.address}' />
     </td></tr>
     </table>
   </c:forEach> 
  
  <c:forEach var='bean' items='${sessionScope.WrapperBean.propertyList}'>
       <c:out value='${bean.address}'/>
  
</c:forEach>
 
</body>
</html>
Получаю в обоих случаях одно и то же
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.08.2011, 21:37
Помогаю со студенческими работами здесь

JDBC: PreparedStatement
Возник вопрос: в каком месте я имею право ставить знак &quot;?&quot;? SELECT ? FROM some_table; SELECT * FROM some_table WHERE ? = 3; Нельзя ли...

PreparedStatement не работатет
Доброе время суток. Код public Users getLoginAndPassword(String login) throws SQLException { PreparedStatement...

Синхронизация PreparedStatement
Вызываются разные статические процедуры одного класса которые используют одни и те же статические PreparedStatement. Можно ли...

PreparedStatement + MySQL
Коллеги, привет! Столкнулся с такой проблемкой. Хочу с помощью PreparedStatement создать схему на MySQL, собственно использую такой...

Про Connection и PreparedStatement
Добрый день уважаемые форумчане... Имеется подключение к базе... private Connection connection; private PreparedStatement...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru