Как выловить java util nosuchelementexception
Перейти к содержимому

Как выловить java util nosuchelementexception

Как выловить java util nosuchelementexception

Constructs a NoSuchElementException , saving a reference to the error message string s for later retrieval by the getMessage method.

Method Summary

Methods inherited from class java.lang.Throwable

Methods inherited from class java.lang.Object

Constructor Detail

NoSuchElementException
public NoSuchElementException()

Constructs a NoSuchElementException with null as its error message string.

NoSuchElementException

Constructs a NoSuchElementException , saving a reference to the error message string s for later retrieval by the getMessage method.

Java™ Platform
Standard Ed. 8

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2023, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.

Class NoSuchElementException

Constructs a NoSuchElementException , saving a reference to the error message string s for later retrieval by the getMessage method.

Constructs a NoSuchElementException with the specified detail message and cause.
Constructs a NoSuchElementException with the specified cause.

Method Summary

Methods declared in class java.lang.Throwable

Methods declared in class java.lang.Object

Constructor Details

NoSuchElementException

public NoSuchElementException ()
Constructs a NoSuchElementException with null as its error message string.

NoSuchElementException

public NoSuchElementException (String s, Throwable cause)
Constructs a NoSuchElementException with the specified detail message and cause.

NoSuchElementException

public NoSuchElementException (Throwable cause)

Constructs a NoSuchElementException with the specified cause. The detail message is set to (cause == null ? null : cause.toString()) (which typically contains the class and detail message of cause ).

NoSuchElementException

public NoSuchElementException (String s)

Constructs a NoSuchElementException , saving a reference to the error message string s for later retrieval by the getMessage method.

Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples. Other versions.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2022, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.
DRAFT 20-valhalla+1-75

Правильно ли я использую исключения в java?

Добрый День!
Помогите разобраться с основами java, а именно с работой с исключениями.
Есть простая программа, спрашивающая из консоли положительное число.
Если число отрицательное выбрасывается исключение и снова вызывается функция запроса числа.
Собственно пара вопросов:
1. Откуда берется java.util.NoSuchElementException, как это исправить?
2. Насколько оправданно в этом случае использование исключений, вместо старого доброго if-else блока?
3. Где стоит обрабатывать исключение. Непосредственно в функции где оно может выпасть или же в функции вызывающей ее?
4. Вообще используется ли прием reвызова функции из блока catch? Или это бред и обычно используются другие паттерны?
Благодарю) Код программы ниже)

import java.util.Scanner; public class MyProgram < public static void main(String[] args) < int input; try < input = askForInput(); >catch (IllegalArgumentException e) < System.out.println(e.getMessage()); input = askForInput(); >System.out.println(input); > private static int askForInput() < try (Scanner sc = new Scanner(System.in)) < System.out.println("Введите положительное число:"); int result = sc.nextInt(); if (result < 0) < throw new IllegalArgumentException("Вы ввели отрицательное число"); >return result; > > >
  • Вопрос задан более года назад
  • 151 просмотр

4 комментария

Простой 4 комментария

Casper-SC

2. Насколько оправданно в этом случае использование исключений, вместо старого доброго if-else блока?

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

Casper-SC

Вот посмотри как я делал абсолютно тоже самое в Kotlin (requestUserInputAsInt). В Kotlin примере я бросаю исключение, если программист передал неправильные значения диапазона. Когда он поймает исключение, он исправит свою ошибку и больше она не возникнет. А ввод пользователя ожидаемо может быть неправильным, поэтому мы и обрабатываем это так, как будто это ожидаем.
https://qna.habr.com/q/1166050#answer_2182636

Эти языки знать не обязательно, все языки похожи. Просто читай как псевдокод, всё должно быть понятно.

Casper-SC

Если в конструктор класса передали невалидный параметр, то можно бросить исключение, так как в противном случае всё равно нужно будет создать невалидный объект, да ещё и не забыть проверить его после создания, что он невалидный. Ты проверишь, а твой коллега нет. Вот здесь исключение абсолютно оправдано. Есть и другие ситуации. Нужно исходить из логики.

Saved searches

Use saved searches to filter your results more quickly

Cancel Create saved search

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

