【发布时间】:2015-01-19 10:20:08
【问题描述】:
我的数据库中有 2500 万条记录,我想使用 java 检索它。我的连接在 5000 条记录后终止。我应该怎么做才能保持连接活跃
package spliting;
import java.sql.*;
import java.util.ArrayList;
public class SpaceSpliting {
public Connection getConnection()
{
Connection con=null;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","abc","abc");
}
catch(Exception e)
{
System.out.println(e);
}
return con;
}
public void addingValues()
{
int m=0,kk=0;
try
{
Connection con=getConnection();
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("select * from owner");
while(rs.next())
{
String model=rs.getString(2);
System.out.println(model);
if(model==null)
{
kk++;
System.out.println(0+" "+kk);
m++;
}
else
{
String[] amodel=model.split(" ");
System.out.println(amodel.length);
if(amodel.length==1)
{
System.out.println("1");
Statement st1=con.createStatement();
st1.executeUpdate("update owner set maker='"+amodel[0]+"'where model_desc='"+model+"'");
kk++;
System.out.println("records updated"+" "+kk);
}
if(amodel.length==2)
{
System.out.println("2");
Statement st1=con.createStatement();
st1.executeUpdate("update owner set maker='"+amodel[0]+"',model1='"+amodel[1]+"' where model_desc='"+model+"'");
kk++;
System.out.println("records updated"+" "+kk);
}
if(amodel.length==3)
{
System.out.println("3");
Statement st1=con.createStatement();
st1.executeUpdate("update owner set maker='"+amodel[0]+"',model1='"+amodel[1]+"',model2='"+amodel[2]+"' where model_desc='"+model+"'");
kk++;
System.out.println("records updated"+" "+kk);
}
if(amodel.length>=4)
{
System.out.println("4");
Statement st1=con.createStatement();
st1.executeUpdate("update owner set maker='"+amodel[0]+"',model1='"+amodel[1]+"',model2='"+amodel[2]+"',model3='"+amodel[3]+"' where model_desc='"+model+"'");
kk++;
System.out.println("records updated"+" "+kk);
}
m++;
//con=getConnection();
}
if(m==50)
{
ArrayList al=new ArrayList();
al.add(rs);
//con.close();
con=getConnection();
rs=(ResultSet)al.get(0);
m=0;
}
}
//System.out.println("COLUMN ADDED");
}
catch(Exception e)
{
System.out.println(e);
}
}
public static void main(String[] args) {
SpaceSpliting ss=new SpaceSpliting();
//ss.addingColumn();
ss.addingValues();
// TODO Auto-generated method stub
}
}
【问题讨论】:
-
你有一个变量命名问题。 “m”和“kk”是可怕的名字。我可以说它们是计数器,因为您正在递增它们,但是它们的名称并不能帮助读者(我自己或您自己)看到正在计数的内容。抱歉,这不是你问的,但你可能仍然需要听到它。 ;-)
-
使用更智能的 SQL 语句更新值可能会起作用。您不需要全部选择下摆。只需
UPDATE .. WHERE...,如果您需要更多内容,您可以使用JOIN。一条一条地更新 25M 条记录是错误的。 -
为什么会终止?它不应该在没有错误的情况下终止,并且您无法在不知道错误是什么的情况下解决此问题。
-
@PeterLawrey java.sql.SQLException:侦听器拒绝连接并出现以下错误:ORA-12519,TNS:找不到合适的服务处理程序客户端使用的连接描述符是:localhost:1521:xe这就是我得到的
-
为什么不为此使用数据库存储过程并通过将参数作为参数传递给数据库过程来从 Java 调用过程?
标签: java