Java使用JDBC原生态连接MySql数据库

本文详细介绍了JDBC的概念、优点、使用步骤和架构,包括加载驱动、建立数据库连接、创建Statement对象等。通过一个完整的MySQL数据库操作示例,展示了JDBC如何进行增删改查操作。此外,还提到了JDBC在双层和三层架构中的角色,以及如何在IDEA中加载JDBC驱动jar包。
摘要由CSDN通过智能技术生成

1. 什么是JDBC

·JDBC全称Java Database Connectivity
·DBC可以通过载入不同的数据库的“驱动程序”而与不同的数据库进行连接

2.JDBC优点

·使用的驱动不同,即可连接不同的数据库。
·使用同一套操作来操作不同的数据库
·如果每一个数据库java都制订一套连接方式,那么当不同的数据库更新的时候,java也需要更新自己· 的代码,而使用jdbc,使用同一套代码来操作,使用不同的驱动程序(驱动程序由数据库厂商提供)来连接,这使得可以连接不同的数据库。

3.使用说明

JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。

执行流程:

(1)连接数据源,如:数据库。

(2)为数据库传递查询和更新指令。

(3)处理数据库响应并返回的结果。

4.JDBC 架构

分为双层架构和三层架构。
双层
在这里插入图片描述

作用:此架构中,Java Applet 或应用直接访问数据源。

条件:要求 Driver 能与访问的数据库交互。

机制:用户命令传给数据库或其他数据源,随之结果被返回。

部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网)。

三层

在这里插入图片描述
侧架构特殊之处在于,引入中间层服务。

流程:命令和结构都会经过该层。

吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。

历史趋势: 以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,JDBC随之被重视。

5.JDBC 编程步骤

加载驱动程序:

Class.forName(driverClass)
//加载MySql驱动
Class.forName("com.mysql.cj.jdbc.Driver")
//加载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver")

获得数据库连接:

DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");

创建Statement\PreparedStatement对象:

conn.createStatement();
conn.prepareStatement(sql);

我这边使用mysql-connector-java-8.0.17.jar

链接:https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.17/mysql-connector-java-8.0.17.jar

这边使用工具为idea, 加载jar包
目录如下:
在这里插入图片描述
加载过程
(1)首先打来idea软件,然后再项目依赖下面看原有依赖的jar,然后选择

file->project Structure
在这里插入图片描述
(2)在弹出的选择框内左边选择modules,右边选择dependence
在这里插入图片描述
(3)点击下面的‘+’,然后选择JARS of directir…这个选项
在这里插入图片描述
(4)在文件框内找到自己的jar文件,选择点击ok
(5)然后再jar前面复选框内打钩,选择apply,再点击ok即可
在这里插入图片描述
(6)查看项目依赖,发现jar文件已经引入

完整实例

数据库:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `userName` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `passWord` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `realName` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '第三方', '2222322', '第三方');
INSERT INTO `user` VALUES (2, '发的', '233232', '说的是');

SET FOREIGN_KEY_CHECKS = 1;

import java.sql.*;

/**
 * jdbc 测试
 *
 * @author test
 */
public class JdbcTest {

    public static final String URL = "jdbc:mysql://192.168.xx.xx/test1";

    public static final String USER = "root";

    public static final String PASSWORD = "123456";

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 1. 加载驱动程序
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2. 获取数据库连接
        Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
        // 3. 操作数据库,实现增删改查
        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT id, userName, passWord, realName from user");
        // 如果有数据, rs.next()返回true
        while (rs.next())  {
            System.out.println("id:"+rs.getInt("id")+"姓名:"+rs.getString("userName")+"密码:"+rs.getString("passWord")+"真实姓名:"+rs.getString("realName"));
        }
    }
}

增删改查

public class DbUtil {
    public static final String URL = "jdbc:mysql://localhost:3306/imooc";
    public static final String USER = "liulx";
    public static final String PASSWORD = "123456";
    private static Connection conn = null;
    static{
        try {
            //1.加载驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            //2. 获得数据库连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){
        return conn;
    }
}

//模型
package liulx.model;

import java.util.Date;

public class Goddess {

