JDBC是什么?JDBC有什么用?JDBC怎么用?
JDBC是什么?
JDBC的是Java Database Connectivity的缩写,直译过来就是Java数据库连接,连接数据库干嘛呢?当然是对数据库进行操作啦,所以,JDBC从字面上理解的意思就是,用Java语言对数据库进行CRUD。那么为什么会有这么一个玩意儿诞生呢?相信用过关系型数据库的老哥们都知道,虽然关系型数据库的语法都差不多,但是还是有细微的区别,存在方言。Java最厉害的地方在哪儿?不就是跨平台嘛,我在Windows下代码是这样,在Linux下代码也是这样,所以方言是Java不能容忍的。那么怎么办呢?实现统一呗。为此JDBC就横空出世了。
那么JDBC的本质又是什么呢?在此先上一张图
哈哈,原来JDBC就是一组接口啊,那么谁去实现接口呢?当然是这些数据库厂商大佬啊,例如Oracle(Oracle,Mysql),Mircosoft(SqlServer),IBM(DB2),所以在以后操作的时候看到接口new对象的时候不要惊慌,大佬们已经把实现写好了,这样操作是没毛病的。
在此,我重新给JDBC下个定义,它是由Sun提供的一组用于操作数据库的接口,由各大厂商去写实现
JDBC有什么用?怎么用?
其实上文已经说了有什么用,用Java操作数据库嘛,那么该怎么用呢?Talk is cheap,show me the code
啥都别说,先上代码
package com.it.leon;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Practice {
@Test
public void test01() {
Connection con = null;
PreparedStatement pstmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://localhost/db1",
"root",
"root");
String sql = "update test set name=? where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,"游坦之");
pstmt.setInt(2,1);
pstmt.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
在执行前,这是表中的记录
在执行后,表中的记录
执行成功!
关键步骤:
1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
2.申请Connection资源
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/db1", //你要申请哪个IP端口号下的哪个数据库
"root", //用户名
"root"); //密码
3.获取statement对数据库进行操作
String sql = "update test set name=? where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,"游坦之");
pstmt.setInt(2,1);
int i = pstmt.executeUpdate();
对数据库进行实际操作的是谁?是statement。那为什么不用statement而用prepareStatement呢?因为涉及到sql的注入问题(sql的占位符),所以用更安全的prepareStatement,executeUpdate()的返回值int是什么呢?就是该操作影响的行数,可以用来判断操作成功与否
4.获取数据库返回的资源
ResultSet rs = pstmt.executeQuery();
resultSet是数据库反馈给我们的数据,也就是我们想查询的结果。
增删改用executeUpdate,查询用executeUpdate
5.释放资源
finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
释放资源的操作一定要写在finally里,因为不管操作成功与否,都必须
以上就是JDBC的基本过程,只要搞清楚Connection,Statement,ResultSet这几个对象即可,当然,不要忘了首先要注册驱动,因为不注册,JDBC就只是个没写实现的接口而已
PS:JDBC和socket好像啊!!!