JavaWeb(5):JDBC

JDBC(Java DataBase Connectivity)

1.什么是JDBC
JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。
在这里插入图片描述
2.JDBC的原理
早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动!
在这里插入图片描述
JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。

3.JDBC 的好处:

  1. 程序员如果要开发访问数据库的程序,只需要会调用 JDBC 接口中的方法即可,不用关注类是如何实现的。
  2. 使用同一套 Java代码,进行少量的修改就可以访问其他 JDBC 支持的数据库

4.DBUtil

package util;

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

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class DBUtil {
    private static final DataSource dataSource;

    static {
        MysqlDataSource mysqlDataSource = new MysqlDataSource();
        mysqlDataSource.setServerName("127.0.0.1");
        mysqlDataSource.setPort(3306);
        mysqlDataSource.setUser("root");
        mysqlDataSource.setPassword("123456");
        mysqlDataSource.setDatabaseName("servlet_demo_java21");
        mysqlDataSource.setUseSSL(false);
        mysqlDataSource.setCharacterEncoding("utf8");
        mysqlDataSource.setServerTimezone("Asia/Shanghai");

        dataSource = mysqlDataSource;
    }

    public static Connection connection() throws SQLException {
        return dataSource.getConnection();
    }
}

5.JDBC——get

private List<Information> getInfoList() throws ServletException {
        List<Information> informationList = new ArrayList<>();
        try (Connection c = DBUtil.connection()) {
            String sql = "SELECT name, gender, hobby, xueli, suggestion FROM informations ORDER BY id";
            try (PreparedStatement s = c.prepareStatement(sql)) {
                try (ResultSet rs = s.executeQuery()) {
                    while (rs.next()) {
                        Information info = new Information();
                        info.name = rs.getString("name");
                        info.gender = rs.getInt("gender") == 0 ? "女" : "男";
                        String[] hobbies = rs.getString("hobby").split(":");
                        info.hobbyList.addAll(Arrays.asList(hobbies));
                        info.xueli = rs.getString("xueli");
                        info.suggestion = rs.getString("suggestion");

                        informationList.add(info);
                    }
                }
            }
        } catch (SQLException exc) {
            throw new ServletException(exc);
        }
        return informationList;
}

6.JDBC——save

public void save(String name, String gender, String hobby, String xueli, String suggestion) throws SQLException {
        String sql = "INSERT INTO informations(name, gender, hobby, xueli, suggestion) VALUES (?, ?, ?, ?, ?)";
        try (Connection c = DBUtil.connection()){
            try (PreparedStatement s = c.prepareStatement(sql)){
                s.setString(1, name);
                s.setString(2, gender);
                s.setString(3, hobby);
                s.setString(4, xueli);
                s.setString(5, suggestion);
                s.executeUpdate();
            }
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值