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. Centos固定IP

    centos7 联网 在虚拟机中以最小化方式安装centos7,后无法上网,因为centos7默认网卡未激活. 而且在sbin目录中没有ifconfig文件,这是因为centos7已经不使用 ifco ...

  2. katalon设置Android SDK路径

    本文链接:https://blog.csdn.net/feiniao8651/article/details/82809147文章允许转载,请注明来源:https://blog.csdn.net/fe ...

  3. yii的rules验证规则

    图片验证 public function rules() { return [ [['id'], 'integer'], [['id'], 'required'], [['files'], 'file ...

  4. 从Spring看Web项目开发

    之前简单介绍过Spring框架,本文换个角度重新诠释Spring.使用Java语言开发的项目,几乎都绕不过Spring,那么Spring到底是啥,为何被如此广泛的应用,下面从以下两个问题出发来剖析Sp ...

  5. hiho #1469 : 福字(dp)

    #1469 : 福字 时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 新年到了,你收到了一副画.你想找到里面最大的福字. 一副画是一个n × n的矩阵,其中每个位置都是一个 ...

  6. react浏览器回退按钮的时候传递参数

    本来是有这个需求的,但是后来发现回退不也是到某个页面吗?接下来就使用了redux,真香啊,不管用户怎么操作,你到这个界面都给他一个值就完事了,没有就不给他这个值. 哈哈哈,公司框架使用umi.上代码 ...

  7. JAVA笔记4-static关键字

    1.static方法中不能使用this关键字 2.例题:static成员变量用于计数     

  8. 2017noip总结

    day0 酒店位置很好,旁边就是玉树公园,3公里处还有万达广场: 晚上去万达吃喝玩乐, 不过,打车等了好久,手机还没电了. 同时水杯还在广州扎根了...(暗示后文悲惨结局) day1 8:30 监考老 ...

  9. uniapp引用iconfont图标

    不得不说uniapp引入iconfont确实比较坑.下面方法可行: 引入方法: 1.在confont官网找好图标,然后点击复制代码, 2.点击红圈的复制代码后在网页打开,出现如下: 3.然后再unia ...

  10. JAVA 获取类名,函数名

    获取以下获取方法所在函数的相关信息 1.获取当前函数名:Thread.currentThread().getStackTrace()[1].getMethodName(); 2.获取当前类名:Thre ...