Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / PreparedStatement / 14 сообщений из 14, страница 1 из 1
10.12.2014, 19:30
    #38830650
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
Подскажите, как тут составить PreparedStatement

Код: java
1.
2.
3.
4.
5.
6.
7.
String sql = SELECT * FROM members WHERE country = ? AND sex = ? AND sqldate between = ? AND = ?

String endage="1950-00-00";
Stirng beginage="1998-00-00";

ps.setString(i, endage);
ps.setString(i, beginage);



You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '1950-00-00' AND = '1998-00-00'' at line 1
...
Рейтинг: 0 / 0
10.12.2014, 19:39
    #38830652
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
...
Рейтинг: 0 / 0
10.12.2014, 19:56
    #38830663
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
Stirng?
...
Рейтинг: 0 / 0
10.12.2014, 20:43
    #38830694
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
mayton,
да, там надо java.sql.date и сделал так
sqldate >= ? AND sqldate <= ?
...
Рейтинг: 0 / 0
10.12.2014, 20:45
    #38830695
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
rema174'1950-00-00' AND = '1998-00-00'
Нулевой месяц, нулевой день..

В oracle (не знаю как MySQL) первый параметр (beginage) у between не должен быть больше, иначе под селект не попадут нужные данные.

Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
package dbextract;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import static dbextract.Db.*;
import static java.lang.System.out;

public class DbExtract {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        int countryId = 7;
        int regularly = 1;

        Date dateFrom = Date.valueOf("1950-01-01");
        Date dateTo   = Date.valueOf("1998-01-01");

        try (
                Connection connection = getConnection();
                PreparedStatement psMembers = connection.prepareStatement(
                        "SELECT * FROM members " +
//                      "WHERE country = ? AND sex = ? AND sqldate BETWEEN = ? AND = ?"
                        "WHERE country = ? AND sex = ? AND sqldate BETWEEN ? AND ?" //ORACLE SYNTAX
                )
            ) {

            psMembers.setInt (1, countryId);
            psMembers.setInt (2, regularly);
            psMembers.setDate(3, dateFrom);
            psMembers.setDate(4, dateTo);

            try (ResultSet rs = psMembers.executeQuery()) {
                int count = rs.getMetaData().getColumnCount();
                while (rs.next()) {
                    for (int i = 1; i <= count; ++i) {
                        out.print("  " + rs.getString(i));
                    }
                    out.println();
                }
            }
        }
    }
}
...
Рейтинг: 0 / 0
10.12.2014, 20:52
    #38830698
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
avp.mkВ oracle (не знаю как MySQL) первый параметр (beginage) у between не должен быть больше, иначе под селект не попадут нужные данные.

вроде так в mysql нормально
SELECT *
FROM `members`
WHERE sqldate >= '1974-00-00'
AND sqldate <= '1981-00-00'
LIMIT 0 , 30
...
Рейтинг: 0 / 0
10.12.2014, 21:05
    #38830710
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
хотя, как то не так...
строка
beginage = 1998-00-00
парсится в java.util.Date как
Sun Nov 30 00:00:00 EET 1997
...
Рейтинг: 0 / 0
10.12.2014, 21:05
    #38830713
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
rema174avp.mkВ oracle (не знаю как MySQL) первый параметр (beginage) у between не должен быть больше, иначе под селект не попадут нужные данные.

вроде так в mysql нормально
SELECT *
FROM `members`
WHERE sqldate >= '1974-00-00'
AND sqldate <= '1981-00-00'
LIMIT 0 , 30
Я про between.

Что надо так
Код: plsql
1.
SELECT COUNT(*) FROM members WHERE sqldate BETWEEN '1950-01-01' AND '1998-01-01'


А не так
Код: plsql
1.
SELECT COUNT(*) FROM members WHERE sqldate BETWEEN '1998-01-01' AND '1950-01-01'
...
Рейтинг: 0 / 0
10.12.2014, 21:19
    #38830723
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
rema174хотя, как то не так... Стыр-Ту-Дэйт
...
Рейтинг: 0 / 0
10.12.2014, 21:19
    #38830724
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
rema174
Код: java
1.
2.
3.
4.
5.
String endage="1950-00-00";
Stirng beginage="1998-00-00";

ps.setString(i, endage);
ps.setString(i, beginage);


avp.mkЯ про between.[/src]

Не обратил внимания, что в 2х местах перепутаны.
Так работать будет.
...
Рейтинг: 0 / 0
10.12.2014, 21:20
    #38830727
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
avp.mkЯ про between.
я даже проверку в коде ставить не буду - кто тому юзеру доктор, который выбирет первую дату больше
...
Рейтинг: 0 / 0
10.12.2014, 21:25
    #38830734
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
avp.mkНе обратил внимания, что в 2х местах перепутаны.
Так работать будет.
да, там логичней было бы поменять местами имена :)
...
Рейтинг: 0 / 0
10.12.2014, 21:30
    #38830739
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
Usmanrema174хотя, как то не так... Стыр-Ту-Дэйт

я ограничился тем как сделано у avp.mk,
гггг-01-01 дает Jan 01 что и надо
...
Рейтинг: 0 / 0
10.12.2014, 22:53
    #38830762
J.Serge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PreparedStatement
rema174Подскажите, как тут составить PreparedStatement

SELECT * FROM members WHERE country = ? AND sex = ? AND sqldate between = ? AND = ?

Убери нах

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= '1950-00-00' AND = '1998-00-00'' at line 1
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / PreparedStatement / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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