ClassforName("oraclejdbcdriverOracleDriver");
String url = "jdbc:oracle:thin:@你的主机ip :1521:orcl";// 设置连接字符串
String username = "你的用户名";
String password = "你的密码";
Connection con=javasqlDriverManagergetConnection(url,user,password);
Statement stmt = concreateStatement();
StringBuffer sql = new StringBuffer("insert into user values (" + listget(1)getId()+", "+listget(1)getUserName()+", "+listget(1)getPassword()+")");
for(int i = 2; i < listsize(); i++){
sqlappend(", ("+ listget(i)getId()+", "+listget(i)getUserName()+", "+listget(i)getPassword()+")");//
}
sqlappend(";");
ResultSet rs = stmtexecuteQuery(sql);
rsclose();
stmtclose();
conclose();
理论上上万条数据同时插入一个数据库是不可能的,因为数据库进行 *** 作时候会锁表,每个任务完成后在进行下个任务,其实所谓的并发其实也是排队按顺序执行的如果是向同一个表中插入数据的话可以
insert into table (colum1,column2)values(data1,data2),(data2,data3),(data4,data5)这样用一个连接插入是最快的方法
比如想将一个1000W数据的数据库表,导出到文件;此时,你要么进行分页,oracle当然用三层包装即可,mysql用limit,不过分页每次都会新的查询,而且随着翻页,会越来越慢,其实我们想拿到一个句柄,然后向下游动,编译一部分数据(如10000行)将写文件一次(写文件细节不多说了,这个是最基本的),需要注意的时候每次buffer的数据,在用outputstream写入的时候,最好flush一下,将缓冲区清空下;接下来,执行一个没有where条件的SQL,会不会将内存撑爆?是的,这个问题我们值得去思考下,通过API发现可以对SQL进行一些 *** 作,例如,通过:PreparedStatement statement = connectionprepareStatement(sql),这是默认得到的预编译,还可以通过设置:PreparedStatement statement = connectionprepareStatement(sql , ResultSetTYPE_FORWARD_ONLY , ResultSetCONCUR_READ_ONLY);
来设置游标的方式,以至于游标不是将数据直接cache到本地内存,然后通过设置statementsetFetchSize(200);设置游标每次遍历的大小;OK,这个其实我用过,oracle用了和没用没区别,因为oracle的jdbc API默认就是不会将数据cache到java的内存中的,而mysql里头设置根本无效,我上面说了一堆废话,呵呵,我只是想说,java提供的标准API也未必有效,很多时候要看厂商的实现机制,还有这个设置是很多网上说有效的,但是这纯属抄袭;对于oracle上面说了不用关心,他本身就不是cache到内存,所以java内存不会导致什么问题,如果是mysql,首先必须使用5以上的版本,然后在连接参数上加上useCursorFetch=true这个参数,至于游标大小可以通过连接参数上加上:defaultFetchSize=1000来设置,例如:
jdbc:mysql://xxxxxxxxxxxx:3306/abczeroDateTimeBehavior=convertToNull&useCursorFetch=true&defaultFetchSize=1000
上次被这个问题纠结了很久(mysql的数据老导致程序内存膨胀,并行2个直接系统就宕了),还去看了很多源码才发现奇迹竟然在这里,最后经过mysql文档的确认,然后进行测试,并行多个,而且数据量都是500W以上的,都不会导致内存膨胀,GC一切正常,这个问题终于完结了。
以上就是关于如何使用java代码向oracle数据库一次性插入多条数据全部的内容,包括:如何使用java代码向oracle数据库一次性插入多条数据、java用什么方法插入数据量很大但速度又快。、你好,java 向数据库添加大量数据时内存溢出 在不改变内存的情况下如何解决 你当时是怎么解决的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)