java. sql. SQLexception: ORA - 01000: 커서 를 여 는 최대 수 를 초과 한 원인 과 해결 방안
4199 단어 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 드라이버 패키지 입 니 다.