Java JDBC 基础
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特性:
更容易操作sql statement 参数
可对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
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();
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();
}
}
开始事务
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 基础的更多相关文章
- Java JDBC基础学习小结
JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作.JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver.Connection.Statement.Re ...
- Java JDBC 基础知识
一.JDBC常用接口.类介绍 JDBC提供对独立于数据库统一的API,用以执行SQL命令.API常用的类.接口如下: DriverManager 管理JDBC驱动的服务类,主要通过它获取Connect ...
- Java JDBC高级特性
1.JDBC批处理 实际开发中需要向数据库发送多条SQL语句,这时,如果逐条执行SQL语句,效率会很低,因此可以使用JDBC提供的批处理机制.Statement和PreparedStatemen都实现 ...
- Java JDBC的基础知识(五)
本文主要记录JDBC基础知识之后的部分内容.另外,我看到<Java核心基础2>中第四章是主要介绍数据库编程的.里面有一些说明和应用特别灵活,有些部分也太容易理解,建议大家看一下.这篇是依然 ...
- Java JDBC的基础知识(三)
在前面的Java JDBC的基础知识(二)和(三)中,主要介绍JDBC的原理和简单的应用过程.尤其在(二)中,可以发现代码进行多次try/catch,还有在前面创建连接等过程中好多参数我都给写定了. ...
- Java JDBC的基础知识(二)
在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...
- Java 中 JDBC 基础配置
Java 中 JDBC 基础配置 <resource auth="Container" driverclassname="oracle.jdbc.driver.Or ...
- Java应用程序连接数据库--JDBC基础
Java应用程序连接数据库--JDBC基础 Java应用程序连接数据库–JDBC基础 <!-- MySQL驱动,连接数据库用,由数据库厂商提供 --> <dependency&g ...
- Java JDBC的基础知识(四)
之前学习了如何创建一个数据库工具类,如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.Res ...
随机推荐
- js 条件方法、数组方法
经常写代码写的很多很累赘,看看下面例子,争取以后代码简洁简化.个人也觉得简洁分明的代码很重要. 本文来自另一篇博客:https://www.cnblogs.com/ljx20180807/p/1084 ...
- 部署 12306 github 项目
郑重声明, 本文仅用作学习研究使用,请勿用作商业用途,遵守法律!!! 部署环境有些坑,踩一次就够了... 原项目地址 git clone 原项目以及 识别验证码的模型 如果遇到 无法解析的问题 ,则 ...
- Hyperledger Fabric(4)链码ChainCode
智能合约,是一个抽象的概念,智能合约的历史可以追溯到 1990s 年代.它是由尼克萨博(Nick Szabo)提出的理念,几乎与互联网同龄. 我们这里所说的智能合约只狭义的指区块链中.它能够部署和运行 ...
- python3.7 利用pyhive 连接上hive(亲测可用)
来python爬虫中,经常会遇到数据的存储问题,如果有大量数据,hive存储是个不错的选择. 那么python如何来连接hive呢?网上有各种教程但是都不是很好用,亲自测试pyhive可用 要求:可用 ...
- xml_dom解析之二
dom解析(二) 通过代码创建一个xml文件 package xml4; import java.io.File; import javax.xml.parsers.DocumentBuilder; ...
- 4.flask第三方组件
1.flask-session的使用 在flask中,有一个app.session_interface = SecureCookieSessionInterface(),也就是存session,调用o ...
- 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 ...
- 运维都该会的Socket知识!
本篇博客转自赵班长 所有运维都会的Socket知识!!! 原创: 赵班长 新运维社区 什么是Socket? 大家都用电脑上网,当我们访问运维社区https://www.unixhot.com的时候,我 ...
- Mac下安装配置NMP环境
第一次在Mac上安装NMP,记录下 因为下面环境的安装都是基于homebrew的,所以如果没有安装他的话,要先安装他(官网:https://brew.sh/index_zh-cn.html) 安装ho ...
- [uboot] (番外篇)uboot relocation介绍(转)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ooonebook/article/det ...