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();// 开始线程执行语句 } }