powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Тестовое задание
25 сообщений из 112, страница 4 из 5
Тестовое задание
    #39826714
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingвижу assertion failed что именно assertится.
Примеры в студию
мой метод нужен или тест метод?
...
Рейтинг: 0 / 0
Тестовое задание
    #39826726
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В твоём исходном коде sample-s приведены для СУБД Oracle.
Тесты - почему-то под H2.

Как специалист по Oracle я говорю что это в общем случае - неправильно. Это не будет работать по
причине несоотвествия диалектов. Грубо говоря некоторый синтаксис ("SELECT * FROM DUAL" e.t.c.)
существует только в Oracle.

В твоём случае можно использовать только базовое подмножество Ansi SQL которое во всех СУБД одинаково.
Видимо на это расчитан модуль 13 учебного плана.
...
Рейтинг: 0 / 0
Тестовое задание
    #39826727
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+Заходи дебаггером в тест и смотри где он вываливается из утверждения (assert).

Например. Первое нарушение теста я вижу здесь.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	public void testInsertAccount(){
		AccountDAO dao = new AccountDAOImpl(conn);
		try {
			boolean result = dao.insertAccount("Jack", "Bauer", "jack.bauer@ctu.gov");
			assertTrue(result);
			
		} catch (AccountDAOException e) {
			System.out.println(e.getCause().getMessage());
			fail();
		}catch(AssertionFailedError e){
			logger.error(sef.module.percentage.Percentage.setFailedCount(1, e.getMessage()));
			fail();
		}

	}


Тоесть вставка Джека Бауера в табличку не прошла. Далее - иди отладчиком и смотри почему.
...
Рейтинг: 0 / 0
Тестовое задание
    #39826728
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Далее. Как учить SQL по H2.

На официальном сайте где -то http://www.h2database.com/html/main.html есть описание веб-интерфейса.

Вот запускай его. Вводи туда все команды и смотри эффект.

...
Рейтинг: 0 / 0
Тестовое задание
    #39826738
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton+Заходи дебаггером в тест и смотри где он вываливается из утверждения (assert).

Например. Первое нарушение теста я вижу здесь.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	public void testInsertAccount(){
		AccountDAO dao = new AccountDAOImpl(conn);
		try {
			boolean result = dao.insertAccount("Jack", "Bauer", "jack.bauer@ctu.gov");
			assertTrue(result);
			
		} catch (AccountDAOException e) {
			System.out.println(e.getCause().getMessage());
			fail();
		}catch(AssertionFailedError e){
			logger.error(sef.module.percentage.Percentage.setFailedCount(1, e.getMessage()));
			fail();
		}

	}


Тоесть вставка Джека Бауера в табличку не прошла. Далее - иди отладчиком и смотри почему.
потому что Id null
даже если вручную просто цифру поставить будет null
хотя тот же запрос черех веб интерфейс создает спойконо эту запись в бд
...
Рейтинг: 0 / 0
Тестовое задание
    #39826740
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эта хрень просто отказывается id принимать.только через веб интерфейс
...
Рейтинг: 0 / 0
Тестовое задание
    #39826745
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообщем в вебинтерфейсе этой базы все принимает и записывает
значит проблема не в SQL запросе
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	boolean b=false;
		try {
			st=conn.prepareStatement("Insert into ACCOUNT  values (5,?,?,?);");
		//st.setInt(1,Account_SEQ.nextval);
		st.setString(1,firstName);
		st.setString(2,lastName);
		st.setString(3,email);
		b=st.execute();
		} catch (SQLException e) {
			e.printStackTrace();
		}


а вот где то тут
либо знаки вопроса ,либо екзекутит не так чего то фиг его знает короче
по дебагеру видно что присваиваются все значения куда положено
не пойму почему этот метод не делает запись
...
Рейтинг: 0 / 0
Тестовое задание
    #39826749
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
причем вебинтерфейс спокойно скушал

