2014-06-08 2 views
0

2 차원 배열에서 테이블에 요소를 삽입하려고합니다. 나는 적절한 방법으로 SQL 문을 작성하는 마지막 쉼표를 제거하는 문제가마지막 쉼표 제거 java

이 내가 매우 시도 코드

  String m=""; 
      String matInsert = null; 
      for (int k=0;k<di.mat.length;k++) { //row 
      for (int j=0;j<di.mat[k].length;j++) { 

       m+=di.mat[k][j]+", "; 
       matInsert=new String("INSERT INTO "+ tableName +"("+ff+")"+"values" +"("+m+")"); 

     } 
      m = m.replaceAll(", $",""); 
      //m=m.substring(0,m.lastIndexOf(",")); 
      System.out.println(matInsert); 
      stmt1.executeUpdate(matInsert); 
      } 

입니다하지만 난 그것을

을 제거 할 성공하지 못했습니다 도와주세요.

+2

을 왜에 의해 매개 변수 대체를하고 있습니다 손? 이것은 주사 공격의 방법입니다. –

+0

사용 Prepared 문은 데이비드가 제안하거나 다른 사람이 매개 변수를 변경할 수 있으며 (텍스트 상자의 화면 값을 특수화하여) 데이터베이스에 나쁜 영향을 미칠 수 있습니다. OWASP 웹 사이트 https://www.owasp.org/index.php/SQL_Injection의 세부 정보 – tgkprog

답변

2

나는 일반적으로 그것은 좋은 것이 아니라 그것이 작동하는 것은

String sep = ""; 
for(...) { 
    m += (sep+di.mat[k][j]); 
    sep = ","; 
} 

의이 유형은 다음과 같은 구조를 사용합니다.

이제 코드의 문제 중 일부는 루프 내부에 matInsert를 작성한 다음 루프 이후에 m을 업데이트하고 재 작성하지 않는 것입니다.

업데이트 코드 : 당신은 같은에서, 문자열에서 문자가 마지막 인스턴스를 제거하려면 삭제하려면

String matInsert = null; 
for (int k=0;k<di.mat.length;k++) { //row 
    String m=""; 
    String sep = ""; 
    for (int j=0;j<di.mat[k].length;j++) { 
     m+= (sep+di.mat[k][j]); 
     sep = " ,"; 
    } 
    matInsert="INSERT INTO "+ tableName +"("+ff+")"+"values" +"("+m+")"; 
    System.out.println(matInsert); 
    stmt1.executeUpdate(matInsert); 
} 
+0

대단히 감사합니다 @DrC – Souad

+0

물론이 다음날을보고, 나는 우리가 StringBuilder를 추천 했음에 틀림 없다는 것을 깨닫습니다 :) – DrC

1

단순한 논리로 마지막 쉼표 추가를 피할 수 있습니다. 다른 작업으로 대체하기보다는 불필요한 것을 현장에서 생략하는 것이 좋습니다.

for (int k=0;k<di.mat.length;k++) { //row 
    for (int j=0;j<di.mat[k].length;j++) { 
    m+=di.mat[k][j]; 

    if(j<di.mat[k].length -1){ //This condition will escape you from last comma addition 
     m+= ", ";  
    } 
    } 
} 

또 다른 점, 효율성을 높이기 위해 대신 String+ CONCAT의 StringBuilder#append를 사용합니다.

+0

고맙습니다. 이제 작동합니다. – Souad

+0

@ user1488019, 안녕하세요. – Masudul

0

m은 문자열이므로 m.substring (0, m.length() - 1)을 사용하거나 내부 루프 내부에 if 문이 k와 j의 마지막 색인인지 확인한 후 ' 끝 부분에 쉼표를 추가하십시오.

+0

고마워요, 지금 작동합니다 – Souad

0

, 이것을 사용 :

public class Something 
{ 
    public static void main(String[] args) 
    { 
     String s = "test"; 
     StringBuilder sb = new StringBuilder(s); 
     char delval = 'c'; 

     int lastIndex = -1; 

     for(int i = 0; i < s.length()-1; i++) 
     { 
      if(s.charAt(i) == delval) 
      { 
       lastIndex = i; 
      } 
     } 

     try{ 
      sb.deleteCharAt(lastIndex); 
      System.out.println(s); 
     } 
     catch(Exception e){ 
      System.out.println("Value not present"); 
     } 
    } 

}