通过jdbc更新sequence起始值

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();

}
}
}


你可能感兴趣的:(jdbc,sequence)