返回顶部
首页 > 资讯 > 数据库 >java 并发插入数据到oracle
  • 273
分享到

java 并发插入数据到oracle

2024-04-02 19:04:59 273人浏览 薄情痞子
摘要

各位技术大牛,请教java 多线程问题由于项目需要,需要从oracle中dept将表记录迁移到dept2中,dept和dept2表结构一样。设想:查询:Statement stmt&nb

各位技术大牛,请教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企业级通用权限安全框架源码获取【下载地址】 

您可能感兴趣的文档:

--结束END--

本文标题: java 并发插入数据到oracle

本文链接: https://lsjlt.com/news/44691.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java 并发插入数据到oracle
    各位技术大牛,请教java 多线程问题由于项目需要,需要从oracle中dept将表记录迁移到dept2中,dept和dept2表结构一样。设想:查询:Statement stmt&nb...
    99+
    2024-04-02
  • oracle 数据插入
    1、插入完整行格式:insert into table(                     ...
    99+
    2024-04-02
  • Python插入数据到elasticse
    将一个文件中的内容逐条写入elasticsearch中,效率没有写hadoop高,跟kafka更没得比import time from elasticsearch import Elasticsearch from collections...
    99+
    2023-01-31
    数据 Python elasticse
  • C#怎么读取Excel中数据并插入到数据库中
    本篇内容主要讲解“C#怎么读取Excel中数据并插入到数据库中”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么读取Excel中数据并插入到数据库中”吧!C#读取Excel中数据,首先上传选...
    99+
    2023-06-18
  • 利用MyBatis怎么将数据插入到Oracle数据库中
    这篇文章将为大家详细讲解有关利用MyBatis怎么将数据插入到Oracle数据库中,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、mybatis批量插入数据到Oracle中的两种方式:第一...
    99+
    2023-05-31
    mybatis oracle
  • 怎么解决java并发请求下数据插入重复问题
    本篇内容介绍了“怎么解决java并发请求下数据插入重复问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言前段时间发现数据库里经常会存在两...
    99+
    2023-06-25
  • SQLServer中怎么防止并发插入重复数据
    SQLServer中怎么防止并发插入重复数据,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SQLServer中防止并发插入重复...
    99+
    2024-04-02
  • java 批量插入数据
    批量插入数据,常见的使用mybatis foreach 插入的方式,原始的方式和批处理 1,常见的mybatis foreach xml insert into CODEINFO (CODE_TYPE, CODE, MEAN, STAT...
    99+
    2023-09-03
    mybatis mysql 批量插入
  • java并发请求下数据插入重复问题的解决方法
    目录前言分布式锁工具类在过滤器实现请求拦截总结前言 前段时间发现数据库里经常会存在两条相同的用户数据,导致数据查询异常。查了原因,发现前端微信小程序在授权登录时,有时会出现同时发送了...
    99+
    2024-04-02
  • python批量插入数据到mysql
    使用python批量插入数据到mysql的三种方法 自动化单条insert # -*- coding:utf-8 -*-import timefrom pymysql import *# 装饰器,计算插入50000条数据需要的时间def t...
    99+
    2023-09-06
    mysql 数据库 sql
  • SpringBootMybatis批量插入Oracle数据库数据
    目录前端数据数据表结构后端Controller:mapperxml前端数据 有如下需求,前端提交一个对象cabinData,保存到数据表中,对象结构如下:  {      "ship...
    99+
    2024-04-02
  • Android批量插入数据到SQLite数据库
      Android中在sqlite插入数据的时候默认一条语句是一个事务,因此如果存在上万条数据插入的话,那需要执行上万次插入操作,操作速度可想而知。因此在Android中插...
    99+
    2022-06-06
    数据 sqlite数据库 SQLite Android
  • MySQL之创建表并插入数据
    文章目录 一、在数据库中创建表二、Table的变量类型2.占位符类型 三、导出数据库中的表总结 一、在数据库中创建表 MySQL中table实在已有数据库的基础上创建的,因此在创...
    99+
    2023-10-27
    mysql 数据库
  • Javascript连接数据库查询并插入数据
    目录一、准备数据库二、在Vscode中编译package.json文件三、用Javascript代码实现数据库的连接四、查询和插入数据编译环境 : vscode数据库 : MySQL...
    99+
    2024-04-02
  • Oracle大量数据插入加速
    方法:开并行、不产生日志。 insert into goal_tabname select from tabname; ...
    99+
    2019-11-10
    Oracle大量数据插入加速
  • java实现批量插入数据
    日常工作或者学习中,可能会遇到批量插入数据的需求,一般情况下数据量少的时候,我们会直接调用批量接口插入数据即可,当数据量特别大时,可能由于数据库限制,插入的数据最多不能超过100条(假如限制100条)...
    99+
    2023-09-03
    java 数据库 oracle
  • python向oracle数据库插入日期
    在网上找了好多,试了都报错,最后发现直接用sysdate可以直接插入 1 cursor.execute("insert into px_jobtype (id, name, classify_id,create_user_id,creat...
    99+
    2018-10-24
    python向oracle数据库插入日期 数据库入门 数据库基础教程 数据库 mysql
  • 使用python3 实现插入数据到mysql
    我就废话不多说了,直接上代码吧! pip install pymysql import pymysql import pandas as pd conn = pymysql.connect( host...
    99+
    2022-05-20
    python3 插入数据 mysql
  • PostgreSQL中怎么插入数据到表中
    要在PostgreSQL中插入数据到表中,可以使用INSERT INTO语句。以下是一个示例: INSERT INTO table_...
    99+
    2024-04-09
    PostgreSQL
  • Mysql并发插入死锁问题
    文章目录 一、问题二、复现表结构执行顺序死锁信息 三、死锁原因四、修改代码FA&QReference 一、问题 线上数据库版本,隔离级别:5.6.36-log,REPEA...
    99+
    2023-10-10
    mysql 数据库 sql 死锁
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作