Код: plsql
1.
Insert into ACCOUNT  values (ACCOUNT_SEQ.NEXTVAL,?,?,?);
...
Рейтинг: 0 / 0
Тестовое задание
    #39826755
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал уже напрямую
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public boolean insertAccount(String firstName, String lastName, String email)
			throws AccountDAOException {
		boolean b=false;
		try {
			st=conn.prepareStatement("Insert into ACCOUNT  values (3,'"+firstName+"','"+lastName+"','"+email+"');");
		//st.setInt(1,Account_SEQ.nextval);
//		st.setString(1,firstName);
//		st.setString(2,lastName);
//		st.setString(3,email);
		b=st.execute();
		} catch (SQLException e) {
			e.printStackTrace();
		}



		
		return b;
	}



не записывает даже так .это какая то дичь
...
Рейтинг: 0 / 0
Тестовое задание
    #39826762
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообщем какая то жесть жестяная
пришел домой у меня там идея ультимейт ,тоесть можно с базами из нее рабоать

такая команда напряму рабоатает

Код: java
1.
Insert into ACCOUNT  values (ACCOUNT_SEQ.nextval,'sdsd','sdsdsdsds','qqqqqqq');



а вот этот говнометод не рабает)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	public boolean insertAccount(String firstName, String lastName, String email)
			throws AccountDAOException {

		try {
		Statement statement=conn.createStatement();

		statement.execute("Insert into ACCOUNT values (ACCOUNT_SEQ.nextval,'sdsd','sdsdsdsds','qqqqqqq');");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return false;
	}


я уже убрал даже аргументы пока ,просто в ручную набиваем значения- все равно болт.
как такое вообще возможно
пробовал и prepared statment и просто statement
есть то 3 строчки кода
...
Рейтинг: 0 / 0
Тестовое задание
    #39826766
Компостеров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79,

Бумага для теста мягкая ?
Если да, то подотрись и слей в унитаз, никому эту хрень не показывай.
И никогда не выполняй тестовых заданий.
...
Рейтинг: 0 / 0
Тестовое задание
    #39826773
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Компостеров,

Это было грубо чувак.
...
Рейтинг: 0 / 0
Тестовое задание
    #39826781
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Компостеровasv79,

Бумага для теста мягкая ?
Если да, то подотрись и слей в унитаз, никому эту хрень не показывай.
И никогда не выполняй тестовых заданий.
это не тестовые задания))это моя работа)
...
Рейтинг: 0 / 0
Тестовое задание
    #39826792
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче я добиля того чтобы все записывалось в базу,но почему вот эта строчка

Код: java
1.
pst.execute();


возвращает false ,ведь запись то произошла .
что за бред
...
Рейтинг: 0 / 0
Тестовое задание
    #39826794
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообщем добил таки)
кому интересно суть была в отсутсвии коннекта ,хотя два других теста спокойно работали.
далее тест не зеленел ,потому что execute() возвращает false всегда и нужно использовать executeUpdate()

теперь все работает ,в базу пишет и зеленеет
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
	public boolean insertAccount(String firstName, String lastName, String email)
			throws AccountDAOException {
	    int i=-100;


		try {
            Class.forName("org.h2.Driver");
		    Connection connection=DriverManager.getConnection("jdbc:h2:~/test","sa","");
		    PreparedStatement pst=connection.prepareStatement("Insert into ACCOUNT values (ACCOUNT_SEQ.nextval,?,?,?);");
		    pst.setString(1,firstName);
		    pst.setString(2,lastName);
		    pst.setString(3,email);

           i=pst.executeUpdate();
		} catch (SQLException | ClassNotFoundException e) {
			e.printStackTrace();
		}if(i>0){return true;}
		else return false;

	}



хотя очень странно почему соедениние из тестов не подхватывается ,ведь в двух других тестах,где я ищу по id и по имени все работает без создания нового подключения
...
Рейтинг: 0 / 0
Тестовое задание
    #39826795
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79кому интересно суть была в отсутсвии коннекта
Да ладно??

asv79хотя очень странно почему соедениние из тестов не подхватывается ,ведь в двух других тестах,где я ищу по id и по имени все работает без создания нового подключения
Скорее всего где-то закрывается оно

P>S

Код: java
1.
2.
if(i>0){return true;}
		else return false;


пиши лучше так
Код: java
1.
   return i > 0;
