2009-11-06 40 views
8

MS erişim veritabanını sorgulayacak bir program yazıyor, sorguyu bir sonuç kümesi olarak döndürüyor ve sonra sonuç kümesini bir String dizisine dönüştürmek istiyorum. Bir Swing JComboBox yapıcısı içine - böylece ComboBox sorgu tarafından döndürülen öğeleri listeler.Java resultset'i String dizisine dönüştürme

Sonuç kümesinin satırlarını bir ArrayList'e kaydedebildim ve ArrayList öğesini bir nesne dizisine dönüştürdüm ve açılan kutu doğru öğeleri listeler ancak nesneler olarak listeler. Bu ArrayList'i bir String dizisine dönüştüremiyorum. Bunun mümkün olup olmadığını bilen var mı? İşte benim kodumdan bazıları ...

// 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); 

Herhangi bir öneride bulunabilir mi? Teşekkürler!


GÜNCELLEME:

İşte

ben alıyorum Yığın izleme:

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) 

cevap

5
String[] arrLocations = locations.toArray(new String[0]); 

Doğru cevap. Sizin istisnanızın nedeni, tüm nesnelerin aslında dizgiler olmamasıdır. Eğer iade eğer sonuncusu boş çek gerekir

String value = rs.getObject(i).toString(); 

O:

String value = rs.getString(i); 

veya bu: Buna

Object value = rs.getObject(i); 

:

Bu değiştirmeniz gerekir boş sütunlar.

toString() temsilinin, her durumda tam olarak aradığınız şey olmayabilir, ancak başlamanızı sağlayacağını unutmayın.

Düzenleme: Bir açılır kutuyu doldurursanız, satır başına bir sütuna ihtiyacınız olacak, değil mi? Eğer değilse, tüm satırı bir şekilde bir dizge olarak temsil etmelisiniz.Sonra sen ve değer senin döngü böyle bakmak gerekiyor bu yüzden, son dizisi listesindeki doğrudan değerini koymak koyun: rs.getString

ArrayList<String> al = new ArrayList<String>(); 
    while (rs.next()) { 
      ArrayList<String> record = new ArrayList<String>(); 
      for (int i = 1; i <= columns; i++) { 
        String value = rs.String(i); 
        record.add(value); 
      } 
      String value = methodWhichConvertsArrayListToStringTheWayYouNeedItFormatted(record); 
      al.add(value); 
    }   
    return al; 
+0

Yardımlarınız için teşekkürler. Önerdiğin şeyi denedim ve hala bu istisnaları String [] arrLocations = locations.toArray (new String [0]); – littleK

+0

Şimdi eğer sakıncası yoksa lütfen yığın izlemeyi paylaşın. –

+0

Yığın izini orijinal gönderiye ekledim, teşekkürler. – littleK

3

String[] arrLocations = locations.toArray(new String[0]);

Yukarıdaki kod dize dizisine Strings Listesi dönüştürecektir. Şimdi sizin durumunuzda Nesne Listesi oluşturuyorsunuz, böylece onu doğrudan String dizisine dönüştürebilirsiniz. Genellikle 2 seçenek vardır:

  1. Başlangıçta Strings Listesi olarak Listesini tanımlamak ve Listesini doldururken (Anlamlı dize değerini üreten/Nesne # toString yapıyor ya çıkararak eter) Strings için değerlerini dönüştürmek ve içine depolayabilirsiniz Liste, örneğin kodunuzda buString value = rs.getObject(i).toString();
  2. Eğer 1. adımda bunu yapmazsanız, bir String dizisi ayırmanız, Listenizde dolaşmanız, mevcut değeri String'e dönüştürmeniz ve diziye yapıştırmanız gerekir. Ben sadece bir yan not olarak opsiyon 1.

ile gider - Java yöntemleri küçük harfle başlamalıdır

+0

Bunu daha önce denedim ve bana veriyordu: java.lang.ArrayStoreException java.lang.System.arraycopy (Yerli Metodu) en \t java.util.Arrays.copyOf de \t (Bilinmeyen Kaynak) java.util.ArrayList.toArray (Bilinmeyen Kaynak) kidsfirstdb.Main.main (Main.java:23) en \t de \t – littleK

+1

benim genişletilmiş sonrası – Bostone

+0

İyi iş DroidIn bakın. Ama gerçek şu ki, geri dönen Liste bir Liste Listesi'dir. ToString() veya rs.getString() 'i kullansak bile. Yöntem tarafından döndürülen Liste için işe yaramaz. –

5

Neden kullanmayın(). Bunu yapmak için tavsiye etmem. Ama problemini çözebilirdi. Demek istediğim başlangıçtaki String'le uğraşmak. Örneğin, aşağıda olduğu gibi almanız gerekiyor. Şimdi, aşağıdaki gibi olması gerekir.

String[][] arrLocations = locations.toArray(new String[locations.size()][0]); 

Halen sahip olduğunuz meta verileri kullanarak türü daha iyi kontrol edin ve değerleri uygun şekilde alın. Bu, verileri, yani tarihler ve çiftler biçiminde biçimlendirmenize yardımcı olur.

İlgili konular