2016-04-06 7 views
0

Mein Problem, über vorbereitete Anweisungen in Java:Java vorbereitet wie Anweisung mit einer ganzen Zahl

SELECT TrackingId FROM table where TrackingId = 5735053 

TrackingID ist eine Integer-Spalte in der Datenbank. Whe i die Abfrage zu ändern:

SELECT TrackingId FROM table where TrackingId = '5735053' 

funktioniert es gut, wie er es automatisch konvertiert. Gleiches gilt für diese Abfrage:

SELECT TrackingId FROM table where TrackingId LIKE '%5735%' 

Dies funktioniert gut und die Datenbank findet Ergebnisse. In Java möchte ich den Eingabewert des Benutzers an die Abfrage übergeben. Es arbeitet mit String und dergleichen Aussage aber nicht mit int:

String query = "SELECT AnyString FROM table where AnyString like ?"; 

connectDatabase(); 

pstmt = connection.prepareStatement(query); 
pstmt.setString(1, "%"+input+"%"); 
result = pstmt.executeQuery(); 

Jetzt möchte ich einen Integer durch diese Anweisung übergeben, und ich habe viele Dinge, aber immer 0 Ergebnisse versucht. Also das wird nicht funktionieren:

Aber wenn ich die Abfrage in meinem Datenbank-Programm eingeben funktioniert es gut und er findet Ergebnisse. Kann mir hier jemand helfen?

+0

Haben Sie debuggen, um herauszufinden, was der Wert von 'input' ist? Das scheint mir richtig zu sein. –

+0

Sie könnten versuchen, entweder das Feld zu varchar zu konvertieren: 'cast (AnyInt als varchar)' oder den Parameter: 'cast (? As varchar)'. Ich bin nicht 100% sicher, dass der Parameter von SQL Server unterstützt wird. –

+0

Danke für die Antwort. Deine Antwort ist richtig. Aber ich fand einen Fehler in meinem Java-Code und es funktioniert auch ohne die Besetzung. –

Antwort

0

Sie können das Feld in varchar umwandeln: cast(AnyInt as varchar). Der Grund, warum es als Literal funktioniert, ist, dass SQL Server dann weiß, dass es ein Vergleich zwischen int und string ist und das int automatisch in string konvertiert. Wenn Sie jedoch einen Parameter verwenden, hat der Parameter denselben Typ wie die Spalte: int, also ist der Wert %<somenumber>% kein gültiger Wert (obwohl ich überrascht bin, dass Sie keine Ausnahme erhalten).

Eine andere Option könnte sein, den Parameter zu werfen: cast(? as varchar). Ich bin nicht 100% sicher, dass der Parameter von SQL Server unterstützt wird.

Verwandte Themen