slick / slick Public

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SQLite codegen fails with java.util.NoSuchElementException for primary key with camel-casing #1955

samikrc opened this issue Oct 1, 2018 · 2 comments

SQLite codegen fails with java.util.NoSuchElementException for primary key with camel-casing #1955

samikrc opened this issue Oct 1, 2018 · 2 comments

Comments

samikrc commented Oct 1, 2018 •

DESCRIPTION:

When I try to generate the schema from a database, I get java.util.NoSuchElementException on one of the column names.

STEPS TO REPRODUCE:

Attaching a very small database which produces the error, when trying to generate code with the following snippet. Note: the attachment is zipped.
apollo.db.zip

object TableCodeGenerator extends App < slick.codegen.SourceCodeGenerator.main(Array( "slick.jdbc.SQLiteProfile", "org.sqlite.JDBC", "jdbc:sqlite:/home/samik/db/apollo.db", "/home/samik/git/project/src/main/scala", "full.qualified.name") ) >

EXPECTED RESULT:

Expected to see the table schema in a scala file.

ACTUAL RESULT:

Here is the stack trace:

Exception in thread "main" java.util.NoSuchElementException: key not found: clientid at scala.collection.MapLike$class.default(MapLike.scala:228) at scala.collection.AbstractMap.default(Map.scala:59) at scala.collection.MapLike$class.apply(MapLike.scala:141) at scala.collection.AbstractMap.apply(Map.scala:59) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.Iterator$class.foreach(Iterator.scala:893) at scala.collection.AbstractIterator.foreach(Iterator.scala:1336) at scala.collection.IterableLike$class.foreach(IterableLike.scala:72) at scala.collection.AbstractIterable.foreach(Iterable.scala:54) at scala.collection.TraversableLike$class.map(TraversableLike.scala:234) at scala.collection.AbstractTraversable.map(Traversable.scala:104) at slick.jdbc.JdbcModelBuilder$PrimaryKeyBuilder.model(JdbcModelBuilder.scala:291) at slick.jdbc.JdbcModelBuilder$TableBuilder.primaryKey$lzycompute(JdbcModelBuilder.scala:166) at slick.jdbc.JdbcModelBuilder$TableBuilder.primaryKey(JdbcModelBuilder.scala:166) at slick.jdbc.JdbcModelBuilder$TableBuilder.buildModel(JdbcModelBuilder.scala:160) at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3$$anonfun$apply$17.apply(JdbcModelBuilder.scala:95) at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3$$anonfun$apply$17.apply(JdbcModelBuilder.scala:95) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.immutable.List.foreach(List.scala:381) at scala.collection.TraversableLike$class.map(TraversableLike.scala:234) at scala.collection.immutable.List.map(List.scala:285) at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3.apply(JdbcModelBuilder.scala:95) at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3.apply(JdbcModelBuilder.scala:92) at slick.dbio.DBIOAction$$anonfun$map$1.apply(DBIOAction.scala:43) at slick.dbio.DBIOAction$$anonfun$map$1.apply(DBIOAction.scala:43) at slick.basic.BasicBackend$DatabaseDef$$anonfun$slick$basic$BasicBackend$DatabaseDef$$runInContextInline$1.apply(BasicBackend.scala:171) at slick.basic.BasicBackend$DatabaseDef$$anonfun$slick$basic$BasicBackend$DatabaseDef$$runInContextInline$1.apply(BasicBackend.scala:171) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:253) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 

SETUP:

The database has to exist at the path mentioned in the code. Using sqlite-jdbc v3.8.7 and Slick v3.2.3.

NOTES:
It seems to me from the error that some case mismatch is going on. In this database, there are a few fields which uses camel casing, e.g., the field mentioned in the stacktrace is provided as ‘clientId’, however some code is trying to find a key named «clientid». Another table which has all the column names in lower case didn’t have any issue.
Edit: By debugging the Slick code, it looks like the column names in the table are coming in with correct case, but the column names in the primary key set are coming in lower case. That is tripping up the code at slick.jdbc.JdbcModelBuilder$PrimaryKeyBuilder.model(JdbcModelBuilder.scala:291).

The text was updated successfully, but these errors were encountered:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *