2026/11/07

오늘의 이야기

Java에서 Oracle 접속 시 "Could not commit with auto-commit set on" 오류 해결 방법


oracle 오류



 


Java 애플리케이션에서 Oracle DB에 접속하여 데이터를 처리하는 과정에서 다음과 같은 오류를 만날 수 있습니다.


java.sql.SQLException: Could not commit with auto-commit set on

이 오류는 대부분 JDBC의 Auto Commit 설정과 관련이 있습니다.




오류 원인


JDBC에서는 기본적으로 Auto Commit이 활성화(true)되어 있는 경우가 많습니다. Auto Commit이 활성화된 상태에서는 SQL 실행 후 자동으로 Commit이 수행됩니다.


그런데 개발자가 별도로 commit()을 호출하면 다음과 같은 오류가 발생할 수 있습니다.


Connection conn = DriverManager.getConnection(url, id, pw);

System.out.println(conn.getAutoCommit()); // true

// SQL 처리

conn.commit(); // 예외 발생 가능

즉, 이미 자동으로 Commit이 수행되고 있는데 다시 Commit을 요청했기 때문에 발생하는 문제입니다.




잘못된 예제


conn.setAutoCommit(true);

// INSERT, UPDATE 수행

conn.commit(); // Could not commit with auto-commit set on



해결 방법 1. commit() 제거


트랜잭션을 직접 관리할 필요가 없다면 Auto Commit을 그대로 사용하고 명시적인 commit() 호출을 제거하면 됩니다.


conn.setAutoCommit(true);

// SQL 수행

// conn.commit(); 제거



해결 방법 2. 수동 트랜잭션 관리


여러 개의 SQL을 하나의 트랜잭션으로 관리해야 한다면 Auto Commit을 비활성화해야 합니다.


conn.setAutoCommit(false);

try {

// SQL 수행

conn.commit();

} catch (Exception e) {

conn.rollback();

}

이 경우 개발자가 직접 Commit과 Rollback을 제어할 수 있습니다.




원인 확인 방법


오류가 발생하는 위치 직전에 Auto Commit 상태를 확인해보는 것이 좋습니다.


System.out.println("AutoCommit = " + conn.getAutoCommit());

결과가 true인데 conn.commit()을 호출하고 있다면 해당 오류의 원인일 가능성이 매우 높습니다.




Spring 환경에서는?


Spring Framework에서 @Transactional을 사용하는 경우에는 트랜잭션을 Spring이 관리합니다.


따라서 서비스 코드에서 직접 commit()이나 rollback()을 호출하면 예상치 못한 오류가 발생할 수 있습니다.


이 경우에는 Spring의 트랜잭션 관리 기능에 맡기는 것이 올바른 방법입니다.




정리



  • Auto Commit이 true인 상태에서 commit() 호출 시 오류가 발생할 수 있다.

  • 자동 커밋을 사용할 경우 commit()을 제거한다.

  • 직접 트랜잭션을 관리하려면 setAutoCommit(false)를 설정한다.

  • Spring의 @Transactional 사용 시에는 직접 Commit을 호출하지 않는다.


"Could not commit with auto-commit set on" 오류가 발생하면 가장 먼저 conn.getAutoCommit() 값을 확인하는 것이 문제 해결의 출발점이다.





오늘의 이야기


#스하리1000명프로젝트,
แพ้เกาหลีเหรอ? แม้ว่าคุณจะพูดภาษาเกาหลีไม่ได้ แต่แอปนี้จะช่วยให้คุณเดินทางได้อย่างง่ายดาย
เพียงพูดภาษาของคุณ ระบบจะแปล ค้นหา และแสดงผลลัพธ์เป็นภาษาของคุณ
เหมาะสำหรับนักเดินทาง! รองรับมากกว่า 10 ภาษา รวมถึงภาษาอังกฤษ ญี่ปุ่น จีน เวียดนาม และอื่นๆ อีกมากมาย
ลองตอนนี้!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/11/06

오늘의 이야기


#스하리1000명프로젝트,

Lost in Korea? Even if you don't speak Korean, this app helps you get around easily.
Just speak your language—it translates, searches, and shows results back in your language.
Great for travelers! Supports 10+ languages including English, Japanese, Chinese, Vietnamese, and more.
Try it now!

