powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / PreparedStatement
14 сообщений из 14, страница 1 из 1
PreparedStatement
    #38830650
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как тут составить 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
PreparedStatement
    #38830652
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
PreparedStatement
    #38830663
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stirng?
...
Рейтинг: 0 / 0
PreparedStatement
    #38830694
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
да, там надо java.sql.date и сделал так
sqldate >= ? AND sqldate <= ?
...
Рейтинг: 0 / 0
PreparedStatement
    #38830695
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
PreparedStatement
    #38830698
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
PreparedStatement
    #38830710
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотя, как то не так...
строка
beginage = 1998-00-00
парсится в java.util.Date как
Sun Nov 30 00:00:00 EET 1997
...
Рейтинг: 0 / 0
PreparedStatement
    #38830713
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
PreparedStatement
    #38830723
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174хотя, как то не так... Стыр-Ту-Дэйт
...
Рейтинг: 0 / 0
PreparedStatement
    #38830724
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
PreparedStatement
    #38830727
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mkЯ про between.
я даже проверку в коде ставить не буду - кто тому юзеру доктор, который выбирет первую дату больше
...
Рейтинг: 0 / 0
PreparedStatement
    #38830734
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mkНе обратил внимания, что в 2х местах перепутаны.
Так работать будет.
да, там логичней было бы поменять местами имена :)
...
Рейтинг: 0 / 0
PreparedStatement
    #38830739
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usmanrema174хотя, как то не так... Стыр-Ту-Дэйт

я ограничился тем как сделано у avp.mk,
гггг-01-01 дает Jan 01 что и надо
...
Рейтинг: 0 / 0
PreparedStatement
    #38830762
J.Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / PreparedStatement
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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