2010-11-12 5 views
2

Clause de non-responsabilité: Je ne connais rien à Oracle ni à Java. Le problème est dans un projet qu'un autre développeur a terminé à un moment donné, puis a quitté l'entreprise. Maintenant, je dois configurer le serveur web, la base de données et tout faire fonctionner.ResultSet.getString() sur la colonne VARCHAR2 renvoie la chaîne vide

le code est environ ceci:

OracleDataSource ods = new OracleDataSource(); 
ods.setURL("jdbc:oracle:thin:<user>/<password>@localhost:1521:xe"); 
OracleConnection ocon = (OracleConnection)ods.getConnection(); 
OracleStatement stmt = (OracleStatement)ocon.createStatement(); 
OracleResultSet rs = (OracleResultSet)stmt.executeQuery("SELECT POLLID, QUESTION, ISMULTISELECT FROM POLL WHERE POLLID = " + pollID); 

if (!rs.next()) { 
    System.out.println("No rows found."); 
    return false; 
} 
this._PollID = rs.getInt("POLLID"); 
this._Question = rs.getString("QUESTION"); 
this._IsMultiSelect = rs.getBoolean("ISMULTISELECT"); 

Les colonnes POLLID et ISMULTISELECT retour valeurs correctes comme prévu. La question semble toujours retourner la chaîne vide. La valeur dans la base de données n'est évidemment pas vide. Le rs.getAsciiStream("QUESTION").available() renvoie également 0. Est-ce que je manque quelque chose de complètement évident ici?

EDIT:

  • sqlplus renvoie la valeur varchar2 très bien

  • connexion via odbc (par opposition à mince) fait aussi les choses fonctionnent

+0

(SQL Developer est gratuit et facile à configurer, en particulier puisque l'utilisateur/psrd & server sont déjà présents pour vous) – Harrison

+0

sqlplus renvoie des données très bien. –

+1

Quel type de données est 'QUESTION' dans la table -' VARCHAR2'? 'CLOB'? –

Répondre

1

Merci à tous ceux qui ont répondu. À ce stade, il semble question est entre le pilote mince et la version XE d'Oracle. Malheureusement nous n'avons pas la version complète kickin 'autour (nous sommes principalement des développeurs SQL ASP.NET/MS), donc nous devrons rester avec le pilote ODBC pour l'instant et espérons que le problème se résolvent comme par magie quand nous le poussons vers l'environnement vivant (hébergé par un tiers). Hypothèse très merdique à faire, mais à ce stade, je ne vois pas d'autres options ....

1

donc pas d'exception, vous êtes n'utilisant pas les mots réservés ... peut-être essayer d'utiliser un autre pilote, ou sélectionner dans une autre table et expérimenter commencer avec la colonne QUESTION vide, puis ajouter de la valeur et déboguer.

+0

Y a-t-il une combinaison java/driver/oracle spécifique que je devrais viser? –

1

J'ai eu le même problème et j'ai trouvé que la racine du problème venait de l'orai18n.jar. Une fois que j'ai enlevé ceci de mon classpath, le problème est parti.

0

J'ai eu ce même problème avec eclise GCJ (stock centos6) et mysql-connecteur avec les mêmes requêtes concaténées. Le problème a été résolu en revenant à openJDK.

1

J'ai le même problème. Je n'ai pas accès au pilote utilisé car la connexion est prise depuis un serveur Weblogic utilisant JNDI. Je ne peux pas supprimer .jar du serveur non plus.

La solution que je trouve:

String value = new String(resultset.getBytes()); 

Assurez-vous d'utiliser le bon encodage si nécessaire:

String value = new String(resultset.getBytes(), [CHARSET]) 
0

J'ai eu le même problème. "getInt()" retournera une valeur correcte d'Oracle 9i DB, mais l'utilisation de "getString()" se traduirait par une chaîne vide, peu importe le nombre de fois que je courrais, dans eclipse ou à l'extérieur sur Tomcat ou d'autres serveurs. Après avoir passé par beaucoup de threads différents, et quelques essais, je suis arrivé à la conclusion que le problème est avec la version de ojdbc6.jar que j'utilisais. Auparavant, j'utilisais ojdbc6.jar avec Oracle version 12.1.0.1., Ce qui n'est pas très bon pour se connecter à OLD Oracle 9i DB. Après avoir réalisé, je suis passé à ojdbc6.jar d'Oracle 11.2.0.3 et cela a fonctionné comme un charme.

Espérons que ça aide. à votre santé! Que se passe-t-il lorsque vous exécutez la requête par elle-même dans SQL Plus ou SQL Developer?

+0

Cela aurait du être un commentaire. – Billa

+0

ouais je n'ai pas assez de points pour commenter sur les autres messages encore! – Calvin

Questions connexes