2016-04-09 17 views
0

Arama filtresini uygulamak istediğim bu tabloyu kullanıyorum.PostgreSQL tablosunda arama

CREATE TABLE ACCOUNT(
ID INTEGER NOT NULL, 
USER_NAME TEXT, 
PASSWD TEXT, 
FIRST_NAME TEXT, 
LAST_NAME TEXT, 
LAST_LOGIN DATE, 
DATE_REGISTERED DATE, 
ROLE INTEGER, 
CAN_LOGIN INTEGER 
) 
; 

-- ADD KEYS FOR TABLE ACCOUNT 

ALTER TABLE ACCOUNT ADD CONSTRAINT KEY1 PRIMARY KEY (ID) 
; 

String searchString = "32";

SELECT * FROM ACCOUNT 
WHERE " + searchString + " IN (ID, USER_NAME, FIRST_NAME, LAST_NAME) ORDER BY %S %S offset ? limit ?; 

Ben

serverError: class java.lang.IndexOutOfBoundsException Index: 0, Size: 0 

Ayrıca ben arama yapmak istedikleri her tablo sütun belirtmek istemiyorum hata olsun. Tüm sütunlarda varsayılan olarak arama yapmanın bir yolu var mı? Ve sadece aramak istemediğim bir sütun belirtin mi?

+0

(1) değişken değişimi sonrasında sorgu yazdırın. (2) Hatanızı iletinize ekleyin. –

+0

Nasıl olduğunu gösterebilir misin? SQL ile çok az tecrübem var mı? –

+0

[Bir tablodaki tüm sütunları nasıl arayabilirim?] 'I denetleyin (http://stackoverflow.com/questions/7922744/how-can-i-search-all-columns-in-a-table). Neyse 'IN' sadece kesin eşleşmeleri alır. – lad2025

cevap

2

IN listesindeki bir tür dönüştürme sorununuz var. Bunların hepsi aynı tip olmalı, bu yüzden karşılaştırılanın türüne dönüştürülürler. Ve, dizeleri ints'e dönüştürmek için bir başarısızlık vardır.

Eğer tek tırnak içerisine Eğer

, sonra sorgu çalışması gerekir:

WHERE '" + searchString + "' IN (ID, USER_NAME, FIRST_NAME, LAST_NAME) 
+1

Teşekkürler. Boş bir arama dizim olduğunda şunu elde ederim: org.postgresql.util.PSQLException: ERROR: tamsayı için geçersiz giriş sözdizimi: "null" Konum: 30' Dize filtresi boşsa aramayı nasıl atlayabilirim? –

+0

İki farklı sorgu yazmayı öneririm. –

+0

Lütfen bu yazıyı kontrol edin http://stackoverflow.com/questions/36522826/implement-search-filter-for-all-columns –