JDBC的介绍
JDBC详解
1、JDBC是什么?
JDBC(JAVA DataBase Connection)即JAVA数据库连接技术,JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。
JDBC库中所包含的API通常与数据库使用于:
- 连接到数据库
- 创建SQL语句
- 在数据库中执行SQL查询
- 查看和修改数据库中的数据记录
2、数据库驱动与常用接口
JDBC API使用数据库驱动连接操作数据库,其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。
我使用的是MySql数据库,所以使用MySql提供的数据库驱动包mysql-connector-java-5.1.40-bin.jar。
驱动包一般会提供很多操作数据库的接口,常用的有:
- Driver接口:在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法,MySql驱动装载方法为:Class.forName(“com.mysql.jdbc.Driver”);
- Connection接口:Connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果。DriverManager.getConnection(url, user, password)方法可以获取相应的数据库连接。MySql数据库连接获取方法为:Connection conn = DriverManager.getConnection(“jdbc:mysql://host:port/database”, “user”, “password”)。该接口包含了几个常用的方法:
1、createStatement():创建向数据库发送sql语句的statement对象;
2、preparedStatement(sql) :创建向数据库发送预编译sql的PreparedSatement对象;
3、setAutoCommit(boolean):设置数据库事务是否自动提交;
4、commit():提交事务;
5、rollback():事务回滚。 - Statement接口:用于执行静态SQL语句并返回它所生成结果的对象。一般有三种Statement对象:
1、Statement:由createStatement创建,用于发送简单的SQL语句(不带参数);
2、PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement;
3、CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。
以下是几个常用的Statement方法:
1、execute(String sql):运行语句,返回是否有结果集;
2、executeQuery(String sql):运行select语句,返回ResultSet结果集;
3、executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数;
4、addBatch(String sql) :把多条sql语句放到一个批处理中;
5、executeBatch():向数据库发送一批sql语句执行。 - ResultSet接口:ResultSet提供检索不同类型字段的方法,常用的有:
1、getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象;
2、getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象;
3、getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据;
4、getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据;
5、getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。
相比于以上方法,ResultSet接口提供了更常用的对于结果集的处理方法:
1、next():移动到下一行;
2、previous():移动到前一行;
3、absolute(int row):移动到指定行;
4、beforeFirst():移动resultSet的最前面;
5、afterLast() :移动到resultSet的最后面。
3、JDBC使用步骤
JDBC标准流程为:加载JDBC驱动程序→建立数据库连接Connection→创建执行SQL的语句Statement→处理执行结果ResultSet→释放资源,其中释放资源顺序为:ResultSet→Statement→Connection。
以下是我的一个JDBC小程序,作为一个基本例子:
首先创建要是用的数据库表:
create database db_test;
use db_test;
create table person(
id int primary key,
name varchar(20),
job varchar(20)
);
insert into person values(1001,'zhangsan','teacher');
创建对应的java项目并将MySql添加到classpath,我这里因为使用了spring-boot,所以很方便不用去手动添加了。创建Person类与对应的测试类,可以写个main方法方便测试:
public class Person {
private Integer id;
private String name;
private String teacher;
public void setName(String name) {
this.name = name;
}
public void setId(Integer id) {
this.id = id;
}
public void setTeacher(String teacher) {
this.teacher = teacher;
}
public String getName() {
return name;
}
public Integer getId() {
return id;
}
public String getTeacher() {
return teacher;
}
}
import java.sql.*;
public class PersonTest {
public static void main(String[] arrgs){
Person p1 = new Person();
p1.setId(1002);
p1.setName("lisi");
p1.setJob("student");
Person p2 = new Person();
p2.setId(1001);
p2.setName("wangwu");
p2.setJob("teacher");
getAll();
update(p2);
getAll();
insert(p1);
getAll();
}
/**
* 获取数据库连接方法
* @return
*/
private static Connection getConn(){
String driver = "com.mysql.jdbc.Driver";
//后面的一串表示关闭ssl协议
String url = "jdbc:mysql://192.168.1.110:3306/db_test?useUnicode=true&characterEncoding=utf-8&useSSL=false";
String username = "root";
String password = "123456";
Connection connection = null;
try {
//加载驱动
Class.forName(driver);
//获取数据库连接
connection = (Connection) DriverManager.getConnection(url, username, password);
}catch (SQLException e){
e.printStackTrace();
}catch (ClassNotFoundException e){
e.printStackTrace();
}
return connection;
}
/**
* 插入方法
* @param person
* @return
*/
private static int insert(Person person){
Connection connection = getConn();
int i = 0;
String sql = "insert into person (id,name,job) values(?,?,?);";
PreparedStatement pstmt;
try {
//从连接获取PreparedStatement对象
pstmt = (PreparedStatement) connection.prepareStatement(sql);
//组装sql
pstmt.setInt(1, person.getId());
pstmt.setString(2, person.getName());
pstmt.setString(3, person.getJob());
//执行sql
i = pstmt.executeUpdate();
//关闭连接
pstmt.close();
connection.close();
}catch (SQLException e){
e.printStackTrace();
}
return i;
}
/**
* 更新方法
* @param person
* @return
*/
private static int update(Person person) {
Connection conn = getConn();
int i = 0;
String sql = "update person set name='" + person.getName() + "' where id='" + person.getId() + "'";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
i = pstmt.executeUpdate();
System.out.println("resutl: " + i);
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
private static Integer getAll() {
Connection conn = getConn();
String sql = "select * from person";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement)conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
int col = rs.getMetaData().getColumnCount();
System.out.println("============================");
while (rs.next()) {
for (int i = 1; i <= col; i++) {
System.out.print(rs.getString(i) + "\t");
if ((i == 2) && (rs.getString(i).length() < 8)) {
System.out.print("\t");
}
}
System.out.println("");
}
System.out.println("============================");
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
private static int delete(Integer id) {
Connection conn = getConn();
int i = 0;
String sql = "delete from person where id='" + id + "'";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
i = pstmt.executeUpdate();
System.out.println("resutl: " + i);
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
}
最后结果如下图:
JDBC的介绍的更多相关文章
- JDBC相关概念介绍
一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...
- JDBC的介绍2
一.基础知识 1. 数据持久化 持久化(persistence):对象在内存中创建后,不能永久存在.把对象永久的保存起来就是持久化的过程.而持久化的实现过程大多通过各种关系数据库来完成. 持久化的主要 ...
- JDBC基本操作介绍
一 .JDBC主要的API介绍 JDBC为开发人员提供了一套标准的API,都是由JAVA语言编写的类和接口.用于连接数据库和执行SQL语句.JDBC也是JAVA核心类库的一部分,位于Java.sql包 ...
- 40、JDBC相关概念介绍
1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理,我们安装好数据 ...
- JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】
1.什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 2.为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要 ...
- Tomcat7 新的数据库连接池Tomcat jdbc pool介绍和配置
Tomcat 在 7.0 以前的版本都是使用commons-dbcp做为连接池的实现,但是 dbcp存在一些问题: (1)dbcp 是单线程的,为了保证线程安全会锁整个连接池 (2)dbcp 性能不佳 ...
- weblogic jdbc 相关概念介绍
weblogic jdbc 是什么? 如何配置? 常见问题? 如何监控?
- day17(JDBC入门&jdbcUtils工具介绍)
day17 JDBC整体思维导图 JDBC入门 导jar包:驱动! 加载驱动类:Class.forName("类名"); 给出url.username.password,其中url ...
- JavaWeb学习总结-09 JDBC 学习和使用
一 JDBC相关概念介绍 1.1 数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...
随机推荐
- 转发:消息发布时间展示为刚刚、几分钟前、几小时前等等(php篇)
一.思路解析区: 1.获取当前的时间: 2.获取发布的时间: 3.计算两个的时间差: 4.判断这个时间差的范围给出对应的结果: 二.代码展示区: function tranTime($time) { ...
- iOS获取本地沙盒视频封面图片(含swift实现)
最近做了个小应用,有涉及到本地视频播放及列表显示. 其中一个知识点就是获取本地存储视频,用来界面中的封面显示. 记录如下: //videoURL:本地视频路径 time:用来控制视频播放的时间点图片截 ...
- HDUOJ-------1753大明A+B(大数之小数加法)
大明A+B Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- 【LeetCode】127. Word Ladder
Word Ladder Given two words (start and end), and a dictionary, find the length of shortest transform ...
- 连表查询都用Left Join吧 以Windows服务方式运行.NET Core程序 HTTP和HTTPS的区别 ASP.NET SignalR介绍 asp.net—WebApi跨域 asp.net—自定义轻量级ORM C#之23中设计模式
连表查询都用Left Join吧 最近看同事的代码,SQL连表查询的时候很多时候用的是Inner Join,而我觉得对我们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在 ...
- Accounting_会计基础
会计基础 1.会计:是以货币为主要计量单位,反映和监督一个单位经济活动的一种经济管理工作. 2.会计核算职能:指以货币为主要计量单位,通过确认.记录.计算.报告等环节,对特定主体的经济活动进行记账.算 ...
- Android判断当前网络是否可用--示例代码
Android判断当前网络是否可用--示例代码 分类: *07 Android 2011-05-24 13:46 7814人阅读 评论(4) 收藏 举报 网络androiddialogmanagern ...
- Python tan() 函数
描述 tan() 返回x弧度的正弦值. 语法 以下是 tan() 方法的语法: import math math.tan(x) 注意:tan()是不能直接访问的,需要导入 math 模块,然后通过 m ...
- 【iOS开发-56】案例BUG:button的enabled、控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet
接上述案例找BUG:[iOS开发-51]案例学习:动画新写法.删除子视图.视图顺序.延迟方法.button多功能使用方法及icon图标和启动页设置 (1)BUG:答案满了就不能再点击optionbut ...
- django1.8读书笔记模型高级进阶
一.访问外键和多对多值 例如:模型类定义如下 from django.db import models class Publisher(models.Model): name = models.Cha ...