zoukankan      html  css  js  c++  java
  • JAVA记录-JDBC介绍

    JDBC(Java DataBase Connection),java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时JDBC也是个商标名。

    简单地说,JDBC可做三件事:

    1、与数据库建立连接;

    2、发送操作数据库的语句;

    3、处理结果。

    JDBC开发的六个基本步骤

    1、加载Driver

    2、获得数据库连接(Connection接口)

    3、创建Statement(接口,传送sql命令的工具)

    4、执行sql;

    5、如果执行了select,处理ResultSet(接口,结果集)

    6、释放资源

    第一步:注册Driver,加载Driver的实现类

    Class.forName("com.mysql.jdbc.Driver");

    第二步:获得Connection

            Connection connection = DriverManger.getConnection( url , username, password);

            DriverManager是Driver的管理者,实际连接db的是Driver

    第三步:创建Statement

            Statement stm = conn.createStatement();

    第四步:执行sql命令

         返回boolean值,表示是否有ResultSet返回。true-->有  false-->没有

                   if( resultSet.next()){    ResultSet rs = stm.getResultSet();  }

         2.  executeQuery(sql) : 专门执行select(查询语句所用),返回ResultSet

         3.  executeUpdate(sql) : 专门执行insert update delete(添加,删除,修改操作所用),返回一个int值,表示命令,执行后,表里受到影响的行数

    第五步:处理ResultSet

          1. next() : 向下一行移动指针,同时返回一个boolean,用来表明当前行是否有数据

          2. get**()系列:获取当前的某一列数据。getInt(列的下标)   getString   getDate  getDouble

          3. 结果集里的指针开始处于”第一行的上一行“,结束时处于”最后一行的下一行“

    第六步:释放资源

          按照产生对象逆序释放相关资源  rs --> stm --> conn。 

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class OracleToMySQL extends Thread {
    	/**
    	 * 查询ORACLE字段数据并返回map对象
    	 * 
    	 * @return
    	 */
    	public Map<String, Object> GetOracleTable() {
    		ArrayList<String> aList = new ArrayList<String>();
    		ArrayList<String> bList = new ArrayList<String>();
    		Map<String, Object> om = new HashMap<String, Object>();
    		Connection con = null;
    		PreparedStatement pre = null;
    		ResultSet result = null;
    		try {
    			Class.forName("oracle.jdbc.driver.OracleDriver");// 加载驱动
    			String url = "jdbc:oracle:" + "thin:@10.2.1.169:1521:BIT";// 连接路径
    			String user = "bit";// 用户名
    			String password = "bit123";// 密码
    			con = DriverManager.getConnection(url, user, password);// 连接
    			String sql = "select a.SYMPTOMA as aname,a.SYMPTOMB as bname  from SURVIVORSHIP_CURVE_EXPER a";// SQL语句
    			pre = con.prepareStatement(sql);
    			result = pre.executeQuery();// 执行SQL操作
    			while (result.next()) {
    				String a = result.getString("aname"); // 获取字段名数据
    				String b = result.getString("bname"); // 获取字段名数据
    				aList.add(a);// 添加到ArrayList列表
    				bList.add(b);// 添加到ArrayList列表
    			}
    			om.put("a", aList);// 设置键值
    			om.put("b", bList);// 设置键值
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				result.close();
    				pre.close();
    				con.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		return om;// 返回map对象
    	}
    
    	/***
    	 * 将从获取到ORACLE字段数据批量入库到MySQL
    	 */
    	@SuppressWarnings("unchecked")
    	public void run() {
    		String url = "jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true";
    		String name = "com.mysql.jdbc.Driver";
    		String user = "root";
    		String password = "1";
    		Connection conn = null;
    		Map<String, Object> map = new HashMap<String, Object>();
    		OracleToMySQL omy = new OracleToMySQL();
    		map = omy.GetOracleTable();
    		List<Object> val1 = new ArrayList<Object>();
    		List<Object> val2 = new ArrayList<Object>();
    		try {
    			Class.forName(name);
    			conn = DriverManager.getConnection(url, user, password);// 获取连接
    			conn.setAutoCommit(false);// 关闭自动提交
    		} catch (ClassNotFoundException ex) {
    			ex.printStackTrace();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		Long begin = new Date().getTime();
    		String sql = "INSERT INTO test(aname,bname) VALUES(?,?) ";
    		try {
    			conn.setAutoCommit(false);
    			PreparedStatement pst = (PreparedStatement) conn.prepareStatement(sql);// 准备执行语句
    			for (Map.Entry<String, Object> entry : map.entrySet()) {
    				// System.out.println(entry.getKey()+":"+entry.getValue());
    				if (entry.getKey() == "a") {
    					val1 = (List<Object>) entry.getValue();// 获取第一组查询值
    				} else {
    					val2 = (List<Object>) entry.getValue();// 获取第二组查询值
    				}
    			}
    			for (int i = 0; i < val1.size(); i++) {
    				pst.setObject(1, val1.get(i));
    				pst.setObject(2, val2.get(i));
    				pst.addBatch();// 添加批处理
    			}
    			pst.executeBatch();
    			conn.commit();
    			pst.close();
    			conn.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		Long end = new Date().getTime();
    		System.out.println("系统批量插入数据" + val1.size() + "条,共花费时间 " + (end - begin) / 1000 + "s");
    	}
    	public static void main(String[] args) {
    		new OracleToMySQL().start();// 开始线程执行语句
    	}
    }
    

      

     

  • 相关阅读:
    七牛云李意扬:如何收集 Go 实时覆盖率丨ECUG Meetup 回顾
    OpenTelemetry 微服务链路追踪
    空接口
    安全规则集合
    采用最快回应
    Golang单元测试实战
    源码 kratos 配置热加载分析
    烟花 光影
    控制Repeater显示列数
    基本代码安全知识
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7699384.html
Copyright © 2011-2022 走看看