Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > поиск по базе


Автор: kostay 30.5.2007, 01:40
кто нибудь может обьеснить как искать в базе набор символов которые задоются (4асть слова кпримеру) 
сам принцып каков?
если перебрать каждую строку, и как? а найти в етой строке набор нужных символов как?
если не трудно то пару примеров былоб неплохо или ссылок на похожее, 4тото ни4его не найду

Автор: nornad 30.5.2007, 03:03
Если SQL, то старый добрый LIKE тебе в помощь:
Код

SELECT * FROM my_table WHERE my_column LIKE '%kostay%';

Автор: LSD 30.5.2007, 10:59
Самый простой - это оператор LIKE. Некоторые СУБД позволяют использовать регулярные выражения. Еще можно использовать пользовательские функции.

Если база большая то тут уже надо использовать полнотекстовый поиск.

Модератор: перемещено из Java: Общие вопросы.

Автор: kostay 30.5.2007, 22:24
ешо... 
большие и маленькие буквы роль имеет? мне надо 4тобы не имело....тоесть ишу 'текст' находит Текст и теКст 
и как переменную внести?
PreparedStatement + ? так?

Автор: SergeBS 31.5.2007, 08:20
kostay, 
А как насчет элементарного знания предмета? Идешь на http://forum.vingrad.ru/forum/computer-books-literature.html и читаешь Грабера "Понимание SQL". Или в хелпе своего сервака ищешь слово UPPER, UPPERCASE и т.п. Так оно быстрее и лучше выйдет.

Автор: batigoal 31.5.2007, 10:17
Цитата(kostay @  30.5.2007,  23:24 Найти цитируемый пост)
большие и маленькие буквы роль имеет? мне надо 4тобы не имело....тоесть ишу 'текст' находит Текст и теКст 

LIKE будет искать в соответствии с регистром твоих букв. Если хочешь этого избежать - делай
Код

SELECT * FROM my_table WHERE UPPER(my_column) LIKE '%SEARCH LINE%'; 

Цитата(kostay @  30.5.2007,  23:24 Найти цитируемый пост)
PreparedStatement + ? так? 

Да, можно и так.

Автор: kostay 5.6.2007, 01:00
на любой поск мне принтуется null
и как к ? присоба4ить %%

база access, s[i] размер 10
searchline тоже переведина в uppercase 
вобшем надо 4тобы с[и] заполнился результатами поиска

Код

try {
                ps = connection.prepareStatement(
                        "SELECT pvm FROM calendar WHERE UCASE(notes) = ? ORDER BY pvm");
                ps.setString(1,searchline);
                result = ps.executeQuery();
                ps = null;

                while (result.next()) {
                    for(int i=0; i< s.length; i++){
                        
                        s[i] = result.getString("pvm");
                        System.out.println(s[i]);

                    }
                }

Автор: LSD 5.6.2007, 07:42
Чему у тебя равно searchline?

Автор: batigoal 5.6.2007, 11:09
Цитата(kostay @  5.6.2007,  02:00 Найти цитируемый пост)
и как к ? присоба4ить %%

Как обычные символы.

Автор: kostay 5.6.2007, 11:26
searchline = ТЕКС, етот текс то4но есть в базе, при вставке в функцию делаю uppercase

Код

ps.setString(1,"%"+searchline+"%");

так не помогает

Автор: LSD 5.6.2007, 12:07
Текст который ты ищешь в русской кодировке?

Автор: kostay 5.6.2007, 12:22
searchline = jTextField.getText().toUpperCase()

ишу loma в базе есть слово Loma, в поле notes среди текста, мне в с[и] надо записать все даты из pvm столбца ну сколько влезет

может тут 4о не так?
Код

private PreparedStatement ps;
private ResultSet result;

Автор: batigoal 5.6.2007, 18:17
Цитата(kostay @  5.6.2007,  02:00 Найти цитируемый пост)
WHERE UCASE(notes) = ?

Должно быть
Код

WHERE UCASE(notes) LIKE ?

Автор: kostay 5.6.2007, 19:25
Цитата(batigoal @ 5.6.2007,  18:17)
Цитата(kostay @  5.6.2007,  02:00 Найти цитируемый пост)
WHERE UCASE(notes) = ?

Должно быть
Код

WHERE UCASE(notes) LIKE ?

пробовал, но тогда java.sql.SQLException: No data found
и ку4а других ошибок опять ишу loma в базе есть Loma 

пишет 4то, одна из ошибок гдето тут s[i] = result.getString("pvm");

Автор: kostay 6.6.2007, 01:12
удалил фор, терь всё принтует нармально и 4отко... странно

поменял код сделал вот так, снова ошибки.. как мне результат то в стринг засунуть
Код

                while (result.next()) {
                    
                    s[0] = result.getString("pvm"); // bez etoj stroki vsjo ok
                        System.out.println(result.getString("pvm"));
                    
                }


и так:

Код

        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            connection = DriverManager.getConnection("jdbc:odbc:calendar");
            statement = connection.createStatement();
            
            resultset = statement.executeQuery("SELECT pvm FROM calendar WHERE UCASE(notes) LIKE '%" + searchline + "%'");
            
            while (resultset.next()) {
                System.out.println(resultset.getString(1));
                field = resultset.getString("pvm");// bez etoj stroki vsjo ok
            }
            statement.close();
            connection.close();
        }

Автор: kostay 6.6.2007, 02:14
о а вот так пашет... вот так вот. долго му4елся. всем спасибо

Код

try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            connection = DriverManager.getConnection("jdbc:odbc:calendar");
            statement = connection.createStatement();
            
            resultset = statement.executeQuery("SELECT pvm FROM calendar WHERE UCASE(notes) LIKE '%" + searchline + "%'");
            
            while (resultset.next()) {
                int i = 0;
                //System.out.println(resultset.getString(1));//stranno dva raza k resultu nel'zja obratitsja?
                field[i] = resultset.getString(1);
                System.out.println(field[i]);
                i++;
            }
            statement.close();
            connection.close();
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)