精华内容
下载资源
问答
  • 公司用的系统比较老,不能上框架,因此用原生jdbc。 原来的程序员写的一条一条插入,又慢又容易报error。 没办法,老夫上网找了资料,重新改写程序。 一、传入list,进行切割 // 数据传输,为提高插入效率,对数据...

    公司用的系统比较老,不能上框架,因此用原生jdbc。
    原来的程序员写的一条一条插入,又慢又容易报error。
    没办法,老夫上网找了资料,重新改写程序。

    一、传入list,进行切割

    // 数据传输,为提高插入效率,对数据进行切割
    		int ls = list.size();
            int size = 1000;
    		if (ls <= size) {
    			// 若数据量小于size时,直接插入
    			insertDulDataForSqlServer(list);
    		} else {
    			int times = (int) Math.ceil(ls / size);
    			System.out.println("总插入批次   times: " + times);
    			for (int i = 0; i <= times; i++) {
    				System.out.println("截取的开始角标" + i * size + "  截止角标" + Math.min((i + 1) * size, ls) + " min"
    						+ (i + 1) * size + " max" + ls);
    				// Math.min()方法,取较小值
    				List<Policy> subList = list.subList(i * size, Math.min((i + 1) * size, ls));
    				// 插入
    				insertDulDataForSqlServer(subList);
    			}
    		}
    

    二、执行bean转化并插入

    private void insertDulDataForSqlServer(List<Policy> list) throws SQLException {
    		//连接数据库
    		Connection conn = DBConnection();
    		try {
    				PreparedStatement stmt = conn
    					.prepareStatement("insert into dbo.BC_CONTROL_INSURANCE values(?,?,?,?,?)");
    			// 执行
    			for (Policy bean : list) {
    				preparedStatementStringSetter(stmt, 1, bean.getNo());
    				preparedStatementStringSetter(stmt, 2, "");
    				preparedStatementStringSetter(stmt, 3, bean.getIn());
    				preparedStatementStringSetter(stmt, 4, bean.getPolicy());
    				preparedStatementDateSetter(stmt, 5, bean.getDat());
    				
    				stmt.addBatch();
    
    			}
    			stmt.executeBatch();
    			System.out.println("执行插入语句:");
    			// 提交需要执行的语句
    			conn.commit();
    			stmt.close();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} finally {
    			try {
    				if (conn != null)
    					conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    
    	}
    

    到此基本结束,

    后面最多给个jdbc连接

    private Connection DBConnection() {
    
    		String url = "jdbc:microsoft:sqlserver://ip;databaseName=DB_TRANS";
    		String userString = "x";
    		String pwd = "123";
    
    		Connection conn = null;
    		try {
    			return conn = DriverManager.getConnection(url, userString, pwd);
    		} catch (SQLException e) {
    			//因为公司网络垃圾,怕连不上数据库,所以连接两次
    			try {
    				return conn = DriverManager.getConnection(url, userString, pwd);
    			} catch (SQLException e1) {
    				e1.printStackTrace();
    			}
    			e.printStackTrace();
    		}
    		return conn;
    	}
    
    展开全文
  • 原生jdbc复习

    2017-05-15 15:02:25
    public List testQuery(String openid, int page) { Connection con = null; try { //获取一个数据库,连接,实现方式略,可以使用spring生成 con = ConnectionFactory.getInstance().getConnection(Constant...
    	public List<Order> testQuery(String openid, int page)  {
    		Connection con = null;
    		try {
    			//获取一个数据库,连接,实现方式略,可以使用spring生成
    			con = ConnectionFactory.getInstance().getConnection(Constant.DATABASE_DRAGON);
    			//执行查询,拼装参数
    			PreparedStatement pstmt = con.prepareStatement("select id, openid, billno, name from orders where openid=?  order by id desc limit ?,20");
    			pstmt.setString(1, openid);
    			pstmt.setInt(2, (page - 1) * 20);
    			
    			List<Order> orders = new ArrayList<Order>();
    			ResultSet rs = pstmt.executeQuery();
    			//获取结果集
    			while (rs.next()) {
    				Order order = new Order(rs.getLong("id"), rs.getString("openid"), rs.getString("billno"), rs.getString("name"));
    				orders.add(order);
    			}
    			rs.close();
    			pstmt.close();
    			return orders;
    		} catch (Exception e) {
    			logger.error("", e);
    			return null;
    		} finally {
    			if (con != null) {
    				try {
    					con.close();
    				} catch (Exception e) {
    					logger.error("", e);
    				}
    			}
    		}
    	}
    	
    	public boolean testInsert(PayInfo payInfo)  {
    		Connection con = null;
    		try {
    			//获取一个数据库连接,比较简单,过程略
    			con = ConnectionFactory.getInstance().getConnection(Constant.DATABASE_DRAGON);
    			PreparedStatement pstmt = con.prepareStatement("insert into orders (openid,billno, name, amount) values(?,?,?,?)");
    			pstmt.setString(1, payInfo.getOpenid());
    			pstmt.setString(2, payInfo.getBillno());
    			pstmt.setString(3, payInfo.getItemname());
    			pstmt.setInt(4, payInfo.getAmount());
    			//执行查询
    			pstmt.executeUpdate();
    			return true;
    		} catch (Exception e) {
    			logger.error(e.toString(),e);
    			return false;
    		} finally {
    			if (con != null) {
    				try {
    					con.close();
    				} catch (Exception e) {
    					logger.error(e.toString());
    				}
    			}
    		}
    	}

    展开全文
  • import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList;...import java.util.List; public class ReadDB { public List<String> quer...
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.List;
    
    public class ReadDB {
    
        public List<String> query() {
            Connection conn = null;
            PreparedStatement stmt = null;
            ResultSet rs = null;
            String sql = " select * from compare; ";
            List<String> mapList = new ArrayList<String>();
            try
            {
                conn = DBHelper.getConnection();
                stmt = conn.prepareStatement(sql);
                rs = stmt.executeQuery();
                while(rs.next())
                {
                    mapList.add(rs.getString("id"));
                }
                return mapList;
            }
            catch(Exception e)
            {
                e.printStackTrace();
                return null;
            }
            finally
            {
                if(rs!=null)
                {
                    try
                    {
                        rs.close();
                        rs = null;
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
                if(stmt!=null)
                {
                    try
                    {
                        stmt.close();
                        stmt = null;
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    推荐一个公众号

    号主为一线大厂架构师,CSDN博客专家,博客访问量突破一千万。主要分享Java、golang架构,源码,分布式,高并发等技术,用大厂程序员的视角来探讨技术进阶、面试指南、职业规划等。15W技术人的选择!

    展开全文
  • 1、查询 /** * 查询数据 * * @param connection 数据库连接 * @param sql sql * @param params 参数 * @return */ public List<Map<String, Object>> executeQuery...

    1、查询

    /**
         * 查询数据
         *
         * @param connection 数据库连接
         * @param sql        sql
         * @param params     参数
         * @return
         */
        public List<Map<String, Object>> executeQuery(Connection connection, String sql, Object[] params) {
            List<Map<String, Object>> list = new ArrayList<>();
            ResultSet rs = null;
            PreparedStatement ps = null;
            try {
                //1.sql 预编译处理
                ps = connection.prepareStatement(sql);
                if (params != null && params.length != 0) {
                    for (int i = 0; i < params.length; i++) {
                        ps.setObject(i + 1, params[i]);
                    }
                }
                //2.执行查询 executeQuery方法(只能查询)
                rs = ps.executeQuery();
                //3.获取数据的字段名称、类型以及数目等表格所必须具备的信息
                ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
                //4.获取返回所有字段的数目
                int columnCount = rsmd.getColumnCount();
                //5.遍历结果集并封装数据格式
                while (rs.next()) {
                    Map<String, Object> map = new ConcurrentHashMap<>();
                    for (int i = 0; i < columnCount; i++) {
                        String columnName = rsmd.getColumnLabel(i + 1);
                        Object columnValue = rs.getObject(i + 1);
                        map.put(columnName, columnValue == null ? "1" : columnValue);                       //todo ConcurrentHashMap类型 值不能为 null 这里做了转换
                    }
                    list.add(map);
                }
            } catch (SQLException e) {
                e.printStackTrace();
                logger.error("executeQuery方法,数据查询操作异常" + new Date());
            } finally {
                closed(rs, ps, null);                                                                //关闭资源
            }
            return list;
        }
    

    2、更新

    /**
         * 批量更新
         *
         * @param conn   数据库连接
         * @param sql    批量的sql
         * @param list   批量数据
         * @param fileds 更新的字段或条件字段数组 (要跟sql 语句的字段顺序一致
         *               例如:sql语句为update spgl_dfxmsplcxxb SET sjsczt = ?, sbyy =?  WHERE lsh =?
         *               则对应的字段数组为["sjsczt","sbyy","lsh"])
         * @return
         */
        public void executeUpdate(Connection conn, String sql, List<Map> list, Object... fileds) {
            PreparedStatement psmt = null;
            try {
                //1.关闭自动提交,即开启事务
                conn.setAutoCommit(false);
                //2.预编译处理
                psmt = conn.prepareStatement(sql);
                //3.更新总条数
                int total = list.size();
                //4.字段数组
                int filedsLen = fileds.length;
                for (int i = 0; i < total; i++) {
                    for (int j = 0; j < filedsLen; j++) {
                        psmt.setObject(j + 1, list.get(i).get(fileds[j]));
                    }
                    //5.添加批处理SQL
                    psmt.addBatch();
                    //6.每200条执行一次,避免内存不够的情况
                    if (i > 0 && i % 200 == 0) {
                        psmt.executeBatch();
                    }
                }
                //7.最后执行剩余不足200条的
                psmt.executeBatch();
                //8.执行完后,手动提交事务
                conn.commit();
                //9.再把自动提交打开
                conn.setAutoCommit(true);
            } catch (SQLException e) {
                //10.事务回滚
                rollbacked(conn);
                logger.error("executeUpdate方法,批量更新异常!" + new Date());
                e.printStackTrace();
            } finally {
                //11.关闭数据库连接
                closed(null, psmt, null);
            }
        }
    

    3、释放资源

    /**
         * 释放资源
         *
         * @param rs   结果集
         * @param ps   预编译处理
         * @param conn 数据库连接
         */
        public void closed(ResultSet rs, PreparedStatement ps, Connection conn) {
            try {
                if (null != rs) rs.close();
                if (null != ps) ps.close();
                if (null != conn) conn.close();
            } catch (SQLException e) {
                logger.error("数据库资源释放错误!" + new Date());
                e.printStackTrace();
            }
        }
    

    5、事务回滚

    /**
         * 事务回滚
         *
         * @param conn 数据库连接
         */
        public void rollbacked(Connection conn) {
            try {
                // 发生异常,事务回滚!
                if (conn != null && !conn.isClosed()) {
                    conn.rollback();
                    conn.setAutoCommit(true);
                    logger.error("更新失败,事务回滚!" + new Date());
                }
            } catch (Exception e) {
                logger.error("事务回滚失败!" + new Date());
                e.printStackTrace();
            }
        }
    
    展开全文
  • packagecom.zdlt.auth.api.common.druid;importlombok.extern.slf4j.Slf4j;importjavax.sql.DataSource;import java.sql.*;importjava.util.ArrayList;importjava.util....importjava.util.List;importja...
  • 一、核心语句 1.HQL语句的使用 1 package ... ... 3 import java.util.List; 4 5 import org.hibernate.Query; 6 import org.junit.Test; 7 8 import com.zdsofe.entity.one2m...
  • 使用原生语句时 /** * 根据id List集合 找到对应id的总需求 * @param idList {@code List<Integer>} id List集合 * @return {@code List<Map<String, String>>} id,totalDemend映射集合 */...
  • 我是学java出身的,web是我主要一块;在做项目的时候最让人别扭的就是hibernate查询大都是查询出List(T指代对应实体类)...的念头,方法虽然可行,可惜的是spring偌大一个框架,居然不提供jdbc分页。。。。无奈之下我...
  • packagecom.zdlt.auth.api.common.druid;importlombok.extern.slf4j.Slf4j;importjavax.sql.DataSource;import java.sql.*;importjava.util.ArrayList;importjava.util....importjava.util.List;importja...
  • jdbc 提供原生批量操作batchUpdate 方法,但是使用起来非常不便需要我们自己实现PreparedStatement来设置字段位置、名称及属性。以下是本人根据类的抽象特性对jdbc批量操作做了封装,有什么不足欢迎指出 protected ...
  • 出处:(hibernate中使用原生的sql语句,报如下错误:)MySQL No Dialect mapping for JDBC type: -1代码:List list = session.createSQLQuery(sql).list();分析:产生些问题的原因是因表中的某个字段类型在hibernate...
  • 在一些应用以及复杂的SQL语句,有的时候我们需要用原生的SQL进行查询,分享怎么解决hibernate使用原生并集成到spring中 首先,新建类:MyJdbcTemplate.java 继承hibernateTemplate 原有方法都可使用 代码如下:...
  • 原生链接数据库方法

    2019-08-06 16:42:42
    public List GetConnection(){ // 连接数据库 Connection conn=null; Statement stmt=null; ResultSet rs=null; try { Class.forName("oracle.jdbc.OracleDriver"); conn= DriverManager....
  • hibernate4.3 原生sql查询返回List&lt;map&gt; 映射异常 https://www.cnblogs.com/luxd/p/8316243.html
  • BaseDAO package com.zking.eight.util; import java.util.Collection; import java.util.List; import java.util.Map;...import org.hibernate.Session;...import org.hibernate.query.Query;...jdbc:executeQu...
  • 分割List为指定size

    2019-03-27 10:38:00
     老项目,用的原生JDBC,获取连接,预编译...然后业务需要要更新很多条数据,我就写了条件为 ——IN()...  根据传入的 list 的 size 循环的给sql语句拼接上“?”为了之后的预编译  然后~ 报错了!! 说参数...
  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中...
  • MyBatis 简介 MyBatis 是什么? MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射)...MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老...
  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的...
  • MyBatis简介MyBatis是什么?MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射)框架,它...MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老...
  • 点关注,不迷路;持续更新Java相关技术及资讯!!!关注私信【555】获取,还可领取更多Java面试题资料MyBatis是什么?MyBatis 是一款优秀的持久层...MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和...
  • 一、原生 JDBC 使用方式 public static void main(String[] args) { Connection conn = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; User user = new User(); List<...
  • 数据库一次性插入10万条数据的方式

    千次阅读 2019-04-19 16:50:53
    1.选择方式: 原生Jdbc 过程: a.模拟生成数据 package com.ruanjian.config; import com.ruanjian.bean.Student; import java.util.ArrayList; import java.util.List; import java.util.Random; import java....
  • 1.从Hbase中进行批量get时,一次get操作获取到的的数据量...2.原生JDBC写法批量执行sql时出现的问题 /*sqlList为要执行的sql的集合,smt为Statement对象,conn为Connection对象*/ for(String sql : sqlList){ ...
  • 很多时候我们需要写重复性的代码来实现等效的功能,比如使用原生JDBC实现增删改查都需要创建连接、获取session、捕获异常、关闭连接等,幸好Mybatis、SpringTemplete等框架把我们解放了。 但业务代码难免会遇到类似...
  • JdbcTemplate效率比较高,直接使用原生jdbc操作,返回的数据是List<Map>的形式。 现在我想寻找一种简单的ORM映射,把数据库查询到的数据转换为JavaBean,因为有时候我们操作JavaBean往往比操作M...
  • Spring(1)——概念,IOC,DI

    2019-10-23 09:58:33
    类对象3.2 依赖注入List,Array,Map,Set3.3 依赖注入内部bean对象3.4 null和空值4 Spring XML合并5 工厂模式5.1 原生工厂模式5.2 Spring工厂模式6 Spring 调用JDBC Spring Spring目前所拥...

空空如也

空空如也

1 2 3 4 5
收藏数 81
精华内容 32
关键字:

原生jdbclist