JDBC ResultSet'ten sütun sayısı nasıl alınır?


92

Ben kullanıyorum CsvJdbc csv-dosyaya erişmek için (bu CSV dosyaları için JDBC sürücüsü ise). Csv dosyasının kaç sütun içerdiğini bilmiyorum. Sütun sayısını nasıl öğrenebilirim? Bunun için herhangi bir JDBC işlevi var mı? Java.sql.ResultSet içinde bunun için herhangi bir yöntem bulamıyorum.

Dosyaya erişmek için CsvJdbc web sitesindeki örneğe benzer bir kod kullanıyorum .

Yanıtlar:


250

ResultSetMetaData'dan sütun numarası alabilirsiniz :

Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();

int columnsNumber = rsmd.getColumnCount();

1
CSV JDBC sürücüsünün ve ResultSetMetaDatauygulamasının değişken uzunluktaki CSV kayıtlarını nasıl işlediğini anlamak ilginç olacaktır . Örneğin, belirlediyseniz SELECT * FROM sampleve her satır farklı sayıda alan içeriyorsa, üzerinde yinelenen her satır için sütun sayısı yeniden değerlendirilir mi?
rhu

@rhu Bu çok kolay. Olmaz, çünkü meta veriler hangi satırda olduğunuzdan bağımsızdır. Yani, muhtemelen bulunan maksimum sütun sayısıdır.
user207421

8
PreparedStatement ps=con.prepareStatement("select * from stud");

ResultSet rs=ps.executeQuery();

ResultSetMetaData rsmd=rs.getMetaData();

System.out.println("columns: "+rsmd.getColumnCount());  
System.out.println("Column Name of 1st column: "+rsmd.getColumnName(1));  
System.out.println("Column Type Name of 1st column: "+rsmd.getColumnTypeName(1)); 

1
Biri biliyor mu? Mı rs.getMetaData()metod pahalı? Her çağrıldığında veritabanını sorguluyor mu?
Fandi Susanto

rs.getMetaData()Çağrı yoğun olabilir; ancak nesneye sahip olduğunuzda rsmd, meta veri nesnesinde yöntemler çağrılırken genellikle veritabanına ek çağrı yapılmaz; tüm meta veriler getMetaData çağrısıyla doldurulur.
Mark Stewart

2
Bunun rsmd.getColumnName (1) ve rsmd.getColumnTypeName (1) olması gerekmez mi? 2. değil, "1. sütun" yazdırıyoruz.
DAB

5

Sonuç kümesindeki kodla alabileceğiniz sütun sayısı (DB, PostgreSQL olarak kullanıldığından):

// PostgreSQL için sürücüyü yükle
Class.forName ("org.postgresql.Driver");

Dize url = "jdbc: postgresql: // localhost / test";
Özellikler props = yeni Özellikler ();
props.setProperty ("kullanıcı", "mydbuser");
props.setProperty ("parola", "mydbpass");
Connection conn = DriverManager.getConnection (url, props);

// ifade oluştur
İfade stat = conn.createStatement ();

// bir sonuç kümesi edinin
ResultSet rs = stat.executeQuery ("MY_TABLE'DAN c1, c2, c3, c4, c5'i SEÇ");

// sonuç kümesinden meta veri verir
ResultSetMetaData rsmd = rs.getMetaData ();

// sütunlar meta veri nesnesinden sayılır
int numOfCols = rsmd.getColumnCount ();

Ancak sütunlar hakkında daha fazla meta bilgi edinebilirsiniz:

for(int i = 1; i <= numOfCols; i++)
{
    System.out.println(rsmd.getColumnName(i));
}

Ve en azından ama en az değil, sadece tablo hakkında değil, aynı zamanda DB hakkında da bilgi edinebilirsiniz, nasıl yapılacağını burada ve burada bulabilirsiniz .


4

Bağlantıyı kurduktan ve sorguyu çalıştırdıktan sonra şunu deneyin:

 ResultSet resultSet;
 int columnCount = resultSet.getMetaData().getColumnCount();
 System.out.println("column count : "+columnCount);

-1

Bu, verileri sütunlar halinde yazdırır ve son sütuna ulaşıldığında yeni satıra gelir.

ResultSetMetaData resultSetMetaData = res.getMetaData();
int columnCount = resultSetMetaData.getColumnCount();
for(int i =1; i<=columnCount; i++){
                if(!(i==columnCount)){

                    System.out.print(res.getString(i)+"\t");
                }
                else{
                    System.out.println(res.getString(i));
                }

            }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.