JDBC,即Java数据库连接。JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序
本篇从JDBC的七个步骤入手,讲解每一步的具体实现过程
一.加载驱动
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM。此步通过java.lang.Class类的静态方法forname(String ClassName)实现。
Class.forName("com.mysql.jdbc.Driver");
注意:在执行这步时,一定要注意将数据库的Jar包导入到项目中,否则会报错。
二.提供URL
连接URL定义了连接数据库时的协议,子协议,数据源标示"jdbc:mysql://localhost:3306/jdbctest?useUnicode=true&characterEncoding=UTF-8",“root”,"123"其中useUnicode=true表示使用Unicode字符集。如果characterEncoding设置为GBK或者是UTF-8,该参数必须设置为TRUE。characterEncoding=UTF-8字符编码方式。
其中数据库的名称要根据自己的实际情况更改。
String URL = "jdbc:mysql://localhost/db_user?useUnicode=true&characterEncoding=utf-8";
一般都会自动生成。
三.创建连接
要想链接数据库,需要向java.sql.DriverManager请求并获取Connection对象,获取的对象就代表着一个数据库的链接。数据库链接时使用的是DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。
conn = DriverManager.getConnection(URL, USER, PWD);//使用mysql驱动当中的连接数据库的API
注意:USER,PWD都是要根据实际情况更改的。
四.创建Statement
要执行sql语句,必须获得statement实例,statement实例分为以下3中类型:
1、 执行静态sql语句时,通常通过Statement实例实现。
2、 执行动态sql语句时,通常通过PreparedStatement实例实现。
3、 执行数据库存储过程,通常通过CallableStatement实例实现。
具体的实现方式:
Statement stmt = con.createStatement();
PreparedStatement pstmt =con.prepareStatement(sql);
CallableStatement ctmt =con.prepareCall(“{CALL demoSp(?,?)}”);
下面已静态为例:
stmt = conn.createStatement();
五.执行SQL语句
Statement接口提供了三种执行sql语句的方法:executeQuery、executeUpdate和execute
1、ResultSetexecuteQuery(String sql):执行查询数据库的sql语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sql):用于执行insert、update或Delete语句以及sql DDL语句。
3、execute(sql):用于执行返回多个结果集、多个更新计数或二者组合的语句。
我们以查询为例:
String sql = "select * from user";
em=stmt.executeQuery(sql);
查询之前要在数据库先建好表。
六.结果处理
两种情况:
1、 执行更新返回的是本次操作影响的记录数。
2、 执行查询返回的结果是一个ResultSet对象。
ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
我简单对第二种做介绍:
while(em.next()) {
System.out.println(em.getString(1)+","+em.getString(2)+","+em.getString(3));
}
通过getString()可以方便的得到每一项。
七.关闭资源
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
1、 关闭记录集
2、 关闭声明
3、关闭连接对象
if(em!=null) {
try {
em.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
下面附上完整代码
import javax.swing.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class test {
public static void main(String[] args) {
String URL = "jdbc:mysql://localhost/db_user?useUnicode=true&characterEncoding=utf-8";
String USER = "root";
String PWD = "285311";
ResultSet em=null;
Statement stmt=null;
Connection conn=null;
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建链接
conn = DriverManager.getConnection(URL, USER, PWD);//使用mysql驱动当中的连接数据库的API
System.out.println("连接成功");
//3.写sql
String sql = "select * from user";
//4.得到statement对象
stmt = conn.createStatement();
//5.执行sql,得到结果集
em=stmt.executeQuery(sql);
//6.处理结果集
while(em.next()) {
System.out.println(em.getString(1)+","+em.getString(2)+","+em.getString(3));
}
} catch (SQLException e1) {
JOptionPane.showMessageDialog(null, "操作失败,数据库连接失败!", "信息", JOptionPane.ERROR_MESSAGE);
e1.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally {
//7.关闭资源
if(em!=null) {
try {
em.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}