Convertir Java jeu de résultats pour tableau de chaînes
Je suis en train d'écrire un programme qui va interroger une base de données MS access, de retour de la requête sous la forme d'un jeu de résultats, et puis je veux en fin de compte de les convertir l'ensemble des résultats dans un tableau de chaînes, afin que je puisse la passer dans le constructeur d'une Balançoire JComboBox - de sorte que la zone de liste déroulante liste les éléments retournés par la requête.
J'ai été en mesure de stocker les lignes du jeu de résultats dans une liste de tableaux, puis de convertir cette liste de tableaux dans un tableau d'objets, et de la zone de liste déroulante liste les éléments corrects, mais comme des objets. J'ai simplement ne peut jamais jeté que ArrayList pour un tableau de chaînes. Personne ne sait si cela est possible? Ici est une partie de mon code...
//Convert the Resultset into an array list
public ArrayList<ArrayList<Object>> Results2Array(ResultSet rs) throws SQLException {
ResultSetMetaData metaData = rs.getMetaData();
int columns = metaData.getColumnCount();
ArrayList<ArrayList<Object>> al = new ArrayList<ArrayList<Object>>();
while (rs.next()) {
ArrayList<Object> record = new ArrayList<Object>();
for (int i = 1; i <= columns; i++) {
Object value = rs.getObject(i);
record.add(value);
}
al.add(record);
}
return al;
}
//Convert ArrayList to Object Array, and pass into GUI
ArrayList<String> Locations = new ArrayList<String>();
ArrayList<String> Months = new ArrayList<String>();
ArrayList<String> Years = new ArrayList<String>();
try {
DB.loadDriver();
DB.makeConnection();
DB.buildStatement();
Locations = DB.getLocations();
Months = DB.getMonths();
Years = DB.getYears();
Object[] arrLocations = Locations.toArray();
Object[] arrMonths = Months.toArray();
Object[] arrYears = Years.toArray();
dbGUI ui = new dbGUI(arrLocations, arrMonths, arrYears);
ui.setVisible(true);
Quelqu'un peut-il offrir des suggestions? Merci!
Mise à JOUR:
Ici est la trace de la pile que je reçois:
java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.toArray(Unknown Source)
at kidsfirstdb.Main.main(Main.java:23)
OriginalL'auteur littleK | 2009-11-06
Vous devez vous connecter pour publier un commentaire.
Est la réponse correcte. La raison de cette exception est que tous les objets sont en fait pas des chaînes de caractères.
Vous avez besoin de changer cela:
:
ou ceci:
Ce dernier aura besoin d'un nul de vérifier si vous pouvez être de retour null colonnes.
Noter que les méthodes toString() représentation peut ne pas être exactement ce que vous cherchez dans tous les cas, mais il vous permettra de commencer.
Edit: Si vous êtes le remplissage d'une zone de liste déroulante, vous allez avoir besoin d'une colonne par ligne, non? Si non, vous avez besoin de représenter l'ensemble de la ligne comme un string, d'une certaine manière. Ensuite, mettez-vous cela dans la valeur et la mettre directement la valeur dans le tableau final de la liste, de sorte que votre boucle doit ressembler à ceci:
Maintenant, si vous n'avez pas l'esprit, s'il vous plaît partager la trace de la pile.
J'ai ajouté la trace de la pile pour le post original, merci.
Son parce que votre retour ArrayList, n'est pas la liste de Chaîne de caractères, mais de ArrayList, et que ArrayList est d'avoir des chaînes enfin.
J'ai modifié mon post pour inclure du code, ce qui pourrait vous aider. Des acclamations.
OriginalL'auteur Yishai
Pourquoi ne pas utiliser le rs.getString(). Je ne recommande pas de le faire bien. Mais il permettrait de résoudre votre problème. Je veux dire, juste face à la Chaîne dès le début. Exemple,
Maintenant, vous devez obtenir comme ci-dessous.
Mieux encore en train de vérifier le type et obtenir les valeurs de manière appropriée, à l'aide de méta-données que vous rencontrez. Cela vous aidera format de données, à savoir, les dates et les doubles.
OriginalL'auteur Adeel Ansari
String[] arrLocations = locations.toArray(new String[0]);
Le code ci-dessus va convertir la Liste de Chaînes pour tableau de chaînes. Maintenant, dans votre cas, vous êtes à la création d'une Liste d'Objets de sorte que vous ne pouvez pas convertir directement pour le tableau de Chaîne. Généralement, vous avez 2 choix:
String value = rs.getObject(i).toString();
Tout comme une note de côté - méthodes en Java doit commencer avec une lettre minuscule
Voir mon extension de post
Bon travail DroidIn. Mais le fait est que la Liste retournée est une Liste de la Liste. Même si nous utilisons les méthodes toString() ou rs.getString(). Cela ne fonctionnerait pas pour la Liste retournée par la méthode.
C'est conceptuel. L'idée est - si vous avez besoin d'oranges, ne commencez pas avec des pommes
J'ai cent pour cent d'accord. Mais il faut savoir les pommes et les oranges. Et il semble qu'il n'était pas conscient de ce que, par conséquent, il a obtenu exception et il ne pouvait pas trouver la cause.
OriginalL'auteur Bostone