06. maj 2006 - 15:45Der er
5 kommentarer og 1 løsning
Kalde PostgreSQL functions fra Java
Sidder lige og roder med noget Java/PostrgreSQL og er lidt i tvivl om jeg gør tingene "rigtigt". Følgende kodeeksempel virker efter hensigten, men ser i mine øjne en smule rodet ud:
Er det virkelig nødvendigt at have SQL kode med hver gang ("? = CALL"), eller findes der en pænere objektorienteret måde at kalde sine funktions?
Note: Normalt arbejder jeg i C#/MSSQL hvor samme kald ville være noget i stil med: SqlCommand = new SqlCommand("spAuthenticateUser", CommandType.StoredProcedure, conn); cmd.Parameters.Add("@return", SqlDbType.Bit); cmd.Parameters["@return"].Direction = ParameterDirection.ReturnValue; cmd.Parameters.AddWithValue("@userID", userID); cmd.Parameters.AddWithValue("@password", password); cmd.ExecuteNonQuery(); return (bool)cmd.Parameters["@return"].Value;
Jeg kan godt se at .NET koden er en smule længere end Java koden, men jeg synes den er pænenere i og med at jeg kan referere til mine parametre med deres navne i stedet for index og en række "?,?" der skal matche til antallet.
Findes der andre løsninger en den jeg pt. bruger i Java? Jeg kan selv tænke mig til en implementering der vil gøre det enklere, men det ville nu være nemmest om der fandtes noget klar-til-brug i postrgres pakken :)
jeg forstår dog ikke helt hvorfor du skal have "" i din SQL (\"\" i Java) når du ikke har det i C#
det er den rigtige måde at gøre det på
syntaxen kan godt virke lidt primitiv, men den er rimeligt database uafhængig (i ADO.NET skal du bruge @ foran navne i SQLServer, Access og gamle versioner af MySQL provider, ? i ODBC og nyere versioner af MySQL provider, : i Oracle etc. - alle andre end ODBC bruger navnet mens ODBC bruger rækkefølgen etc.)
Ja, jeg har prøvet det uden held. Så vidt jeg har kunne læse mig til SKAL der (pga. en eller anden bug) tages imod en return værdi. Endte med at hacke det således:
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.