java. sql. SQLexception: ORA - 01000: 커서 를 여 는 최대 수 를 초과 한 원인 과 해결 방안

java. sql. SQLexception: ORA - 01000: 커서 를 여 는 최대 수 를 초과 한 원인 과 해결 방안
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
//oracle  
public class UserConn {
 
	public static String url="jdbc:oracle:thin:@192.168.49.92:1521:orcl";
	public static String user="ur";
	public static String pwd="ur";
	static {
		try {
			Class.forName("oracle.jdbc.OracleDriver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static Connection getConn(){
		Connection conn=null;
			try {
				conn=DriverManager.getConnection(url,user,pwd);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
		return conn;
	}
}

 
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class UserImpl implements UserInterface {
  Connection conn = null;

  public UserImpl() {
    conn = UserConn.getConn();
  }

  public void add(User user) {
    String sql = "insert into register values(?,?,?,?,?,?) ";
    // String userid="4028e4e937167cc80137169";

    String userid = "4028e4e937167cc80137169";
    String strTable = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz";
    int len = strTable.length();
    for (int i = 0; i < 9; i++) {
      int intR = (int) Math.floor(Math.random() * len);
      char c = strTable.charAt(intR);
      userid += c;
    }
    // userid+=UUID.randomUUID().toString();
    System.out.println("id:" + userid);
    PreparedStatement pstm;
    try {
      pstm = conn.prepareStatement(sql);

      pstm.setString(1, userid);
      pstm.setString(2, user.getAddress());
      pstm.setString(3, user.getSex());
      pstm.setDate(4, new Date(user.getBirthday().getTime()));
      pstm.setString(5, user.getName());
      pstm.setInt(6, user.getAge());
      pstm.executeUpdate();
      pstm.close();     //    ,    pstm
      System.out.println("    ");
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

}

 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
//  
public class TestUser {

	public static void main(String[] args){
	  UserInterface userdao=new UserImpl();
	  User user=new User();
	  //user.setId("1");
	  user.setAddress("aa");
	  user.setSex("aa");
		
	  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
	  try {
		Date birDate = dateFormat.parse("2010-11-11");
		user.setBirthday(birDate);
		} catch (ParseException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}	  
		user.setName("aa");
		user.setAge(20);
		long startTime = System.currentTimeMillis();
		for (int i = 0; i < 500000; i++) {
		  userdao.add(user);
        }
        long endTime = System.currentTimeMillis();
        long totalTime = endTime - startTime;
        System.out.println("add totalTime:"+totalTime);
	  
	}

}

 
이 코드 는 이미 정확하게 실 행 될 수 있 습 니 다. 그러나 pstm. close () 를 쓰 지 않 으 면 커서 의 최대 수 이상 을 보고 합 니 다. 이것 은 순환 에서 매번 pstm = conn. prepareStatement (sql) 을 사용 하기 때 문 입 니 다.풀 리 지 않 았 습 니 다. 이렇게 모든 서버 의 커서 자원 을 점용 하여 마지막 에 이상 을 던 졌 습 니 다.첨부 파일 은 Oacle 드라이버 패키지 입 니 다.

좋은 웹페이지 즐겨찾기