package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class FixSeq {
/**
* @param args
*/
public static void main(String[] args) throws Exception
{
Connection conn = getConn();
/**
getMaxSequence();
getCurrentId("empno","emp");
getSequence("deptno_seq");
modifySeq("deptno_seq", 1);
getSequence("deptno_seq");
*/
getSequence("empno_seq",conn);
getSequence("deptno_seq",conn);
//modifySeq("empno_seq", 1,conn);
//modifySeq("deptno_seq", 1,conn);
fixSeq();
getSequence("empno_seq",conn);
getSequence("deptno_seq",conn);
}
public static Connection getConn()
{
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public static ArrayList getMaxSequence(Connection conn) throws SQLException
{
ArrayList result = null;
String sql = "";
PreparedStatement ps = null;
ResultSet rs = null;
try
{
result = new ArrayList();
sql = "select tbname, cname, sequencename from maxsequence";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next())
{
String sdata = rs.getString("tbname") + "," + rs.getString("cname") + "," + rs.getString("sequencename");
System.out.println(sdata);
result.add(sdata);
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
rs.close();
ps.close();
}
return result;
}
public static int getMaxCurrentId(String cname, String table, Connection conn) throws SQLException
{
int currentid = 0;
String sql = "";
PreparedStatement ps = null;
ResultSet rs = null;
try
{
sql = "select max(" + cname + ") as " + cname + " from " + table;
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next())
{
currentid = rs.getInt(cname);
System.out.println(cname + " max: " + currentid + " " + table);
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
rs.close();
ps.close();
}
return currentid;
}
public static int getSequence(String seqname, Connection conn) throws SQLException
{
int sequence = 0;
String sql = "";
PreparedStatement ps = null;
ResultSet rs = null;
try
{
sql = "select " + seqname + ".nextval as seq from dual";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next())
{
sequence = rs.getInt("seq");
System.out.println(seqname + ": "+ sequence);
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
rs.close();
ps.close();
}
return sequence;
}
public static void modifySeq(String seqname, int num, Connection conn)
{
String sql = "";
PreparedStatement ps = null;
try
{
sql = "drop sequence " + seqname;
System.out.println(sql);
ps = conn.prepareStatement(sql);
ps.execute();
sql = "create sequence " + seqname + " increment by 1 start with " + (num + 1);
System.out.println(sql);
ps = conn.prepareStatement(sql);
ps.execute();
}catch(Exception e)
{
e.printStackTrace();
}
}
public static void fixSeq() throws SQLException
{
List maxseq = null;
int current_maxid = 0;
int current_sequence = 0;
String table,cname,sequence ="";
String[] temp = null;
Connection conn = null;
try
{
conn = getConn();
maxseq = getMaxSequence(conn);
for(int i=0; i<maxseq.size(); i++)
{
temp = ((String) maxseq.get(i)).split(",");
table = temp[0];
cname = temp[1];
sequence = temp[2];
current_maxid = getMaxCurrentId(cname,table,conn);
current_sequence = getSequence(sequence,conn);
if(1 + current_maxid >= current_sequence)
{
System.out.println(sequence + ": " + current_maxid + "-" + current_sequence);
modifySeq(sequence,current_maxid,conn);
}
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
conn.close();
}
}
}