java.sql.SQLException:[Microsoft][Gestionnaire de pilotes ODBC] descripteur non Valide index
J'utilise le code suivant
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:access");
String sql = "Select * from table";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery( sql );
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
for (int i = 1; i <= columns; i++) {
columnNames.addElement( md.getColumnName(i) );
}
while (rs.next()) {
Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++){
row.addElement( rs.getObject(i) );
}
data.addElement( row );
}
rs.close();
stmt.close();
}catch(Exception e){
System.out.println(e);
}
Il affiche:
java.sql.SQLException:[Microsoft][ODBC Driver Manager] Invalid descriptor index
Comment est-il la cause et comment puis-je le résoudre?
À quelle ligne exactement est-il jeté? Vous pouvez trouver le numéro de la ligne dans la 1ère ligne de la stacktrace. L'exception suggère que vous tentez d'accéder à un faux/inconnu colonne dans le jeu de résultats. Mais l'extrait de code dans votre question ne donne pas que de là.
Merci pour la mise à jour du code. Mais la gestion des exceptions est très pauvre. Remplacer que
Merci pour la mise à jour du code. Mais la gestion des exceptions est très pauvre. Remplacer que
System.out.println(e)
ligne par e.printStackTrace()
ou tout simplement throw e
. De cette façon, vous obtenez le plein stacktrace et vous pouvez en apprendre davantage sur le numéro de la ligne où ce problème s'est produite.OriginalL'auteur Tepken Vannkorn | 2011-06-15
Vous devez vous connecter pour publier un commentaire.
Je doute que l'exception est levée par une des lignes dans la posté code. J'ai mes raisons d'état.
Une SQLException avec le message "Invalid index descripteur" est généralement obtenue lorsque vous lisez l'ensemble de résultats de manière incorrecte. Il y a différentes façons dont ce scénario peut se manifester:
Si vous avez besoin de le résoudre, vous avez besoin de savoir qui de l'une des conditions ci-dessus est vrai dans votre code, et de rectifier en conséquence.
Est-ce la même chose que "SELECT * from tblRoom" ? c-il y a 4 colonnes dans tblRoom?
sûr qu'ils sont. j'ai cherché d'autres ressources et ils m'ont dit une telle chose.
Étrange. Je pense que vous pouvez envoyer un projet de loi à Microsoft pour trouver un problème.
"Lire dans les colonnes de l'ordre..." j'ai changé dans mon cas, eu un café, égorgé un poulet alors il s'en alla, comme par magie. Merci.
OriginalL'auteur Vineet Reynolds
J'ai eu exactement la même erreur, ce de un Express Driver ODBC pour Delphi.
La solution que j'ai trouvé est:
Placez votre varchar(max) et ou varbinary(max) champs à la fin de votre Requête select. (L'ordre dans la définition de la table n'a pas d'importance).
Ce vraiment fixé pour nous, la pensée de partager avec vous les gars.
OriginalL'auteur Remco
Je sais que ce bug depuis de nombreuses années en utilisant le pilote ODBC avec PHP. Essayez de placer votre texte et de l'image des colonnes à la fin de la liste de sélection.
Ne pas utiliser
mais énumérer de façon rigide
Malheureusement, Microsoft n'est pas fatigué par la fixation d'un bug. JDBC driver fonctionne OK.
select plain_column1, plain_column2, .... image_column from t
qui me donnait une erreur, mais quand j'ai changé la requête deselect * from t
puis exception résolu.OriginalL'auteur Hink
Qui va se produire si vous essayez d'avoir le jeu de résultats valeur de la variable dans la valeur de l'indice de 0.
Par exemple:
Considérons un tableau de 5 colonnes:
OriginalL'auteur
J'ai eu une erreur
SÉVÈRE: null
java.sql.SQLException: [Microsoft][SQL Server Native Client 10.0]Descripteur non Valide Indice
code a été
le correctif est de rs.getString doit être dans le même ordre de SQL
de sorte que le code doit être
OriginalL'auteur Shashika Fernando