2016-03-21 20 views
0

Aşağıdaki işleve sahibim ve bir sınıfa kayıtlı öğrencilerin sayısını sınıf sınıfı ile karşılaştırmaya çalışıyorum. Kayıtlı numara sınıftan büyükse, "Tam ise Sınıf" yazan bir mesaj vermek istiyorum.ayrıştırma SQL sayısı (*)

Bu şekilde sayılara SQL ifadelerini dönüştürmek ve karşılaştırmak için çalışıyorum, ancak hat üzerinde bir java.lang.NumberFormatException alıyorum

:

int currentNumberInClassAsInt selectedClass değişken bir kullanıcı tarafından girilen olduğu

. onlar kayıt istediğiniz sınıfın sayı

public static void classFullCheck() { 
    try { 
     String currentNumberInClassAsString = ("SELECT class_id, COUNT(*) FROM ClassSelector.student_x_class WHERE class_id = " + selectedClass); 
     rs = myStmt.executeQuery(currentNumberInClassAsString); 
     int currentNumberInClassAsInt; 
     if(rs.next()){ 
      currentNumberInClassAsInt = rs.getInt(1); 
     } 
     String classSizeAsString = ("SELECT class_size FROM ClassSelector.classes WHERE class_id = " + selectedClass); 
     rs = myStmt.executeQuery(classSizeAsString); 
     int classSizeAsInt; 
     if(rs.next()){ 
      classSizeAsInt = rs.getInt("class_size"); 
     } 
      if (currentNumberInClassAsInt > classSizeAsInt){ 
       System.out.println("Sorry, this class is Full!"); 
     } 
    } catch (java.sql.SQLException SQL) { 
     SQL.printStackTrace(); 
    } 
} 

My SQL Tablo düzenidir:

öğrenci

student_id | öğrenci_adı | memleketi

sınıflar

class_id | class_name | Açıklama class_size

student_x_class

student_id | öğrenci_adı | class_id | class_name

Gerekli bilgilerden vazgeçersem haberim olsun. Herhangi bir tavsiye takdir edilecektir!

+0

Şu andan itibaren, deyimi içeren Dizeyi ayrıştırmaya çalışıyorsunuz. – TheMirrox

+0

Bu kod sql enjeksiyonuna karşı hassas görünüyor. Yürütülecek bir dize oluşturmak yerine parametreli sorgular kullanmalısınız. –

+0

@SeanLange, teşekkürler, bu iyi bir nokta, bunu yapacağım! –

cevap

1

Sen ResultSet

int currentNumberInClassAsInt = rs.getInt("count"); // Getting the value of column "count" 

VEYA

int currentNumberInClassAsInt = rs.getInt(2); // Getting the value of second column 

iyi şekilde kullanarak veri almak gerekir, aksi takdirde bir istisna alırsınız, rs.next() getiri true eğer ilk kontrol etmektir


int currentNumberInClassAsInt; 
if (rs.next()) { 
    currentNumberInClassAsInt = rs.getInt(2); 
} 
+0

şimdiki kodumda neyi ortadan kaldırabilirim? executeQuery'yi kullanmam gerekmeyecek mi? Neden 2? –

+0

@ J.Doe executeQuery, "ResultSet" değerini döndürür. Nesneleri veritabanınızdan almak için ona ihtiyacınız olacak. –

+0

Yani hangi değişkeni "saymak" olarak koyardım? –

İlgili konular