    private Integer id;
    private String user_name;
    private Integer sex;
    private Integer age;
    private Date birthday; //注意用的是java.util.Date
    private String email;
    private String mobile;
    private String create_user;
    private String update_user;
    private Date create_date;
    private Date update_date;
    private Integer isDel;
    //getter setter方法。。。
}

//---------dao层--------------
package liulx.dao;

import liulx.db.DbUtil;
import liulx.model.Goddess;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class GoddessDao {
    //增加
    public void addGoddess(Goddess g) throws SQLException {
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql
        String sql = "INSERT INTO imooc_goddess(user_name, sex, age, birthday, email, mobile,"+
            "create_user, create_date, update_user, update_date, isdel)"
                +"values("+"?,?,?,?,?,?,?,CURRENT_DATE(),?,CURRENT_DATE(),?)";
        //预编译
        PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行

        //传参
        ptmt.setString(1, g.getUser_name());
        ptmt.setInt(2, g.getSex());
        ptmt.setInt(3, g.getAge());
        ptmt.setDate(4, new Date(g.getBirthday().getTime()));
        ptmt.setString(5, g.getEmail());
        ptmt.setString(6, g.getMobile());
        ptmt.setString(7, g.getCreate_user());
        ptmt.setString(8, g.getUpdate_user());
        ptmt.setInt(9, g.getIsDel());

        //执行
        ptmt.execute();
    }

    public void updateGoddess(){
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql, 每行加空格
        String sql = "UPDATE imooc_goddess" +
                " set user_name=?, sex=?, age=?, birthday=?, email=?, mobile=?,"+
                " update_user=?, update_date=CURRENT_DATE(), isdel=? "+
                " where id=?";
        //预编译
        PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行

        //传参
        ptmt.setString(1, g.getUser_name());
        ptmt.setInt(2, g.getSex());
        ptmt.setInt(3, g.getAge());
        ptmt.setDate(4, new Date(g.getBirthday().getTime()));
        ptmt.setString(5, g.getEmail());
        ptmt.setString(6, g.getMobile());
        ptmt.setString(7, g.getUpdate_user());
        ptmt.setInt(8, g.getIsDel());
        ptmt.setInt(9, g.getId());

        //执行
        ptmt.execute();
    }

    public void delGoddess(){
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql, 每行加空格
        String sql = "delete from imooc_goddess where id=?";
        //预编译SQL,减少sql执行
        PreparedStatement ptmt = conn.prepareStatement(sql);

        //传参
        ptmt.setInt(1, id);

        //执行
        ptmt.execute();
    }

    public List<Goddess> query() throws SQLException {
        Connection conn = DbUtil.getConnection();
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");

        List<Goddess> gs = new ArrayList<Goddess>();
        Goddess g = null;
        while(rs.next()){
            g = new Goddess();
            g.setUser_name(rs.getString("user_name"));
            g.setAge(rs.getInt("age"));

            gs.add(g);
        }
        return gs;
    }

    public Goddess get(){
        Goddess g = null;
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql, 每行加空格
        String sql = "select * from  imooc_goddess where id=?";
        //预编译SQL,减少sql执行
        PreparedStatement ptmt = conn.prepareStatement(sql);
        //传参
        ptmt.setInt(1, id);
        //执行
        ResultSet rs = ptmt.executeQuery();
        while(rs.next()){
            g = new Goddess();
            g.setId(rs.getInt("id"));
            g.setUser_name(rs.getString("user_name"));
            g.setAge(rs.getInt("age"));
            g.setSex(rs.getInt("sex"));
            g.setBirthday(rs.getDate("birthday"));
            g.setEmail(rs.getString("email"));
            g.setMobile(rs.getString("mobile"));
            g.setCreate_date(rs.getDate("create_date"));
            g.setCreate_user(rs.getString("create_user"));
            g.setUpdate_date(rs.getDate("update_date"));
            g.setUpdate_user(rs.getString("update_user"));
            g.setIsDel(rs.getInt("isdel"));
        }
        return g;
    }
}

知识小解:
关于三层架构的理解:可以和生活练习起来:

可以借鉴服务员,厨师,采购员之间的关系:

顾客直接和服务员打交道,顾客和服务员(UI层)说:我要一个炒茄子,而服务员不负责炒茄子,她就把请求往上递交,传递给厨师(BLL层),厨师需要茄子,就把请求往上递交,传递给采购员(DAL层),采购员从仓库里取来茄子传回给厨师,厨师响应cookEggplant()方法,做好炒茄子后,又传回给服务员,服务员把茄子呈现给顾客。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值