...
Рейтинг: 0 / 0
Тестовое задание
    #39826796
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,немного подшаманил
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public boolean insertAccount(String firstName, String lastName, String email)
			throws AccountDAOException {
	    int i=-100;


		try {
		    conn=DriverManager.getConnection("jdbc:h2:~/test","sa","");
		    PreparedStatement pst=conn.prepareStatement("Insert into ACCOUNT values (ACCOUNT_SEQ.nextval,?,?,?);");
		    pst.setString(1,firstName);
		    pst.setString(2,lastName);
		    pst.setString(3,email);

           i=pst.executeUpdate();
            System.out.println(i);
		} catch (SQLException e) {
			e.printStackTrace();
		}return i>0;

	}


но все равно не понимаю почему два других теста работают без создания коннекта заново,там же тоже закрываются соединения.
в самом тесте есть
вот такая строчка

Код: java
1.
2.
3.
4.
AccountDAO dao = new AccountDAOImpl(conn);
		try {
			boolean result = dao.insertAccount("Jack", "Bauer", "jack.bauer@ctu.gov");
			assertTrue(result);


тобишь соединение то передается
...
Рейтинг: 0 / 0
Тестовое задание
    #39826804
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79, дружище а ответь мне где у тебя происходит commit транзакции?
...
Рейтинг: 0 / 0
Тестовое задание
    #39826817
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonasv79, дружище а ответь мне где у тебя происходит commit транзакции?
ахх майтон ну красавец))
вот где была собака то зарыта
Код: java
1.
conn.setAutoCommit(true);


это строчка кода из тест файла
флаг стоял false
поменял на true и теперь не нужно каждый раз создавать соединение при новой записи)
...
Рейтинг: 0 / 0
Тестовое задание
    #39826818
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Состояние БД квантовано по транзакциям. Если ты начал транзакцию но не закончил ее
коммитом то другие сессии (другие Коннекшены) твою работу не увидят. Это оуено
важное свойство БД и на этом палятся все новички.

Команды insert/update/delete/merge не являются транзакциями. Они являются некими DML-операциями
в рамках одной большой (обычно транзакции). Ставить авто-коммит - это не круто т.к. бедная БД
будет вынуждена фиксировать операцию а это форсирует некоторые накладные расходы. Особенно
сильно это влияло на дисковые СУБД класса реляционных.

В таких СУБД как Оракл к примеру вообще нет понятия авто-коммит. Хотя некоторые среды такие
как PLSQL Developer, SQLNavigator, DBVisualizer позволяют включать авто-коммит но это плюшка
клиента а не сервера. Особенно это опасно в блоках Exception, если ты не дал rollback то вставленная
строка с одной стороны - невидима для всей системы. С другой стороны она - блокер для других повторных
операций. Транзакция в Java умерла по ошибке но с точки зрения БД она еще НЕ ЗАВЕРШЕНА и поэтому
заблокированы повторные попытки к примеру сделать UPDATE.

Я отрастил немало седых волос борясь с побочными эффектами транзакций в Java-приложениях.

Вообще понимание работы SQL/ORM/DBMS - это сразу +1 уровень синьорити.

Хотя некоторые современные системы хранения или кеширования информации Redis/Memcached/Berkeley
могут игнорировать длительность транзакции считая операцию транзакцией. На это надо внимательно
читать доку. Как оно там реализовано.
...
Рейтинг: 0 / 0
Тестовое задание
    #39826820
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСостояние БД квантовано по транзакциям. Если ты начал транзакцию но не закончил ее
коммитом то другие сессии (другие Коннекшены) твою работу не увидят. Это оуено
важное свойство БД и на этом палятся все новички.

Команды insert/update/delete/merge не являются транзакциями. Они являются некими DML-операциями
в рамках одной большой (обычно транзакции). Ставить авто-коммит - это не круто т.к. бедная БД
будет вынуждена фиксировать операцию а это форсирует некоторые накладные расходы. Особенно
сильно это влияло на дисковые СУБД класса реляционных.

В таких СУБД как Оракл к примеру вообще нет понятия авто-коммит. Хотя некоторые среды такие
как PLSQL Developer, SQLNavigator, DBVisualizer позволяют включать авто-коммит но это плюшка
клиента а не сервера. Особенно это опасно в блоках Exception, если ты не дал rollback то вставленная
строка с одной стороны - невидима для всей системы. С другой стороны она - блокер для других повторных
операций. Транзакция в Java умерла по ошибке но с точки зрения БД она еще НЕ ЗАВЕРШЕНА и поэтому
заблокированы повторные попытки к примеру сделать UPDATE.

