JDBC编程安装———通过代码操控数据库

阿华代码,不是逆风,就是我疯

一:通过java来操作数据库

在前面的学习中,都是通过写sql语句直接在数据库上进行操作,但在实际开发过程中,大部分情况,我们都是通过编程语言来写SQL操作管理数据库的,也有少部分情况直接在数据库上进行操作,如:测试,调试,环境验证

主流的编程语言都可以通过代码对数据库进行操作(大部分都大同小异)

在java中有许多种方法可以操作数据库,下面介绍最基础的一种JDBC

二:JDBC概念

JDBC就是java中一种最基础的操作数据库的方式

在Java中,数据库会提供api(application programming interface)应用程序接口,我们通过JDBC来调用api才可以操作数据库

注:只要是需要A来进行编程,那么就需要A提供api

例如:我们想让chatgpt写一段代码,那么就需要chatgpt提供api

1:api(应用程序接口)

具体的体现形式为已经写好的一些类和方法

2:SDK(软件开发工具包)

如果某个东西提供的api非常的丰富,我们就叫它SDK(软件开发工具包)

注:JDK就是java的软件开发工具包

三:JDBC的发展历程简述

早期,像mysql,oracle,sqlsever,sqlite等等这些数据库因为是不同的公司不同程序员开发的不同数据库,所以它们的api并不统一,后来Java通过让各个公司数据库的api进行封装(即在原来的api基础上不变,加一层封装,适配到JDBC这一套接口上),统一了api全部适用于JDBC,消除了各种数据库api的差异

四:安装JDBC

(1)下载JDBC驱动包,这个驱动包就是上述说的给MySQL数据库的api进行封装,适配上Java的JDBC接口

注:这种驱动包并不是JDK(Java软件开发包)里就有的,而是属于“第三方库”,需要通过其他途径进行下载

Maven Repository: Search/Browse/Explore (mvnrepository.com)

这里的jar文件是一个类似于rar的压缩包,里面装的都是.class文件

注重要:下载完之后找到这个文件ctri+c复制一下(后面会用到)

(2)把jar引入项目中

1:打开idea

(重要)叫lib,然后把鼠标放到lib上,点击选中lib,Ctrl+V粘贴出来弹窗,点击ok

最后一步:右键刚才建立的文件lib,点击Add   as  Library导入即可

就OK啦,有手就行。

五:写JDBC代码

import java.sql.SQLException;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Hua YY
 * Date: 2024-09-10
 * Time: 17:44
 */
public class TestJDBCSelect {
    public static void main(String[] args) throws SQLException {

        //1:建立数据源,确定数据库的位置
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java110?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("613718long");
        //2:建立连接
        Connection connection = dataSource.getConnection();
        //3:写sql语句并进行预处理,sql转换为可发送的语句对象
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);
        //4:执行SQL语句
        ResultSet resultSet = statement.executeQuery(sql);//结果集合
        while(resultSet.next()){//迭代,光标往后走
            //获取id这一列的数值,期望得到一个int返回值
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.print("id:" + id + " ");
            System.out.println("name:" + name + " ");
        }
        //释放资源
        resultSet.close();
        statement.close();
        connection.close();

    }
}

1:创建数据源,确定数据库的位置

①第一种写法:

注:括号里的服务器地址组成:ip地址+端口地址+数据库名来进行定位(下面有补充说明)

②第二种写法:

第一种写法的好处在于,如果后续更换了数据库,比如MySQL数据库更换成了orcle,那么对原来的代码并不构成影响(因为使用了向下转型嘛,本质上还是属于DataSource这个类型的),达到了低耦合的效果,但写法②就不行了,一旦更改数据库,所有这些MysqlDataSource类型的数据都要进行修改。

这里我们直接复制粘贴即可

2:让idea和数据库建立连接

3:写sql

4:将sql转化为可发送的sql语句对象

导包:

通过控制台写的sql语句,都是把原始的sql发送给服务器,服务器在进行解析

但是JDBC不同,可以通过PreparedStatement把sql语句解析好,在发送给服务器,服务器接收到后直接执行就可以了,大大降低了服务器的成本

5:执行sql语句

6:释放资源

ResultSet resultSet

Connection connection

PreparedStatement statement

这三个资源是我们需要手动进行释放的,这三个对象手中都持有计算机中一些重要的硬件、软件资源。

释放资源,先开的后关,后开的先关,"  .close  " 方法

注:像内存,创建个变量之类的,也是一种重要的资源,之所以没有去手动释放,是因为JVM帮我们进行了回收,垃圾回收机制(GC)

7:程序运行

结果如下:相当于直接在MySQL中执行“select * from student”操作。

8:如果要执行插入语句(补充)

参考以下代码

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

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Hua YY
 * Date: 2024-09-09
 * Time: 10:47
 */
public class TestJDBCInsert {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入ID:");
        int id = scanner.nextInt();
        System.out.println("请输入Name:");
        String name = scanner.next();

      //1建立数据源,确定数据库的位置
        DataSource dataSource = new MysqlDataSource();
        //2找ip地址端口s输入用户名和密码
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java110?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("613718long");
        //3建立连接
        Connection connection = dataSource.getConnection();
        //4写sql语句
        String sql = "insert into student values(?,?) ";//"insert into student values(" + id + " , '" + name +"')";//重点,这里为什么要加单引号双引号,字符串拼接?
        //5将sql语句转化为可以发送的语句对象,即预处理语句
        PreparedStatement statement = connection.prepareStatement(sql);
        /*
        * 替换占位符*/
        statement.setInt(1,id);//把第一个?替换为id
        statement.setString(2,name);//把第二个?替换为name
        //6发送并返回一个整数
        int n = statement.executeUpdate();
        System.out.println("n:"+n);
        //释放资源
        statement.close();
        connection.close();

    }
}




六:低耦合,高内聚

在写代码,构建框架,我们常常提到两句话“低耦合,高内聚”,这是什么意思呢?

低耦合:参考第五点的第1点的两种写法,耦合我们这里可以理解成两者之间的关联程度,比如:A这一块的代码出现了问题,但是对B的代码块影响不大,这种现象就叫做低耦合。

举个形象的例子:张三和李四是兄弟,张三有天出车祸了,李四必须要去医院照顾张三,此时李四的工作就不得不耽误了,对李四的影响很大

高内聚:就是把有关系的代码放在一起 ,方便管理

举个形象的例子:我的衣服分夏季和冬季两类塞进两个大柜子,在每个柜子中,我又把上衣,裤子,袜子,帽子放到不同的夹层中,从而我每次找衣服穿的时候就很快能找到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值