-1
votes

La requête JDBC ne renvoie aucune valeur sans erreur

J'ai un serveur SQL-Server local exécutant Mariadb et doit interroger des données à partir d'une base de données à l'aide de Java et JDBC. Je peux me connecter à la base de données et écrire des données, mais une sélection simple ne fonctionne pas.

J'ai déjà essayé d'utiliser différentes versions du connecteur MySQL-Java et vérifié que le serveur SQL est à jour.

Connexion à la base de données: xxx

La méthode appelée à la fin ressemble à ceci: xxx

le Table "Guilds" dans la base de données "Statdb" a deux colonnes nommées "Guild_uid" (clé primaire, varchar) et "Nom d'affichage" (varchar). J'ai ajouté une entrée avec les valeurs "Guild_1" et "Test Guild".

Comme j'ai une entrée dans la table 'Guilds', je m'attendrais à ce que la console ressemble à ceci: xxx

mais la sortie réelle ressemble à ceci: xxx


1 commentaires

Avez-vous essayé avec deux entrées dans la table 'Guilds'? Commentaire Guildststst (), puis essayez. Guildsstst est déjà déplacé le curseur à la première rangée, puis lorsque vous bouclez avec condition Guild.Next (), votre code ne saisit pas cette boucle car il n'y a pas d'entrée suivante dans la table.


3 Réponses :


1
votes

Je ne pense pas que vous ayez besoin de Guilds.First () . Essayez de le supprimer.

Selon le Resulatset javadoc:

A résultatssette est initialement positionné avant la première rangée; Le premier appel à la méthode suivante fait la première ligne de la ligne actuelle; Le deuxième appel fait la deuxième ligne de la ligne actuelle, etc.

Je crois ce qui se passe ici est, Guilds.First () Définit le curseur de avant première ligne à première rangée. Et guilds.next () dans la boucle tandis que boucle déplacez le curseur pour plus d'une autre étape. Par conséquent, vous manquez la première rangée.


0 commentaires

2
votes

Le Resulats d'abord () Code> La méthode elle-même déplace le curseur sur la première ligne du jeu de résultats. La méthode Numéro () code> déplace ensuite le curseur en avant et lit tout record y est là, si un enregistrement est là.

Par conséquent, l'utilisation de votre modèle entraînera toujours de sauter le premier enregistrer de l'ensemble de résultats. Si le jeu de résultats n'atteigne qu'un seul enregistrement, le nombre d'enregistrements semblera être zéro. P>

Vous devez probablement supprimer l'appel sur ResultsT # premier () code>. Utilisez ceci à la place: p>

ResultSet guilds = qGStmt.executeQuery("SELECT * FROM guilds;");
while(guilds.next()) {
    localInDb.add(guilds.getString("guild_uid").toLowerCase());
}
System.out.println("Queried: " + localInDb.size());
this.guildsInDb = localInDb;


0 commentaires

0
votes

Les deux autres réponses sont correctes, vous sautez la première ligne lors de la récupération de l'ensemble de résultats. Pas besoin de votre ligne guildeds.first (); comme ils l'ont expliqué, le résultat définit des points automatiquement à la première ligne par défaut par défaut.

Exemple de code, récupération de Resultats < / H1>

Voici un exemple complet utilisant le Moteur de base de données H2 . Cela montre la création d'une nouvelle base de données (en mémoire, non persistée au disque), ajout d'une table, peuplement de cette table avec quelques lignes, puis récupérant toutes ces lignes via un ResultSet . .

La ligne de clé est pendant (rs.next ()) {. xxx

lorsque vous exécutez.

Insertion de la liste des noms: [alpha, bêta, gamma, delta]

Row PKEY_: 69908390-5FA6-4EEE-8E12-40106DB8D60D Nom_: Alpha

Row PKEY_: 3116ACB9-FCCE-427F-B222-99C78C6E752A NAME_: BETA

Row PKEY_: B3FD0930-A2E7-461A-BE70-F05124FC58DE Nom_: gamma

Row PKYK_: DDDB423A-5EB2-4E5E-BE16-7BB0C27C0033 Nom_: Delta


0 commentaires