我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java 并发插入数据到oracle

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java 并发插入数据到oracle

各位技术大牛,请教java 多线程问题

由于项目需要,需要从oracle中dept将表记录迁移到dept2中,dept和dept2表结构一样。
设想:

查询:
Statement stmt = conn.createStatement(
            ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

ResultSet rs = stmt.executeQuery("select * from dept");

通过 rs.last();得到记录的总个数,然后通过这个总个数,多线程实现迁移所有的记录。

插入:
PreparedStatement pstmt = null;
        String psql = "insert into dept2 values(?,?,?)";
        pstmt = conn.prepareStatement(psql);

其中的index为rs结果集的索引值,当index=1,表示rs.next()的第一个值
                    rs.absolute(index);
                    pstmt.setInt(1, rs.getInt(1));
                    pstmt.setString(2, rs.getString(2));
                    pstmt.setString(3, rs.getString(3));

                    pstmt.addBatch();

本人对多线程不是很了解,多次尝试,没能实现多线程迁移数据,希望有高手指点。谢谢!

 

  1. public class ConcurrentTestPreparedStmt  

  2. {  

  3.   

  4.     public static int     totalRowNum;  

  5.   

  6.     public static int     index = 1;  

  7.   

  8.     public static boolean isFinish;  

  9.   

  10.     public static void main(String[] args) throws Exception  

  11.     {  

  12.         Class.forName("oracle.jdbc.driver.OracleDriver");  

  13.   

  14.         String url = "jdbc:oracle:thin:@192.168.5.201:1521:orcl";  

  15.         String user = "scott";  

  16.         String password = "tiger";  

  17.   

  18.         String sql = "select * from dept";  

  19.   

  20.         Connection conn = DriverManager.getConnection(url, user, password);  

  21.   

  22.           

  23.         Statement stmt = conn.createStatement(  

  24.             ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);  

  25.         ResultSet rs = stmt.executeQuery(sql);  

  26.   

  27.           

  28.         PreparedStatement pstmt = null;  

  29.         String psql = "insert into testpstmt values(?,?,?)";  

  30.         pstmt = conn.prepareStatement(psql);  

  31.         //rs.next 只要为true,说明表中记录数  

  32.   

  33.         rs.last();  

  34.         totalRowNum = rs.getRow();  

  35.   

  36.         int i = 0;  

  37.         //问题所在,当 i<2时,表示两个线程,执行时,往目的表中插入了同样一行记录。  

  38.         while (i < 1 && !isFinish)  

  39.         {  

  40.             TaskThread t = new ConcurrentTestPreparedStmt().new TaskThread(  

  41.                 pstmt, rs);  

  42.             new Thread(t).start();  

  43.             i++;  

  44.         }  

  45.   

  46.         //如果没完成,则主线程等待  

  47.         while (!isFinish)  

  48.         {  

  49.             Thread.sleep(500);  

  50.         }  

  51.         pstmt.executeBatch();  

  52.         conn.commit();  

  53.   

  54.         System.out.println("SUCCESS");  

  55.   

  56.     }  

  57.   

  58.     public synchronized int incrementIndex()  

  59.     {  

  60.         return index++;  

  61.     }  

  62.   

  63.     public synchronized int getExecuteNum()  

  64.     {  

  65.         return index;  

  66.     }  

  67.   

  68.       

  69.     class TaskThread implements Runnable  

  70.     {  

  71.         PreparedStatement pstmt = null;  

  72.         ResultSet         rs    = null;  

  73.   

  74.         public TaskThread(PreparedStatement pstmt, ResultSet rs)  

  75.         {  

  76.             this.rs = rs;  

  77.             this.pstmt = pstmt;  

  78.         }  

  79.   

  80.         @Override  

  81.         public void run()  

  82.         {  

  83.   

  84.             int index = incrementIndex();  

  85.             //指定到具体的行数  

  86.             try  

  87.             {  

  88.                 while (index <= totalRowNum)  

  89.                 {  

  90.                     System.out.println("index = " + index);  

  91.                     rs.absolute(index);  

  92.                     pstmt.setInt(1, rs.getInt(1));  

  93.                     pstmt.setString(2, rs.getString(2));  

  94.                     pstmt.setString(3, rs.getString(3));  

  95.   

  96.                     pstmt.addBatch();  

  97.   

  98.                     index = incrementIndex();  

  99.                 }  

  100.   

  101.                 if (getExecuteNum() > totalRowNum)  

  102.                 {  

  103.                     isFinish = true;  

  104.                     return;  

  105.                 }  

  106.   

  107.             }  

  108.             catch (SQLException e)  

  109.             {  

  110.                 e.printStackTrace();  

  111.             }  

  112.         }  

  113.     }  

  114. }  

 

java企业级通用权限安全框架源码获取【下载地址】 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java 并发插入数据到oracle

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python插入数据到elasticse

将一个文件中的内容逐条写入elasticsearch中,效率没有写hadoop高,跟kafka更没得比import timefrom elasticsearch import Elasticsearchfrom collections im
2023-01-31

C#怎么读取Excel中数据并插入到数据库中

本篇内容主要讲解“C#怎么读取Excel中数据并插入到数据库中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么读取Excel中数据并插入到数据库中”吧!C#读取Excel中数据,首先上传选
2023-06-18

怎么解决java并发请求下数据插入重复问题

本篇内容介绍了“怎么解决java并发请求下数据插入重复问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言前段时间发现数据库里经常会存在两
2023-06-25

利用MyBatis怎么将数据插入到Oracle数据库中

这篇文章将为大家详细讲解有关利用MyBatis怎么将数据插入到Oracle数据库中,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、mybatis批量插入数据到Oracle中的两种方式:第一
2023-05-31

Android批量插入数据到SQLite数据库

Android中在sqlite插入数据的时候默认一条语句是一个事务,因此如果存在上万条数据插入的话,那需要执行上万次插入操作,操作速度可想而知。因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度。有时需要把一些数据内置
2022-06-06

Oracle大量数据插入加速

方法:开并行、不产生日志。insert into goal_tabname select from tabname;
Oracle大量数据插入加速
2019-11-10

python向oracle数据库插入日期

在网上找了好多,试了都报错,最后发现直接用sysdate可以直接插入1 cursor.execute("insert into px_jobtype (id, name, classify_id,create_user_id,create_user_name,
python向oracle数据库插入日期
2018-10-24

PostgreSQL中怎么插入数据到表中

要在PostgreSQL中插入数据到表中,可以使用INSERT INTO语句。以下是一个示例:INSERT INTO table_name (column1, column2, column3)VALUES (value1, value
PostgreSQL中怎么插入数据到表中
2024-04-09

使用python3 实现插入数据到mysql

我就废话不多说了,直接上代码吧!pip install pymysqlimport pymysql import pandas as pdconn = pymysql.connect(host='localhost',user='root'
2022-05-20

Javascript如何连接数据库查询并插入数据

这篇文章主要介绍了Javascript如何连接数据库查询并插入数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、准备数据库下载MySQL ,借助数据库图形工具或者在cmd
2023-06-29

编程热搜

目录