JDBC API 包含以下几个核心部分:

1:JDBC 驱动

2:Connections (连接)

3:Statements (声明)

4:Result Sets (结果集)

JDBC: 打开数据库连接

Loading the JDBC Driver(加载数据库驱动)

在打开数据库连接前必须先加载数据库驱动

Class.forName("driverClassName");

Opening the Connection(打开连接)

String url = "jdbc:mysql://127.0.0.1:3306/appName";
String user = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url,user,password);

Closing the Connection(关闭连接)

connection.close();

JDBC:查询数据库

对数据库进行操作,你需要创建SQL Statement,然后发送至数据库,得到返回结果.

Statement statement = conn.createStatement(); 

创建Statement后执行查询

String sql = "select * from table";
ResultSet result = statement.executeQuery(sql); 

对结果集进行迭代

while(result.next()){
String name = result.getString("name");
int age = result.getInt("age");
}
//根据数据库字段名获取对应的数据
result.getString("columnName");
result.getInt("columnName");
result.getLong("columnName");
result.getDouble("columnName");
result.getBigDecimal("columnName");
//通过字段索引顺序获取字段数据,索引从1开始
result.getInt(1);
result.getString(2);
//通过字段名找到数据库对应字段索引的位置
int columnIndex = result.findColumn("columnName");

如果需要迭代大量数据,使用索引的效率要比查询字段名获取数据要快.

完成数据迭代后需要对resultSet和statement进行关闭.

result.close();
statement.close();

JDBC:更新数据库

更新数据库包含更新数据库记录和删除数据库记录

excuteUpdate()方法可以用来更新和删除数据库记录.

更新记录

Statement statement = conn.createStatement();
String sql = "update table set name = ’name‘ where id = 1“;
int rowAffected = statement.executeUpdate(sql); 

rowsAffected代表有多少条记录被更新了.

删除记录

像上面那样更新直接执行sql语句

JDBC:结果集

创建结果集

可以通过执行Statement和PreparedStatement来创建结果集.

Statement statement = conn.createStatement();
String sql = "select * from table";
ResultSet result = statement.executeQuery(sql); PrepareStatement statement = conn.preparedStatement();
ResultSet result = statement.executeQuery(sql);

更新结果集

result.updateString("name","alex");
result.updateInt("age",33);
result.updatBigDecimal("cofficient",new BigDecimal("0.1343");
result.updateRow();

数据将在调用updateRow()方法后才将数据真正更新至数据库,如果updateRow()执行与事物中则需等到事物提交才将数据提交更新.

JDBC:PreparedStatement

PreparedStatement特性:

  1. 更容易操作sql statement 参数

  2. 可对preparedstatement的重用

  3. 更容易的批处理

操作示例

String sql = "update people set firstname=? , lastname=? where id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "Gary");
preparedStatement.setString(2, "Larson");
preparedStatement.setLong (3, 123);
int rowsAffected = preparedStatement.executeUpdate();

创建PreparedStatement

String sql = "select * from people where firstname=? and lastname=?";

PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "John");
preparedStatement.setString(2, "Smith");
ResultSet result = preparedStatement.executeQuery();

PreparedStatement的重用

String sql = "update people set firstname=? , lastname=? where id=?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "Gary");
preparedStatement.setString(2, "Larson");
preparedStatement.setLong (3, 123); int rowsAffected = preparedStatement.executeUpdate();
preparedStatement.setString(1, "Stan");
preparedStatement.setString(2, "Lee");
preparedStatement.setLong (3, 456); int rowsAffected = preparedStatement.executeUpdate();
JDBC:批量更新操作

Statement Batch Updates

Statement statement = null;
try{
statement = conn.createStatement();
statement.addBatch("update people set firstname='John' where id=123");
statement.addBatch("update people set firstname='Eric' where id=456"); int[] recordsAffected = statement.executeBatch();
}finally{
if(statent != null) statement.close();
}

PreparedStatement Batch Updates

String sql = "update people set firstname=? , lastname=? where id=?";

PreparedStatement preparedStatement = null;
try{
preparedStatement =
connection.prepareStatement(sql);
preparedStatement.setString(1, "Gary");
preparedStatement.setString(2, "Larson");
preparedStatement.setLong (3, 123); preparedStatement.addBatch(); preparedStatement.setString(1, "Stan");
preparedStatement.setString(2, "Lee");
preparedStatement.setLong (3, 456); preparedStatement.addBatch(); int[] affectedRecords = preparedStatement.executeBatch(); }finally {
if(preparedStatement != null) {
preparedStatement.close();
}
}
JDBC:事务

开始事务

conn.setAutoCommit(false);

事务回滚

conn.rollback();

提交事务

conn.commit();

示例

