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. Comparer Under Centos 7

    Kompare 效果还行.

  2. Max length of title attribute in html

    测了一下chrome是1024个utf-8字符. 具体可见: http://stackoverflow.com/questions/8516235/max-length-of-title-attrib ...

  3. Linux CentOS虚拟机网卡配置

    最近在VMware安装CentOS6.5之后,每次从宿主机访问虚拟机的Oracle时,都要修改IP地址,因为没有设置虚拟机的IP,所以每次开机之后虚拟机的IP地址都是随机的,于是研究了下给虚拟机配置静 ...

  4. Linux CentOS7 安装php简要过程以及nginx

    Copy From  https://www.cnblogs.com/freeweb/p/5425554.html 修改了下: 1. 下载php源码: wget  http://cn2.php.net ...

  5. WMS与MES集成

    ERP的物流管理只偏重于帐务的管理,对现场实物流的及时性和精细程度管理均不够,无法满足企业日益精细化管理的需求,WMS可以弥补这个缺陷,WMS采用条码技术及时反应物流过程中的变化,同时将存量细化到货架 ...

  6. angular4 组件通讯、生命周期

    主要通讯形式 父组件通过属性绑定到子组件,子组件通过事件传递参数到父组件 父组件通过局部变量获取子组件的引用 父组件使用@ViewChild获取子组件的引用 两个不相关联的组件使用中间人模式交互 终极 ...

  7. 【Java】 异常

    异常分类 所有的异常都是由Throwable继承而来,但在下一层理解分解为两个类Error和Exception. Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误.应用程序不应该跑 ...

  8. SpringMVC @RequestBody的使用

    @RequestBody的作用 @RequestBody用于读取Request请求的body数据,然后利用SpringMVC配置的HttpMessageConverter对数据进行转换,最后把转换后的 ...

  9. Struts2 Intercepter 笔记

    以前一直对Struts2的自定义拦截器(intercepter)不是很清楚,今天仔细研究了下,终于搞懂了,现在记录对拦截器的总结如下: 1:自定义拦截器的作用一般就是用来实现系统权限控制比较多: 2: ...

  10. 认真学习Linux系统让你真的有收获

    学习,最重要的是有一个认真的态度,熟话说,读书可以改变命运,以前觉得并不一定是这样,其实经历的多了才知道,事实确实如此.试想一个不会写字看书的人,他的生活该有多么无聊.读书容易,但读好书并不总是件容易 ...