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. p>
Connexion à la base de données: p> La méthode appelée à la fin ressemble à ceci: p> 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". P> Comme j'ai une entrée dans la table 'Guilds', je m'attendrais à ce que la console ressemble à ceci: p> mais la sortie réelle ressemble à ceci: p>
3 Réponses :
Je ne pense pas que vous ayez besoin de Selon le A Je crois ce qui se passe ici est, Guilds.First () code>. Essayez de le supprimer. P>
Resulatset code>
javadoc: p>
résultatssette code> 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. p>
blockQuote>
Guilds.First () Code> Définit le curseur de
avant code> première ligne à première rangée. Et
guilds.next () code> 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. P>
Le 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 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à.
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;
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 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 La ligne de clé est lorsque vous exécutez. P> Insertion de la liste des noms: [alpha, bêta, gamma, delta] p>
Row PKEY_: 69908390-5FA6-4EEE-8E12-40106DB8D60D Nom_: Alpha P>
Row PKEY_: 3116ACB9-FCCE-427F-B222-99C78C6E752A NAME_: BETA P>
Row PKEY_: B3FD0930-A2E7-461A-BE70-F05124FC58DE Nom_: gamma p>
Row PKYK_: DDDB423A-5EB2-4E5E-BE16-7BB0C27C0033 Nom_: Delta P>
blockQuote> p> guildeds.first (); code> 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 Code> < / H1>
ResultSet code>. P>.
pendant (rs.next ()) { code>. p>
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.