2013-11-23 31 views
13

Próbuję użyć połączenia following Fastload API itp. Jest doskonały.Co to jest IllegalStateException?


wiem dokładnie gdzie to nie

........... 
System.out.println(" Streaming " + dataFile); 
pstmtFld.setAsciiStream(1, dataStream, -1); // This line fails 
System.out.println("check the above line"); // This does not go to console 
........... 

Wyjątek jest

Exception in thread "main" java.lang.IllegalStateException: Sample failed.

[ODBC Teradata Driver] Invalid precision: cbColDef value out of range


Oto moja tabela, którą próbuję przesłać. Jest Formatowanie .csv a kiedy go otworzyć za pomocą notatnika wyglądać następująco

1,9,Win 
2,9,Winc 
3,9,Wi 

Dlaczego otrzymuję ten wyjątek? Jak mogę to poprawić? O ile rozumiem, problem polega na tym, że pstmtFld.setAsciiStream(1, dataStream, -1); nie akceptuje w żaden sposób zbioru danych i generuje wyjątek.

+1

Zwykle wyrzucam 'IllegalStateException' za każdym razem, gdy złapię coś, co" nie może się wydarzyć "i nie ma innego, bardziej opisowego typu wyjątku, który mogę rzucić. Na przykład, powiedz, że piszę kod, aby wyświetlić obraz, a obraz ma szerokość ujemną - rzucanie czegokolwiek innego byłoby gorsze, więc mogę napisać własny niezaznaczony wyjątek (zalecana praktyka, ale możesz rozważyć uczynienie z niego sprawdzonego wyjątku zamiast tego) lub użyj wbudowanego 'IllegalStateException' jeden. – tucuxi

+0

Zgodnie z http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#setAsciiStream%28int,%20java.io.InputStream,%20int%29, czy jest możliwe, że długość pliku (-1) powoduje to? – Lopina

Odpowiedz

22

Zazwyczaj, IllegalStateException służy do wskazania, że ​​"metoda została wywołana w nielegalnym lub nieodpowiednim czasie". Jednak nie wygląda to na szczególnie typowe jej użycie.

Kod, który został połączony, pokazuje, że można go wyrzucić w tym kodzie w linii 259 - ale dopiero po zrzuceniu SQLException na standardowe wyjście.

Nie możemy powiedzieć, co jest nie tak od tego wyjątku - i lepszy kod użyłby oryginalnego SQLException jako wyjątku "przyczyny" (lub po prostu pozwól oryginalnemu wyjątkowi rozprzestrzeniać się na stosie) - ale powinieneś być w stanie zobacz więcej szczegółów na temat standardowego wyjścia. Spójrz na te informacje i powinieneś być w stanie zobaczyć, co spowodowało wyjątek i go naprawić.

+0

co to jest "standardowe wyjście"? –

+0

@BoratSagddiev: Tak jak w 'System.out' - standardowy strumień wyjściowy z twojego procesu, zwykle zapisujący na konsoli, jeśli jest dołączony lub często przechwytywany jako plik dziennika w procesie po stronie serwera. Ponieważ nie wiemy, w jaki sposób uruchamiasz kod, trudno powiedzieć, gdzie szukać. –

+0

Edytowałem pytanie. Wiem dokładnie, gdzie zawodzi. 'pstmtFld.setAsciiStream (1, dataStream, -1);' nie wykonuje –

0

Nieprawidłowy wyjątek państwa jest wyjątkiem odznaczonym.

Podnosi się wyraźnie przez programistę interfejsu API, aby wskazać, że metoda została wywołana w niewłaściwym czasie.

przykład:

Thread t = new Thread(); 
t.start(); 
// 
// 
t.start(); 

wyjściowa:

Runtime Excpetion: IllegalThreadStateException 

Nie możemy ponownie rozpocząć wątek, tit rzuci IllegalStateException.