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

  

 

JAVA记录-JDBC介绍的更多相关文章

  1. JAVA记录-Mybatis介绍

    1.什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyB ...

  2. 关于Java(JDBC介绍)

    JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的. JDBC 简单功能 连接数据源,如数据库 传给数据库查询和更新指令 获取并处理数据库返回结果(对查询等的响应) 示例代码 ...

  3. JAVA记录-Servlet介绍

    1.什么是Servlet Servlet是sun公司提供的一门用于开发动态web资源的技术.Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...

  4. Java数据库连接--JDBC调用存储过程,事务管理和高级应用

    相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统 ...

  5. 杂项-Java:JDBC

    ylbtech-杂项-Java:JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访 ...

  6. JAVA基本类库介绍

    我们曾经讲过,Java已经为编程者编制了许多类,这些类已经经过测试,基本上不存在错误,这些类都是我们编程的基础.如果不利用这些已存在的类,我们的 编程工作将变得异常复杂,所以我们应尽可能多的掌握Jav ...

  7. 【Java】JDBC连接数据库

    JDBC介绍 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言 ...

  8. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  9. Java的JDBC事务详解

    Java的JDBC事务详解         分类:             Hibernate              2010-06-02 10:04     12298人阅读     评论(9) ...

随机推荐

  1. Quartz中时间表达式的设置-----corn表达式 (转)(http://www.cnblogs.com/GarfieldTom/p/3746290.html)

    Quartz中时间表达式的设置-----corn表达式 (注:这是让我看比较明白的一个博文,但是抱歉,没有找到原作者,如有侵犯,请告知) 时间格式: <!-- s m h d m w(?) y( ...

  2. JWT验证

    理解 JSON Web Token(JWT) 验证 JSON Web Token认证的操作指南 在本文中,我们将了解JSON Web Token的全部内容. 我们将从JWT的基本概念开始,然后查看其结 ...

  3. varnish页面缓存服务

    varnish页面缓存服务 https://www.cnblogs.com/L-dongf/p/9310144.html http://blog.51cto.com/xinzong/1782669 阅 ...

  4. HDU 2071 Max Num

    http://acm.hdu.edu.cn/showproblem.php?pid=2071 Problem Description There are some students in a clas ...

  5. JavaScript表单提交不能清空type为hidden的input快速解决方案

    http://stackoverflow.com/questions/2559616/javascript-true-form-reset-for-hidden-fields 把input type= ...

  6. Docker-Compose 安装

    1. 什么是Docker-Compose Compose项目来源于之前的fig项目,使用python语言编写,与docker/swarm配合度很高. Compose 是 Docker 容器进行编排的工 ...

  7. CentOS virt-manager 安装Win2008r2的一种GUI方法

    1. 必须在物理机上面安装CentOS机器. 安装方法上一个blog里面简单写过. 注意一点,重复安装时 总是提示no disk found 我的解决办法使用 windows 安装盘 格式化了下磁盘重 ...

  8. 关于安装 rst2pdf 时遇到的 setuptools过老的问题

    由于想把flask里面的.rst文档 转一些成pdf方便查看和翻阅(.rst文档都非常新一直在维护) 所以查到一个模块rst2pdf 安装好之后却发现警告里面提示我的setuptools版本过老无法运 ...

  9. Idea for Mac 过期 IntelliJ IDEA 2017 完美注册方法(附idea for Mac破解方法)

    Idea 不能使用了: 开始破解: (1)首先下载 jar包: https://download.csdn.net/download/engerla/10573069 放到位置: /Applicati ...

  10. HTMl Dom操作

    訪問: getElementById():帶回指定id的所有元素 getElementByTagName():帶回指定標籤名的所有的元素 getElementByClassName():帶回指定類型名 ...