Connection connection = ...
try{
connection.setAutoCommit(false);
Statement statement1 = null;
try{
statement1 = connection.createStatement();
statement1.executeUpdate(
"update people set name='John' where id=123");
} finally {
if(statement1 != null) {
statement1.close();
}
}
Statement statement2 = null;
try{
statement2 = connection.createStatement();
statement2.executeUpdate(
"update people set name='Gary' where id=456");
} finally {
if(statement2 != null) {
statement2.close();
}
}
connection.commit();
} catch(Exception e) {
connection.rollback();
} finally {
if(connection != null) {
connection.close();
}
}

Java JDBC 基础的更多相关文章

  1. Java JDBC基础学习小结

    JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作.JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver.Connection.Statement.Re ...

  2. Java JDBC 基础知识

    一.JDBC常用接口.类介绍 JDBC提供对独立于数据库统一的API,用以执行SQL命令.API常用的类.接口如下: DriverManager 管理JDBC驱动的服务类,主要通过它获取Connect ...

  3. Java JDBC高级特性

    1.JDBC批处理 实际开发中需要向数据库发送多条SQL语句,这时,如果逐条执行SQL语句,效率会很低,因此可以使用JDBC提供的批处理机制.Statement和PreparedStatemen都实现 ...

  4. Java JDBC的基础知识(五)

    本文主要记录JDBC基础知识之后的部分内容.另外,我看到<Java核心基础2>中第四章是主要介绍数据库编程的.里面有一些说明和应用特别灵活,有些部分也太容易理解,建议大家看一下.这篇是依然 ...

  5. Java JDBC的基础知识(三)

    在前面的Java JDBC的基础知识(二)和(三)中,主要介绍JDBC的原理和简单的应用过程.尤其在(二)中,可以发现代码进行多次try/catch,还有在前面创建连接等过程中好多参数我都给写定了. ...

  6. Java JDBC的基础知识(二)

    在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...

  7. Java 中 JDBC 基础配置

    Java 中 JDBC 基础配置 <resource auth="Container" driverclassname="oracle.jdbc.driver.Or ...

  8. Java应用程序连接数据库--JDBC基础

    Java应用程序连接数据库--JDBC基础   Java应用程序连接数据库–JDBC基础 <!-- MySQL驱动,连接数据库用,由数据库厂商提供 --> <dependency&g ...

  9. Java JDBC的基础知识(四)

    之前学习了如何创建一个数据库工具类,如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.Res ...

随机推荐

  1. js 条件方法、数组方法

    经常写代码写的很多很累赘,看看下面例子,争取以后代码简洁简化.个人也觉得简洁分明的代码很重要. 本文来自另一篇博客:https://www.cnblogs.com/ljx20180807/p/1084 ...

  2. 部署 12306 github 项目

    郑重声明, 本文仅用作学习研究使用,请勿用作商业用途,遵守法律!!! 部署环境有些坑,踩一次就够了... 原项目地址 git clone 原项目以及 识别验证码的模型 如果遇到 无法解析的问题 ,则 ...

  3. Hyperledger Fabric(4)链码ChainCode

    智能合约,是一个抽象的概念,智能合约的历史可以追溯到 1990s 年代.它是由尼克萨博(Nick Szabo)提出的理念,几乎与互联网同龄. 我们这里所说的智能合约只狭义的指区块链中.它能够部署和运行 ...

  4. python3.7 利用pyhive 连接上hive(亲测可用)

    来python爬虫中,经常会遇到数据的存储问题,如果有大量数据,hive存储是个不错的选择. 那么python如何来连接hive呢?网上有各种教程但是都不是很好用,亲自测试pyhive可用 要求:可用 ...

  5. xml_dom解析之二

    dom解析(二) 通过代码创建一个xml文件 package xml4; import java.io.File; import javax.xml.parsers.DocumentBuilder; ...

  6. 4.flask第三方组件

    1.flask-session的使用 在flask中,有一个app.session_interface = SecureCookieSessionInterface(),也就是存session,调用o ...

  7. deep_learning_Function_tf.add()、tf.subtract()、tf.multiply()、tf.div()

    tf.add().tf.subtract().tf.multiply().tf.div()函数介绍和示例 1. tf.add() 释义:加法操作 示例: x = tf.constant(2, dtyp ...

  8. 运维都该会的Socket知识!

    本篇博客转自赵班长 所有运维都会的Socket知识!!! 原创: 赵班长 新运维社区 什么是Socket? 大家都用电脑上网,当我们访问运维社区https://www.unixhot.com的时候,我 ...

  9. Mac下安装配置NMP环境

    第一次在Mac上安装NMP,记录下 因为下面环境的安装都是基于homebrew的,所以如果没有安装他的话,要先安装他(官网:https://brew.sh/index_zh-cn.html) 安装ho ...

  10. [uboot] (番外篇)uboot relocation介绍(转)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ooonebook/article/det ...