gpt4 book ai didi

java - 我的数据库中有 2500 万条记录,我想使用 java 检索它

转载 作者:行者123 更新时间:2023-11-29 09:53:18 25 4
gpt4 key购买 nike

我的数据库中有 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++;
//con=getConnection();
}
if(m==50)
{
ArrayList al=new ArrayList();
al.add(rs);
//con.close();
con=getConnection();
rs=(ResultSet)al.get(0);
m=0;
}

看起来,对于从主 ResultSet 中读取的每 50 个结果,您都会创建一个新的数据库连接。我看不到你在哪里关闭它们。不久之后,Oracle 数据库服务器就会拒绝为您提供更多连接。


但是检索 2500 万个结果并执行 2500 万个单独更新中的相当一部分将需要很长时间。我认为你应该尝试使用更聪明的 SQL 来做到这一点......或者在 PLSQL 中。 (请教数据库专家。我只是一个 Java 专家 :-) )

关于java - 我的数据库中有 2500 万条记录,我想使用 java 检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28022331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com