연우, 장을 열다.

이 에러가 발생했던 건 


stmt = conn.prepareStatement(sql);

rs = stmt.executeQuery();


market_name =rs.getString(1);


위처럼 써서 에러가 떴다. 


잘 보시면 rs.next();가 없다. 


에러가 발생한 이유는 결국에  rs.next(); 가 없어서였다! 


따라서, 


if(rs.next()){   market_name =rs.getString(1);  } 


라던가 



while(rs.next()){

.

.

.

.

}


라던가 ! 작성하시고~ 쓰자



오늘 만났던 에러는 바로 

illegal operation on empty result set mysql


상황은 이러했다. 

포문을 돌면서, 조회했던 정보를 예쁘게 잘 INSERT 구문을 만들어서 


SQL문을 실행해주려고 했던 것이었음. 




sql = "select dispNo, dispNm, parentDispNo from tbl_mst_api_category_temp where market_code='1111' and dispNo ='"+forwardDispNo+"' "; //1건 조회stmt=conn.prepareStatement(sql);

rs1=stmt.executeQuery();


이렇게 결과값을 rs1에 담고, 


rs1.next();


를 위처럼 찍은 다음... 


sql = "insert tbl2 values (rs1.getString('aaa'),rs1.getString('bbb'),rs1.getInt('ccc'))";



위처럼.. sql문을 작성한 다음 실행 했더니 만났던 에러였다. 


illegal operation on empty result set mysql


요놈 참 깨름찍한 용어다. 


즉 mysql에서  빈결과( empty result set ) 를  돌려받는 것에 대한  불법적인 작용 정도로 인식하면 될것이다. .. . . .. 




empty result set 에 집중해서 생각해보니까, 

결국에, 조회했던 sql문인 

sql = "select dispNo, dispNm, parentDispNo from tbl_mst_api_category_temp where market_code='1111' and dispNo ='"+forwardDispNo+"' "; //1건 조회stmt

이것에서 조회되는 값이 없다는 의미였다 ㅠㅠ 

조회하는 값이 없어서 문제였던 것이 아니라, 

그 조회한 값이 마치 있다고 가정하고 내가 코딩을 했던 것이다. 


그래서 boolean값을 리턴하는 rs1.next로 실행하고자 하는 부분을 이프문으로 쌌더니, 자알 된다^^ 
if(rs1.next()){
  forwardDispNo =  rs1.getString("parentDispNo");
if(i==tempDepth -1){
  tempPrefix="";
}else{
  tempPrefix=" , ";
}
  tempStr += tempPrefix +" cate_code_" + i + "=" + rs1.getString("dispNo")   ;
  tempStr +=" , cate_name_" + i + "='" + rs1.getString("dispNm")+"'";
}




mysql 데이터 insert

web/mysql2017. 11. 19. 16:16

mysql data insert


데이터를 넣어줄때에는 


insert into testTbl (컬럼명a, 컬럼명b, 컬럼명c, 컬럼명d) values (컬럼의 값a, 컬럼의 값b, 컬럼의 값c, 컬럼의 값d ); 


위처럼 입력하면  됩니다


컬럼명은 생략이 가능합니다. 



insert into testTbl  values (컬럼의 값a, 컬럼의 값b, 컬럼의 값c, 컬럼의 값d ); 


위처럼 쓸 수 있다는 의미입니다. 한가지 주의하자면, 위처럼 생략해서 사용할 경우에는 값들의 순서 및 개수가 테이블에 정의된 열순서 및 개수와 동일해야 합니다.



따라서 어떤 값을 넣고 싶지 않다면 



insert into testTbl (컬럼명a, 컬럼명b,컬럼명d) values (컬럼의 값a, 컬럼의 값b, 컬럼의 값d ); 


위 처럼 넣어주시면 됩니다. 첫번째 쿼리에 있었던 컬럼명c가 사라진 상태입니다. 두둥


자동으로 증가하는 AUTO_INCREMENT는 어째야하지??

테이블의 속성에 AUTO_INCREMENTㅓ가 지정되어 있다면, insert에서는 해당 열이 없다고 생각하고 입력하면 됩니다. 


AUTO_INCREMENT는 자동으로 1부터 증가는 값을 입력해줍니다. AUTO_INCREMENT는 프라이머리키이거나 유니크로 지정해줘야하고, 데이터 형식은 꼭 숫자형식이어야 합니다. 


AUTO_INCREMENT로 지정된 열은 insert문에서 null값으로 지정하면 자동으로 값이 입력됩니다. 


CREAT TABLE testTbl2

( id int AUTO_INCREMENT PRIMARY KEY,

 userName char(3),

 age int );


insert into testTbl2 values (NULL, 'kay', '25');

insert into testTbl2 values (NULL, 'thia', '24');