https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/11/05

오늘의 이야기


#스하리1000명프로젝트,
Nawala sa Korea? Kahit na hindi ka nagsasalita ng Korean, tinutulungan ka ng app na ito na madaling makalibot.
Sabihin lang ang iyong wika—ito ay nagsasalin, naghahanap, at nagpapakita ng mga resulta pabalik sa iyong wika.
Mahusay para sa mga manlalakbay! Sinusuportahan ang 10+ wika kabilang ang English, Japanese, Chinese, Vietnamese, at higit pa.
Subukan ito ngayon!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/11/04

오늘의 이야기


#스하리1000명프로젝트,
迷失在韓國?即使您不會說韓語,這個應用程式也可以幫助您輕鬆出行。
只需說出您的語言即可 - 它會翻譯、搜尋並以您的語言顯示結果。
非常適合旅行者!支援英語、日語、中文、越南語等10多種語言。
現在就試試吧!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/11/03

오늘의 이야기


#스하리1000명프로젝트,
迷失在韩国?即使您不会说韩语,这个应用程序也可以帮助您轻松出行。
只需说出您的语言即可 - 它会翻译、搜索并以您的语言显示结果。
非常适合旅行者!支持英语、日语、中文、越南语等10多种语言。
现在就试试吧!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/11/02

[LottoAI] 1249회차 추천 번호

LottoAI 추천 리포트 - 1249회차

LottoAI는 당첨 번호를 예측하는 도구가 아니라, 과거 추첨 데이터에서 뽑은 약 20개의 통계 피처(출현 빈도, 갭, 이동평균, 페어/트리플 패턴, 엔트로피, 베이지안, 마르코프 체인 등)로 번호 조합을 점수화하고, 조합끼리 번호가 겹치지 않도록 다양성 기준으로 상위 5개를 뽑아 보여주는 통계 분석 리포트입니다.

지난 회차 결과 (1248회차)
실제 당첨 번호: (16, 18, 27, 36, 38, 42) (보너스 22)
지난 추천 최고 적중: 2개


이번 회차 추천 Top 5

순위 번호 특징 핵심 근거
1 13, 20, 37, 38, 40, 44 odd/even=2/4, sum=192, sum-profile=historical-edge, low-high-balance, overlap-minimized, collective-coverage-maximized transition_score 13.5%, bayesian_score 11.3%, stability_score 9.6%
2 3, 15, 18, 30, 31, 44 odd/even=3/3, sum=141, sum-profile=historical-center, low-high-balance, overlap-minimized, collective-coverage-maximized transition_score 13.2%, bayesian_score 10.5%, gap 10.1%
3 11, 20, 22, 28, 30, 34 odd/even=1/5, sum=145, sum-profile=historical-center, low-high-balance, overlap-minimized, collective-coverage-maximized transition_score 13.5%, bayesian_score 12.1%, markov_chain_score 9.3%
4 3, 9, 12, 34, 40, 42 odd/even=2/4, sum=140, sum-profile=historical-center, low-high-balance, overlap-minimized, collective-coverage-maximized transition_score 14.7%, bayesian_score 10.9%, markov_chain_score 10.0%
5 12, 13, 17, 22, 31, 32 odd/even=3/3, sum=127, sum-profile=historical-center, low-high-balance, overlap-minimized, collective-coverage-maximized transition_score 13.2%, bayesian_score 11.8%, markov_chain_score 9.0%

검증 결과 (2026-09-27, 1~1243회 전체 데이터)

  • 사전에 정한 가설(핫넘버, 콜드넘버, 장기 미출현, 전이 관계 등 12개 전략)을 과거 데이터만으로 다음 회차를 맞히는 방식(워크포워드)으로 1043회차에 걸쳐 검증하고 다중 비교 보정을 적용한 결과, 무작위 선택보다 나은 전략은 하나도 없었습니다.
  • 12개 전략의 회차당 평균 적중은 0.744~0.824개로, 무작위 기댓값 0.8개와 통계적으로 구별되지 않습니다. 최근 100회에서만 좋아 보인 전략도 전체 구간에서는 재현되지 않았습니다.
  • 연속번호, 홀짝 비율, 번호 합계, 직전 회차 재등장, 번호 쌍 동시 출현 분포도 모두 완전 무작위 추첨과 구별되지 않습니다. 과거 번호에서 활용할 수 있는 패턴은 발견되지 않았습니다.
  • 이 리포트의 추천 모델도 무작위와 통계적으로 구별되지 않습니다. 즉 추천 번호는 무작위로 고른 번호보다 당첨 가능성이 높지 않습니다.