Я отрастил немало седых волос борясь с побочными эффектами транзакций в Java-приложениях.

Вообще понимание работы SQL/ORM/DBMS - это сразу +1 уровень синьорити.

Хотя некоторые современные системы хранения или кеширования информации Redis/Memcached/Berkeley
могут игнорировать длительность транзакции считая операцию транзакцией. На это надо внимательно
читать доку. Как оно там реализовано.
понятно) ну а в моем случае какое решение-изменит тест как я изменил? или каждый раз новый коннекшен подымать
...
Рейтинг: 0 / 0
Тестовое задание
    #39826822
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы добавил ручной коммит


Код: java
1.
2.
3.
4.
5.
6.
7.
		    
                   conn=DriverManager.getConnection("jdbc:h2:~/test","sa","");
		    PreparedStatement pst=conn.prepareStatement("Insert into ACCOUNT values (ACCOUNT_SEQ.nextval,?,?,?);");
		    pst.setString(1,firstName);
		    pst.setString(2,lastName);
		    pst.setString(3,email);
            conn.commit();



А в блоке исключений - соотв conn.rollback().

И соединение я-бы получал не через DriverManager.getConnection а из пула коннектов. Впрочем
это уже тонкая настройка перформанса и от тебя такую здесь не потребуют.
...
Рейтинг: 0 / 0
Тестовое задание
    #39826827
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ-бы добавил ручной коммит


Код: java
1.
2.
3.
4.
5.
6.
7.
		    
                   conn=DriverManager.getConnection("jdbc:h2:~/test","sa","");
		    PreparedStatement pst=conn.prepareStatement("Insert into ACCOUNT values (ACCOUNT_SEQ.nextval,?,?,?);");
		    pst.setString(1,firstName);
		    pst.setString(2,lastName);
		    pst.setString(3,email);
            conn.commit();



А в блоке исключений - соотв conn.rollback().

И соединение я-бы получал не через DriverManager.getConnection а из пула коннектов. Впрочем
это уже тонкая настройка перформанса и от тебя такую здесь не потребуют.
поставил флfu сетавтокомит false
и сделал вот так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
	public boolean insertAccount(String firstName, String lastName, String email)
			throws AccountDAOException {
	    int i=-100;
		try {
		    PreparedStatement pst=conn.prepareStatement("Insert into ACCOUNT values (ACCOUNT_SEQ.nextval,?,?,?);");
		    pst.setString(1,firstName);
		    pst.setString(2,lastName);
		    pst.setString(3,email);
		    i=pst.executeUpdate();
		    conn.commit();
			conn.rollback();
		} catch (SQLException e) {
			e.printStackTrace();

		}return i>0;

	}



все работает) век живи век учись,хотя я про эти комиты не читал ничего и в уроке по которому я делаю это задание тоже не слова про коммиты
...
Рейтинг: 0 / 0
Тестовое задание
    #39826944
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79все работает) век живи век учись,хотя я про эти комиты не читал ничего и в уроке по которому я делаю это задание тоже не слова про коммиты

разве цель урока была выучить автокоммиты, но раз уж коде используется jdbc то вполне себе полистать официальный туториал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Disabling Auto-Commit Mode

When a connection is created, it is in auto-commit mode. This means that each individual SQL statement is treated as a transaction and is automatically committed right after it is executed. (To be more precise, the default is for a SQL statement to be committed when it is completed, not when it is executed. A statement is completed when all of its result sets and update counts have been retrieved. In almost all cases, however, a statement is completed, and therefore committed, right after it is executed.)

The way to allow two or more statements to be grouped into a transaction is to disable the auto-commit mode. This is demonstrated in the following code, where con is an active connection:

con.setAutoCommit(false);

...
Рейтинг: 0 / 0
Тестовое задание
    #39826962
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
в уроке презентации не было ни слова о коммитах.
цель урока взять из базы и положить в базу.
это начальный курс JAVA SE
...
Рейтинг: 0 / 0
25 сообщений из 112, страница 4 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / Тестовое задание
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]