2016-10-17 5 views
0

일괄 처리를 실행하려고하는 JDBC를 사용하여 여러 삽입 쿼리를 실행해야합니다. 모든 것이 내 코드에서 잘 작동하지만 테이블에서 값을 보려고하면 테이블이 비어 있습니다.JDBC : 데이터베이스에 값을 삽입하지 않은 일괄 삽입

SessionImpl sessionImpl = (SessionImpl) getSessionFactory().openSession(); 
    Connection conn = (Connection) sessionImpl.connection(); 

    Statement statement = (Statement) conn.createStatement(); 

    for (String query : queries) { 
     statement.addBatch(query); 
    } 
    statement.executeBatch(); 
    statement.close(); 
    conn.close(); 

그리고

List<String> queries 

같은 쿼리를 삽입 포함 : 여기 코드입니다

insert into demo values (null,'Sharmzad','10006','http://demo.com','3 Results','some values','$44.00','10006P2','No Ratings','No Reviews','Egypt','Duration: 8 hours','tour','Day Cruises'); 

그리고 테이블 구조는 같다 : 예외

create table demo (ID INTEGER PRIMARY KEY AUTO_INCREMENT,supplierName varchar(200),supplierId varchar(200),supplierUrl varchar(200),totalActivities varchar(200),activityName varchar(200),activityPrice varchar(200),tourCode varchar(200),starRating varchar(200),totalReviews varchar(200),geography varchar(200),duration varchar(200),category varchar(200),subCategory varchar(200)); 

나는 어디에서 던져 지지만 값은 삽입되지 않습니다. 누군가 설명 할 수 있습니까?

+0

삽입 쿼리에서 'null'을 삭제합니다. –

+0

null (자동 증가 ID 용)을 제거하면 예외가 발생합니다. "열 값이 충분하지 않음" –

+0

연결에 "conn.commit()"이 _ "자동 커밋"_ 구성되어 있지 않습니다. –

답변

5

대부분의 JDBC 드라이버는 autocommit를 사용하는 코드에 커밋 추가 공급을 추가 ID에 값을 할당해야하지 않지만, 그들 중 일부는하지 않습니다 . 모르는 경우 거래 전에 .setAutoCommit(true) 또는 그 뒤에 .commit()을 사용해야합니다.

1

트랜잭션 문제 일 수 있습니다. 아마도 거래를하지 않는 것입니까? 그렇다면 데이터베이스에서 아무 것도 보지 않는 것이 정상입니다.

.executeBatch(); (다만 close()) 바로 다음에 READ_UNCOMMITTED 트랜잭션 모드로 클라이언트를 실행하고 행이 있는지 확인하여 확인할 수 있습니다.

1

당신은 다른 모든 열이

insert into demo 
(
supplierName 
,supplierId 
,supplierUrl 
,totalActivities 
,activityName 
,activityPrice 
,tourCode 
,starRating 
,totalReviews 
,geography 
,duration 
,category 
,subCategory 
) 
values (
'Sharmzad' 
,'10006' 
,'http://demo.com' 
,'3 Results' 
,'some values' 
,'$44.00' 
,'10006P2' 
,'No Ratings' 
,'No Reviews' 
,'Egypt' 
,'Duration: 8 hours 
','tour' 
,'Day Cruises' 
); 

의 이름을 지정하고

+0

는 필요한 값을 언급하기 전에 ( supplierName , 공급 업체 ID , supplierUrl , totalActivities , activityName , activityPrice , tourCode , starRating , totalReviews 지리 , 기간 카테고리 , 하위 )를 추가하는 것 ? –

+0

@roger_that 모든 열을 할당하지 않은 경우 어떤 열이 관련 값과 일치하는지 쿼리에 알려야합니다.이 작업은 명시 적 이름 지정 – scaisEdge

+0

에 의해 수행됩니다. 아무 일도 일어나지 않아. 연결을 커밋해야합니까? –

관련 문제