성능 통계 (2026-09-27 기준)

  • 실측 평가 이력 145건(약 29회차) 평균 적중 0.593개 - 랜덤 기댓값(0.8개)보다 낮습니다.
  • walk-forward 백테스트(1200~1240회차, 41회차 205게임): 모델 평균 적중 0.702개 vs 무작위 기댓값 0.8개 (p=0.10, 무작위와 통계적으로 구별되지 않음).
  • 역대 최고 적중은 6개 중 3개(5등 수준)이며, 4개 이상 적중한 적은 없습니다.
  • '후보 순위'는 생성된 후보 풀 안에서의 상대 순위일 뿐 당첨 확률이 아닙니다. 순위와 실제 적중 사이에 뚜렷한 상관관계는 관찰되지 않았습니다.
  • Top5는 서로 겹치지 않도록 다양화한 조합일 뿐, 다양성이 적중률이 더 높다는 뜻은 아닙니다.
  • 본 결과는 통계 기반 참고자료이며 당첨을 보장하지 않습니다.

오늘의 이야기


#스하리1000명프로젝트,

Lost in Korea? Even if you don't speak Korean, this app helps you get around easily.
Just speak your language—it translates, searches, and shows results back in your language.
Great for travelers! Supports 10+ languages including English, Japanese, Chinese, Vietnamese, and more.
Try it now!

https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/11/01

오늘의 이야기


#스하리1000명프로젝트,
한국에서 길을 잃었나요? 한국어를 못하더라도 이 앱을 사용하면 쉽게 돌아다닐 수 있습니다.
귀하의 언어로 말하면 귀하의 언어로 번역, 검색 및 결과가 표시됩니다.
여행자에게 좋습니다! 영어, 일본어, 중국어, 베트남어 등 10개 이상의 언어를 지원합니다.
지금 사용해 보세요!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/10/31

오늘의 이야기


#스하리1000명프로젝트,

Lost in Korea? Even if you don't speak Korean, this app helps you get around easily.
Just speak your language—it translates, searches, and shows results back in your language.
Great for travelers! Supports 10+ languages including English, Japanese, Chinese, Vietnamese, and more.
Try it now!

https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/10/30

오늘의 이야기

 



DevExtreme dxDataGrid에서 선택 행, 셀 값 변경, Row 수 구하기




실무에서 자주 사용하는 dxDataGrid 관련 기능을 정리했습니다.


1. 선택된 Row Index 가져오기


var selectedRowKeys = dataGrid.getSelectedRowKeys();
var rowIndex = dataGrid.getRowIndexByKey(selectedRowKeys[0]);

2. Row 클릭 시 Index 확인


onRowClick: function(e) {
console.log(e.rowIndex);
}

3. 특정 Cell 값 변경


grid.cellValue(2, "name", "홍길동");

4. 선택된 Row의 값 변경


var selectedKey = grid.getSelectedRowKeys()[0];
var rowIndex = grid.getRowIndexByKey(selectedKey);
grid.cellValue(rowIndex, "status", "완료");

5. 현재 Row 수 확인


grid.getVisibleRows().length;

6. 전체 데이터 건수


grid.totalCount();

7. 모든 Row 순회


for (var i = 0; i < grid.getVisibleRows().length; i++) {
console.log(grid.cellValue(i, "name"));
}

정리



  • 선택 행 인덱스 조회: getRowIndexByKey()

  • 셀 값 변경: cellValue()

  • 현재 Row 수: getVisibleRows().length

  • 전체 데이터 수: totalCount()





오늘의 이야기

Java에서 Oracle 접속 시 "Could not commit with auto-commit set on" 오류 해결 방법 oracle 오류   Java 애플리케이션에서 Or...