JDBC搭建

文章介绍了JDBC的作用,即为多种数据库提供统一访问接口,简化了Java程序员与数据库的交互。内容涵盖JDBC的基本搭建步骤,包括加载驱动和建立连接,强调了PreparedStatement相对于Statement的优势,如防止SQL注入和简化SQL语句构建。还详细讲解了结果集处理,通过ResultSet对象获取查询结果。
摘要由CSDN通过智能技术生成


为什么要学习JDBC,JDBC中文翻译Java数据库连接,市面上有很多数据库;如果不指定某种规则,那么,肯定存在问题,(例如:如果人类交流的语言不加以控制,那么肯定会出现交流困难的问题,就像普通话是国内的交流规范,而国际上则是英语),这个问题到连接数据库上就是,Java程序员要根据不同的数据库实现的类连接不同的数据库;这种情况下,JDBC出世了,在JDBC了定义了许多的接口,而具体的实现由各大数据库厂家实现相应的接口。而Java程序员则无需关心数据库如何实现,只需学会使用JDBC中的方法即可

1. 概述

JDBC(Java DataBase Connection java数据库连接)
是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它是用一组用Java语言编写的类和接口实现
有了JDBC,Java开发人员只需要编写一次程序,就可以访问不同的数据库
Java定义者制定了JDBC规范,数据库开发商实现接口,程序员学习使用标准规范

2. JDBC搭建

  1. 在IDEA中创建一个项目,再右击项目New Directory 创建一个名为lib的目录,将我们的Mysql实现的的jar包放进目录中。
  2. 加载驱动new Driver();
  3. 建立于数据库的链接DriverManager.getConnection(URL,用户名,密码)
    注意:我这里是Mysql8 URL:jdbc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai,用户名:root,密码要看自己的设置了
  4. 向数据库发送sql
  5. 处理查询结果集,不处理的话此步省略
  6. 关闭与数据库的连接

以下代码不是最终成品:原因如下:
1.如果遇到大量数据的插入,就会频繁的进行字符串的拼接,极易出现错误而且极其痛苦2.可能会出现SQL注入,不具备安全性

package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/*
    1. jdbc搭建第一步,导入jar包,一般倒在项目的直接子目录下,取名lib,右击
    jar包右击选择add as library
 */
public class demo1 {
    public static void main(String[] args) throws SQLException {
        // 2. 加载驱动
        new Driver();
        // 3. 建立与数据库的连接
        String url = "jdbc:mysql://localhost:3306/schooldb?serverTimezone=Asia/Shanghai";
        Connection connection = DriverManager.getConnection(url,"root","123456");
        // 4. 向数据库发送sql
        Statement statement = connection.createStatement();
        String id = "4";
        String name = "物理";
        int result = statement.executeUpdate("insert into course(id,name)value('"+id+"','"+name+"')");
        // 5. 关闭与数据库的连接
        statement.close();
        connection.close();
    }
}

3. PrepareStatement

上面JDBC搭建中的注意在PrepareStatement便可以避免了,因为在PrepareStatement可以把要执行的SQL先用占位符占用下来,后面使用setObject()再为每个位置进行赋值即可,即不易混乱,又解决了SQL注入的问题,一箭双雕。
Statement和PrepareStatement的区别

区别1:Statement是将变量拼接到sql中,书写不易,而PrepareStatement则用占位符的避免了繁杂的字符串拼接
区别2:SQL注入导致Statement导致某些sql语句的执行违背了代码书写者的意愿,而PrepareStatement中的setObject()方法则会对sql值进行判断,如果出现异常的数据,便会报错

以下是成品的链接数据库代码,没有处理查询结果集的步骤:

package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

/*
    1. jdbc搭建第一步,导入jar包,一般倒在项目的直接子目录下,取名lib,右击
    jar包右击选择add as library
 */
public class demo1 {
    public static void main(String[] args) throws SQLException {
        // 2. 加载驱动
        new Driver();
/*
        加载Driver类
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
*/
        // 3. 建立与数据库的连接
        String url = "jdbc:mysql://localhost:3306/schooldb?serverTimezone=Asia/Shanghai";
        Connection connection = DriverManager.getConnection(url,"root","123456");
        // 4. 向数据库发送sql
        PreparedStatement ps = connection.prepareStatement("insert into course(id,name)value(?,?)");
        String id = "4";
        String name = "物理";
        //下面只是将sql预编译到了PreparedStatement对象中,并没有执行
        ps.setObject(1,id);
        ps.setObject(2,name);
        ps.executeUpdate();//执行sql语句
        // 5. 关闭与数据库的连接
        ps.close();
        connection.close();
    }
}

4. 结果集处理

PreparedStatement和Statement中的executeQuery()方法中会返回一个ResultSet对象,查询结果就封装在此对象中.
使用ResultSet中的next()方法获得下一行数据
使用getXXX(String name)方法获得

例如:

package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

/*
    1. jdbc搭建第一步,导入jar包,一般倒在项目的直接子目录下,取名lib,右击
    jar包右击选择add as library
 */
public class demo1 {
    public static void main(String[] args) throws SQLException {
        // 2. 加载驱动
        new Driver();
/*
        加载Driver类
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
*/
        // 3. 建立与数据库的连接
        String url = "jdbc:mysql://localhost:3306/schooldb?serverTimezone=Asia/Shanghai";
        Connection connection = DriverManager.getConnection(url,"root","123456");
        // 4. 向数据库发送sql
        PreparedStatement ps = connection.prepareStatement("select num,name from student where gender = ?");
        String gender = "男";
        //下面只是将sql预编译到了PreparedStatement对象中,并没有执行
        ps.setObject(1,gender);
        ResultSet rs = ps.executeQuery();//执行查询操作,将查询结果集封装到了ResultSet中
        //rs.next()判断是否还有数据
        while (rs.next()){
            //通过名字获取数据,通过序号的话,可能动代码之后便后出现类型问题
            System.out.println(rs.getInt("num"));
            System.out.println(rs.getString("name"));
        }
        // 5. 关闭与数据库的连接
        ps.close();
        connection.close();
    }
}

惭愧呀,因为学习JavaEE接受前端的请求之后,要处理用户的请求,连接数据库并对请求进行验证,突然发现链接数据库忘得一干二净,所以过来整理一下JDBC的笔记

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值