MySQL——JDBC编程

1、java的数据库编程:JDBC

1、定义:
本质:java数据库连接,是一种用于执行SQL语句的java API,是java中的数据库连接规范。
目的:使用这套规范(JDBC)实现不同数据库之间的统一访问

2、JDBC的工作原理

1、JDBC访问数据库层次结构

2、JDBC优势
(1)java语言访问数据库操作完全面向抽象接口编程;
(2)开发数据库应用不用限定在特定数据库厂商的API;
(3)程序的可移植性大大增强。

3、JDBC使用

1、步骤:

1、创建一个java程序,并添加mysql驱动包

2、使用代码来操作数据库
MySQL JDBC提供了两种操作MySQL数据库的方法:
(1)DiverManager
(2)DataSource(推荐使用,更符号OOP编码的思想和代码模式)
DataSource:
①获得数据源DataSource(相当于使用mysql客户端输入密码)
②获得一个连接Connection(输入了正确的密码,并且进入到了mysql操作界面)
③获得一个执行器(使用了某个数据库)
④组装SQL并调用执行的API(相当于在mysql客户端输入了SQL命令,并执行了回车操作)
⑤关闭资源(关闭mysql客户端)

2、JDBC代码实现流程

1、获得数据源
2、得到Connection
3、得到执行器PreparedStatement
4、执行SQL
5、关闭资源

4、JDBC常用的接口和类

1、数据库连接Connection

Connection接口实现类由数据库提供,获取Connection对象通常有两种方式;
1、通过DriverManager(驱动管理类)的静态方法获取

//1、选择mysql驱动
Class.forName("com.mysql.jdbc.Driver");
//2、得到连接
Connection connection = (Connection) DriverManager.getConnection(url:"jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true");
//3、拼接sql
 PreparedStatement statement = connection.prepareStatement(sql:"select * from city");

2、通过DataSource(数据源)对象获取。实际应用中会使用Database对象。

 MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true");
        dataSource.setUser("root");
        dataSource.setPassword("12345678");
        //2、得到链接
        Connection connection = (Connection) dataSource.getConnection();
        //3、得到执行器
        String sql = "select * from city where id < ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,5);

区别:
(1)DriverManager类获取的Connection连接,是无法重复利用的,每次使用完以后释放资源时,通过connection.close()都是关闭物理连接;
(2)DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以重复的,每次使用完数据库连接,释放资源调用connection.close()都是将Connection连接对象回收。

2、Statement对象

Statement对象主要是将SQL语句发送到数据库中,JDBC API中主要提供了三种Statement对象。
1、Statement:用于执行不带参数的简单sql语句;
2、PreparedStatement(最常用):用于执行带或不带参数的sql语句;
3、CallableStatement:用于执行数据库存储过程的调用。

3、ResultSet对象

ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套get…方法提供了这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

4、增删改查操作的使用

1、查询操作
(1)第一种:

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class SeCity {
    public static void main(String[] args) throws SQLException {
        //1、获得数据源
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true");
        dataSource.setUser("root");
        dataSource.setPassword("12345678");
        //2、得到链接
        Connection connection = (Connection) dataSource.getConnection();
        //3、得到执行器
        String sql = "select * from city where id < ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,5);
        //4、组装并执行sql
        ResultSet resultSet = statement.executeQuery();
        //若结果集的下一行有数据的话,若下一行为null,返回false;若下一行有值,返回true;
        //每次循环可以得到一行数据
        while (resultSet.next()){
            City city = new City();
            city.setId(resultSet.getInt("id"));
            city.setName(resultSet.getString("name"));
            System.out.println(city);
        }
        //5、关闭资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

(2)第二种

import com.mysql.jdbc.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * DriverManager 进行 JDBC 的查询
 */
public class SelCity2 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 1.选择 mysql 的驱动
        Class.forName("com.mysql.jdbc.Driver");

        // 2.得到连接
        Connection connection = (Connection) DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java33?user=root&password=12345678&characterEncoding=UTF-8&useSSL=true");

        // 3.拼接 SQL,得到执行器
        PreparedStatement statement = connection.prepareStatement("select * from city");

        // 4.执行 SQL,得到结果
        ResultSet resultSet = statement.executeQuery();
        while (resultSet.next()) {
            City city = new City();
            city.setId(resultSet.getInt("id"));
            city.setName(resultSet.getString("name"));
            System.out.println(city);
        }

        // 5.关闭资源
        resultSet.close();
        statement.close();
        connection.close();


    }
}

2、添加操作

import com.my`在这里插入代码片`sql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import java.sql.PreparedStatement;
import java.sql.SQLException;

public class AddCity {
    public static void main(String[] args) throws SQLException {
        // 1.获得数据源  DataSource(设置 MySQL 的服务器地址)
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true"); // 1.1 设置 MySQL 的服务器地址
        dataSource.setUser("root"); // 1.2 设置连接mysql的用户名
        dataSource.setPassword("12345678"); // 1.3 设置mysql的密码

        // 2.得到连接 Connection
        Connection connection = (Connection) dataSource.getConnection();

        // 3.得到执行器(组装SQL)
        String insertSQL = "insert into city(id,name) values(?,?)"; // 组装sql,使用占位符“?”
        PreparedStatement statement = connection.prepareStatement(insertSQL);
        // 填充占位符
        statement.setInt(1, 5);
        statement.setString(2, "宝鸡");

        // 4.执行 SQL
        int result = statement.executeUpdate(); // 返回一个受影响的行数【添加、修改、删除】
        System.out.println("受影响的行数:" + result);

        // 5.关闭资源(从小到大)
        statement.close(); // 关闭执行器
        connection.close(); // 关闭连接
    }
}

3、修改操作

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import java.sql.PreparedStatement;
import java.sql.SQLException;

public class UpCity {
    public static void main(String[] args) throws SQLException {
        // 1.得到数据源 DataSource【url、user、password】
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true");
        dataSource.setUser("root");
        dataSource.setPassword("12345678");

        // 2.得到连接 Connection
        Connection connection = (Connection) dataSource.getConnection();

        // 3.组装 SQL,得到执行器
        String updateSql = "update city set name=? where id=?";
        PreparedStatement statement = connection.prepareStatement(updateSql);
        statement.setString(1, "广东");
        statement.setInt(2, 4);

        // 4.执行 SQL,得到执行结果
        int result = statement.executeUpdate();
        System.out.println("执行结果:" + result);

        // 5.关闭资源
        statement.close();
        connection.close();
    }
}

4、删除操作

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DelCity {
    public static void main(String[] args) throws SQLException {
        // 1.得到 DataSource
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/java33?characterEncoding=utf8&useSSL=true");
        dataSource.setUser("root");
        dataSource.setPassword("12345678");

        // 2.得到连接 Connection
        Connection connection = (Connection) dataSource.getConnection();

        // 3.得到执行器,组装 SQL
        String delSQL = "delete from city where id=?";
        PreparedStatement statement = connection.prepareStatement(delSQL);
        statement.setInt(1, 5);

        // 4.执行 SQL
        int result = statement.executeUpdate();
        System.out.println("结果:" + result);

        // 5.关闭资源
        statement.close();
        connection.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值