Jak otrzymać datę z JSpinner'a w formacie "rrrr-mm-dd&q

0

Wyjaśnię jak to wszystko u mnie działa:

Jest aplikacja połączona z bazą danych. Pobieram wartość JSpinnera (są dwa: START i KONIEC):

start = (String) jSpinner1.getValue().toString();
koniec = (String) jSpinner1.getValue().toString();

i zapisuje do zmiennych. Pozniej zmienne przekazuję do metody:

String test(String start,String koniec){
    String query ="SELECT kiedy, salary FROM employees WHERE kiedy >="+start+"and kiedy <="+koniec+" ORDER BY kiedy";
    return query;
}

... w wyniku otrzymuję kwerendę ktora wędruje do innej metody

Problemem jest to ze zeby to wszystko działało format wyjsciowy z JSpinnera musi mieć postać : "RRRR-MM-DD", a jest tak ze jak pobieram wartosc tak :start = (String) jSpinner1.getValue().toString(); to mam to w formacie "Thu Jun 29 2000 CEST 2006"

0

Za pomocą tego Stringa możesz utworzyć obiekt Calendar i z niego pobrać datę w interesującym formacie.

0

Pobierz z JSpinnera Date ((Date) JSpinner.getValue()) a pozniej utworz sobie SimpleDateFormat i uzyj ktorejstam metody ktora bierze date i wypluwa string w formacie z jakim utworzyles formattera.

0

Dzieki za pomoc dalem rade ...ale dalej przeszkoda

metoda wyrzuca mi daty tak jak trzeba i w ten sposob powstaje mi kwerenda w posataci

SELECT kiedy, salary FROM employees WHERE kiedy >= 2010-02-01 and kiedy <= 2010-04-45 ORDER BY kiedy"

... i to jest moj problem poniewaz data powinna mieć postać nie 2010-02-10 a '2010-02-10' bo dopiero wtedy "widzi" to jako datę

0

Ogolnie to robisz to zle dlatego ze sam sklejasz zapytanie. Zrob parametry:
select costam from costam where kiedy < :kiedy
Query czy to hibernatowe cos ma metody do ustawiania parametrow w stylu:
query.setParameter("kiedy", kiedy)
tak samo ma dla Calendar, stringow intow itp. Tego powinienes uzyc, poniewaz jest bezpieczniejsze, pozbywasz sie takich problemow, no i nie jest podatne na sql injection.

0

ogólnie jak nie używasz frameworka to proponuje takie coś jak PreparedStatement, ma właśnie metody set różnych typów

0

Racja, jakos mi sie zmieszaly ostatnie posty i myslalem ze chodzi tutaj o Hibernate. Sory za zamieszanie; wskazowka na temat PreparedStatement jest oczywiscie dobra.

0

Chlopaki ogolnie chce stworzyc metode ktora mi bedzie zwracala kwerende jako String bo mam takie ograniczenie ze storny JDBCCategoryDataset

JDBCCategoryDataset( PolaczenieDoBazyDanych, KWERENDA);
KWERENDA musi być Stringiem

Poczytalem o PreparedStatement i zeby utworzyc obiekt to musze mu podac polaczenie do bazy. Wychodzi maslo maslane bo polaczenie do bazy juz mam zadeklarowane w JDBCCategoryDataset.

0

Dlaczego koniecznie musisz używać tego konkretnego rozwiązania?
JFreeChart ma otwarty kod. Możesz spróbować na podstawie tej klasy stworzyć własną, która rozszerzy ją o obsługę PreparedStatement. Nie powinno to być jakieś ekstremalnie trudne.
http://jfreechart.svn.sourceforge.net/viewvc/jfreechart/trunk/source/org/jfree/data/jdbc/JDBCCategoryDataset.java?revision=2194&view=markup

Kod źródłowy klasy. Niestety trzeba zrobić kopiuj wklej dużej części, bo jest spieprzony design (jednak obróbkę rezultatów wywalił bym do osobnej metody). No ale, będzie czas to i podeślę tam moją poprawkę

//edit: dałem poprawny link do trunka

  • edit2: https:*sourceforge.net/tracker/?func=detail&aid=2969335&group_id=15494&atid=365494 zgłoszony request w załączniku nowa wersja klasy.
0

Dzięki koziołek ze rozszerzenie JDBCCategoryDataset [browar]...
Mam jedno pytanko. Jeżeli metoda wygląda :

public class JDBCCategoryDataset extends DefaultCategoryDataset {
...
public JDBCCategoryDataset(Connection connection, PreparedStatement statement) throws SQLException 
{
	this(connection);
	executeQuery(statement);
}

to metoda ktora tworzy PreparedStatement powinna wygladać tak ? :

public PreparedStatement ask(String start, String koniec) throws SQLException
    {
            Connection con = null;
            String sql = "SELECT kiedy, salary FROM employees " + "WHERE kiedy >= ?  and kiedy <= ? and department_id = 100" + "ORDER BY kiedy";
            PreparedStatement prepState = con.prepareStatement(sql);
            prepState.setString(1, start);
            prepState.setString(2, koniec);

            return prepState;
    }
0

Nie, bo się wysypie. Connection jest null i nie będzie możliwości wykonania metody prepareStatement(). Najłatwiej dołożyć parametr connection.

0

A po co to sklejanie zapytania, juz jest niepotrzebne. Poza tym, jak koniecznie chcesz sklajac, to ostatnie 2 stringi sklejone dadza bledne zapytanie: 100 styka sie z ORDER.

0

::.
A po co to sklejanie zapytania, juz jest niepotrzebne. Poza tym, jak koniecznie chcesz sklajac, to ostatnie 2 stringi sklejone dadza bledne zapytanie: 100 styka sie z ORDER.

Nie zauważyłem - dzieki. A po co sklejam ? Już tłumaczę ... mam te dwa JSpinnery ktorymi ustawiam date i ich wartosci (start,koniec) chce wrzucac do kwerendy. W kwerendzie zmieniaja se tylko te dwa pola.

0

Chodzi mi o to:
String sql = "SELECT kiedy, salary FROM employees " + "WHERE kiedy >= ? and kiedy <= ? and department_id = 100" + "ORDER BY kiedy";
To nie ma zadnego zwiazku z spinnerami i datami, ktore teraz podstawiasz jako parametry. To jest to samo:
String sql = "SELECT kiedy, salary FROM employees WHERE kiedy >= ? and kiedy <= ? and department_id = ? ORDER BY kiedy";
Wiem czepiam sie. Dodatkowo ten departmen_id zrobilem tez parametryzowany.

0

OK, działa mi już wszystko. Dzieki Koziołek & ::. [browar]

0

Chodzi mi o to:
String sql = "SELECT kiedy, salary FROM employees " + "WHERE kiedy >= ? and kiedy <= ? and department_id = 100" + "ORDER BY kiedy";
To nie ma zadnego zwiazku z spinnerami i datami, ktore teraz podstawiasz jako parametry. To jest to samo:
String sql = "SELECT kiedy, salary FROM employees WHERE kiedy >= ? and kiedy <= ? and department_id = ? ORDER BY kiedy";
Wiem czepiam sie. Dodatkowo ten departmen_id zrobilem tez parametryzowany.

aaaaa o to... wiesz ja jestem gosciem ktory nie lubi uzywac scroll'ow poziomych :-) do czytania kodu, szczególnie że ta kwerenda bedzie dosc długa i uzupełniona o parametryzowane departmenty_id - tak jak zrobiłeś :-D

Jeszcze raz Podziekowania

1 użytkowników online, w tym zalogowanych: 0, gości: 1