核心提示:导读:{ 【1】什么是JDBC (JAVA DataBase Connectivity : java 数据库连接)?【2】如何连接数据库?【2.1】需要对应数据库的驱动jar 包 (Mysql 对应:...
导读:{ 【1】什么是JDBC (JAVA DataBase Connectivity : java 数据库连接)?
【2】如何连接数据库?
【2.1】需要对应数据库的驱动jar 包 (Mysql 对应: Mysql-connector-java-5.17.jar,不同的数据库对应不用的jar 包)放入到 web root/WEB-INF/lib/ 目录下面 【2.2】基本流程 【3】JDBC 的基本操作 (1)注册加载数据库驱动有下面三种方式 (2)对数据库的 增 删 改 查
(2.0) Statement 和 PreparedStatement 的区别:
(2.1)实现对数据库的查询操作。
(2.2)实现对数据库的增加数据
(2.3)实现对数据库的 删除数据操作。
(2.4)实现对数据库的 修改操作。 }
可以看出我们 需要有一个 对应数据库的驱动jar 文件,实现Driver 接口注册,再通过DiverManger 类来获取数据库的连接。

注意:记得先把电脑中的mysql 数据库的服务开启 ,否则不可能连接上 数据库的。
(2)输入 net start mysql ,这样就能开启mysql 服务了。 (我的这个是开启过了,有时候你清内存的时候,会把mysql 的服务关掉,再开一下就好了。)
(2)通过Mysql 的驱动管理者(DriverManager),返回数据库的连接(Connection)。
再获取数据库的连接时,需要设置 mysql 的路径,数据库用户名,数据库密码
{ static String url = "jdbc:mysql://localhost:3306/test"; static String user = "root"; static String password = "111"; } (3)通过数据库连接对象(Connection) 获取用于执行sql 语句的类 Statement 对象(或者 PerpardStatemnt)
注意:执行查询的sql 语句的时候会返回一个结果集 (ResultSet) (4)当执行完数据操作后,就需要关闭连接数据的资源(蓝色区域的部分)
原因:如果不关闭,会占用数据库的连接,可能导致后面的程序连接不上数据库。
所以这一部分的代码 最好写在 try ....finally{ }
(1.1) Class.forName("com.mysql.jdbc.Driver").newInstance(); (1.2)
Class.forName("com.mysql.jdbc.Driver"); // 我们查看源码会发现,执行forName 会调用newInstance() ,所以跟上面的方法一样。
例子: 使用Statement StatementcreateStatement=conn.createStatement(); intexecuteUpdate2=createStatement.executeUpdate("insertintouser(name,password)values('1','2')");
使用 preparedStatement //创建预编译语句对象 pstmt=conn.prepareStatement("insertintouser(name,password)values(?,?)"); //给4个占位符赋值 pstmt.setString(1,"ww"); pstmt.setString(2,"789"); //执行SQL语句(增加记录) intn=pstmt.executeUpdate();
所以推荐使用preparedStatement流行的框架中都倾向使用它。 下面的例子基本都是使用preparedStatement 来操作。
【2】如何连接数据库?
【2.1】需要对应数据库的驱动jar 包 (Mysql 对应: Mysql-connector-java-5.17.jar,不同的数据库对应不用的jar 包)放入到 web root/WEB-INF/lib/ 目录下面 【2.2】基本流程 【3】JDBC 的基本操作 (1)注册加载数据库驱动有下面三种方式 (2)对数据库的 增 删 改 查
(2.0) Statement 和 PreparedStatement 的区别:
(2.1)实现对数据库的查询操作。
(2.2)实现对数据库的增加数据
(2.3)实现对数据库的 删除数据操作。
(2.4)实现对数据库的 修改操作。 }
【1】什么是JDBC (JAVA DataBase Connectivity : java 数据库连接)?
是一套用于执行SQL语句的Java API。 应用程序可通过这套API连接到关系数据库, 并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。【2】如何连接数据库?

可以看出我们 需要有一个 对应数据库的驱动jar 文件,实现Driver 接口注册,再通过DiverManger 类来获取数据库的连接。
【2.1】需要对应数据库的驱动jar 包 (Mysql 对应: Mysql-connector-java-5.17.jar,不同的数据库对应不用的jar 包)放入到 web root/WEB-INF/lib/ 目录下面

注意:记得先把电脑中的mysql 数据库的服务开启 ,否则不可能连接上 数据库的。
小知识点:开启数据库服务的方法
(1)点击windos 键,在弹出的搜索框中,输入cmd,右键“管理员身份运行”打开
(2)输入 net start mysql ,这样就能开启mysql 服务了。 (我的这个是开启过了,有时候你清内存的时候,会把mysql 的服务关掉,再开一下就好了。)

【2.2】基本流程
JDBCUtils.java 主要实现的功能就是,返回出数据库的连接,释放数据库连接的资源 (1)注册Mysql 的驱动程序,通过反射拿到com.mysql.jdbc.Driver 这个类(2)通过Mysql 的驱动管理者(DriverManager),返回数据库的连接(Connection)。
再获取数据库的连接时,需要设置 mysql 的路径,数据库用户名,数据库密码
{ static String url = "jdbc:mysql://localhost:3306/test"; static String user = "root"; static String password = "111"; } (3)通过数据库连接对象(Connection) 获取用于执行sql 语句的类 Statement 对象(或者 PerpardStatemnt)
注意:执行查询的sql 语句的时候会返回一个结果集 (ResultSet) (4)当执行完数据操作后,就需要关闭连接数据的资源(蓝色区域的部分)
原因:如果不关闭,会占用数据库的连接,可能导致后面的程序连接不上数据库。
所以这一部分的代码 最好写在 try ....finally{ }
- package demo;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class JDBCdemo01 {
- static String url = "jdbc:mysql://localhost:3306/test";
- static String user = "root";
- static String password = "111";
- private static Connection connection; // 数据库连接
- private static ResultSet executeQuery;
- private static Statement statement;
- public static void main(String[] args) {
- try {
- // [1] 加载数据库驱动程序
- Class.forName("com.mysql.jdbc.Driver");
- // [2] 连接Mysql数据库,拿到数据库连接
- connection = DriverManager.getConnection(url, user, password);
- // [3] 获取到可以执行sql语句的对象 statement
- statement = connection.createStatement();
- // [4] 执行sql语句 查询
- executeQuery = statement.executeQuery("select * from user");
- //推荐直接使用预编译的statement 对象,执行sql语句
- // connection.prepareStatement(sql)
- // 拿到我们需要的数据
- while (executeQuery.next()) {
- int id = executeQuery.getInt("id");
- String name = executeQuery.getString("name");
- String password = executeQuery.getString("password");
- String email = executeQuery.getString("email");
- String birthday = executeQuery.getString("birthday");
- System.out.println(id+""+name+""+password+""+email+""+birthday);
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- if (executeQuery!=null) {
- try {
- executeQuery.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- executeQuery=null;
- }
- if (statement!=null) {
- try {
- statement.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- statement=null;
- }
- if (connection!=null) {
- try {
- connection.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- connection=null;
- }
- }
- }
- }
【3】JDBC 的基本操作
(1)注册加载数据库驱动有下面三种方式
显示注册 DriverManager.registerDriver(newcom.mysql.jdbc.Driver()); 还可以使用这两种方式(1.1) Class.forName("com.mysql.jdbc.Driver").newInstance(); (1.2)
Class.forName("com.mysql.jdbc.Driver"); // 我们查看源码会发现,执行forName 会调用newInstance() ,所以跟上面的方法一样。
(2)对数据库的 增 删 改 查
当我们使用Statement (或者 PreparedStatement)对数据库的增删改查 ,其中 增加,删除,修改 都是执行executeUpdate()方法 操作,查询是 executeQuary() 方法的操作,并且查询操作会返回一个结果集(ResultSet)。(2.0) Statement 和 PreparedStatement 的区别:
我们可以利用 Statement 来实现对数据库的增删改查,我们只需要组织出正确的sql 语句,就可以实现。但是我们所写的sql 语句不可以使用参数代替。也就是(?)代替。 PreparedStatement 继承于 Statement 重写了Statement 的所有方法。 PreparedStatement 允许使用不完整的 sql 语句,空缺的值使用(?)代替,直到执行的时候,再输入进去就可以了。例子: 使用Statement StatementcreateStatement=conn.createStatement(); intexecuteUpdate2=createStatement.executeUpdate("insertintouser(name,password)values('1','2')");
使用 preparedStatement //创建预编译语句对象 pstmt=conn.prepareStatement("insertintouser(name,password)values(?,?)"); //给4个占位符赋值 pstmt.setString(1,"ww"); pstmt.setString(2,"789"); //执行SQL语句(增加记录) intn=pstmt.executeUpdate();
所以推荐使用preparedStatement流行的框架中都倾向使用它。 下面的例子基本都是使用preparedStatement 来操作。
(2.1)实现对数据库的查询操作。
- package demo;
- import java.sql.Connection;
- import java.sql.Date;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class Ex01 {
- /**
- * 演示:JDBC访问数据库的操作步骤 查询
- */
- public static void main(String[] args) {
- Connection conn = null;
- Statement stmt = null;
- ResultSet rs = null;
- try {
- //1、加载驱动程序
- Class.forName("com.mysql.jdbc.Driver").newInstance();
- // 2、通过DriverManager建立数据库连接 Driver 驱动
- String url = "jdbc:mysql://127.0.0.1:3306/test";
- String user = "root";
- String password = "111";
- conn = DriverManager.getConnection(url, user, password);
- // 3.通过Connection获取语句对象Statement (声明)
- stmt = conn.createStatement();
- // 4.使用语句对象执行SQL语句
- rs = stmt.executeQuery("select * from user");
- // 5.遍历结果集
- while (rs.next()) {
- // 取出当前行各个字段的值
- int id = rs.getInt("id");
- String name = rs.getString("name");
- String pwd = rs.getString("password");
- System.out.println(id + " " + name + " " + pwd);
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {// 一定会执行的代码块,无论是否发生异常
- // 6.释放相关资源
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- rs = null;
- }
- if (stmt != null) {
- try {
- stmt.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- stmt = null;
- }
- if (conn != null) {
- try {
- conn.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- conn = null;
- }
- }
- }
- }
(2.2)实现对数据库的增加数据
- package demo;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.Date;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class Ex02 {
- /**
- * 演示:预编译语句对象PreparedStatemet的使用
- */
- public static void main(String[] args) {
- Connection conn = null;
- PreparedStatement pstmt = null;
- try {
- Class.forName("com.mysql.jdbc.Driver");
- String url = "jdbc:mysql://127.0.0.1:3306/test";
- String user = "root";
- String password = "111";
- conn = DriverManager.getConnection(url, user, password);
- pstmt = conn
- .prepareStatement("insert into user(name,password,email,birthday) values(?,?,?,?)");
- // 给4个占位符赋值
- pstmt.setString(1, "ww");
- pstmt.setString(2, "789");
- pstmt.setString(3, "ww@qq.com");
- pstmt.setDate(4, Date.valueOf("2016-01-01"));
- // 执行SQL语句(增加记录)
- int n = pstmt.executeUpdate();
- if (n > 0) {
- System.out.println("增加记录成功");
- }
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {
- if (pstmt != null) {
- try {
- pstmt.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- pstmt = null;
- }
- if (conn != null) {
- try {
- conn.close();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
- }
(2.3)实现对数据库的 删除数据操作。
//根据Id删除记录- pstmt = conn.prepareStatement("delete from user where id=?");
- pstmt.setInt(1, id);
- int n = pstmt.executeUpdate();
- if(n>0){
- return true; // 操作成功
- }else{
- return false; // 操作石板
- }
(2.4)实现对数据库的 修改操作。
根据id 修改数据- pstmt = conn.prepareStatement("update user set name=?,password=?,email=?,birthday=? where id=?");
- pstmt.setString(1, user.getName());
- pstmt.setString(2, user.getPassword());
- pstmt.setString(3, user.getEmail());
- pstmt.setDate(4, user.getBirthday());
- pstmt.setInt(5, user.getId());
- int n = pstmt.executeUpdate();
- if(n>0){
- return true;
- }else{
- return false;
- }