JDBC操作数据库的方法

目录

一、JDBC介绍

二、使用方法(以MySQL为例)

(1)MySQL的jar包,导入到IDEA

(2)使用代码,操作数据库

1)设置数据源

1.创建MysqlDataSource对象,使用set方法

2.关于set...()方法的填写

1*  setURL()

2* setUser()

3* setPassword()

2)和数据库建立网络连接

3)使用程序构造SQL语句

4)关闭资源

三、JDBC操作数据库的补充

1.数据的插入

*1 .字符串拼接——不安全

*2.statement.setXXX()——推荐

2.数据的查询

3.JDBC学习的重要性


一、JDBC介绍

全称:Java DataBase Connectivity——java数据库连接

我们知道数据库厂商有很多,比如Oracle 、IBM 、MySQL、SAP

不同的厂商都有数据自己较为独特的API

什么是API?

API——(Application Programming Interface,应用程序编程接口,简称接口

是一组定义了软件组件之间交互方式的规范。

它允许不同的软件系统之间进行通信和交互,使得开发者可以利用已有的功能和服务来构建自己的应用程序。

比如说咱们最熟悉的:

JAVA标准库中,提供的各种类以及类中的各种方法(PriorityQueue等),就是API。

因为是不同的厂商,他们构建的API都是不一样的。

这就导致,如果操作不同数据库,程序猿就要重新学习一套新的语法,这样就大大提高了学习成本。

为了避免这种情况,JAVA的公司(现在是Oracle公司的一部分)规定了一套规范的API,让其他的数据库厂商去遵守。

程序猿只要学会JDBC这一套API,就可以操作各种厂商的数据库了。

为什么数据库厂商那么听话?——因为JAVA市场份额很大,他是老大。

二、使用方法(以MySQL为例)

(1)MySQL的jar包,导入到IDEA

教程见连接:

(2)使用代码,操作数据库

在上面jar文件导入到IDEA后,就可以使用JAVA代码操作数据库了。

1)设置数据源

1.创建MysqlDataSource对象,使用set方法

简单来讲就是new一个MysqlDataSource的类,

使用该类的setURL()、setUser()、setPassword()方法

分别设置好要连接的那个数据库、数据库使用者、数据库的密码:

注意:URL和Url都可以:

如图,只要把红色波浪线的空格填好,这一步就完成了。

除了以上这种方式调用set方法,还有另一种常见的方式调用set方法:

这种创建方式就比较简介,好理解。

这两种创建方法褒贬不一,很难说谁好谁坏。

为什么?

想要了解为什么,需要直到什么是耦合、什么是内聚

支持方式一的人认为:

虽然代码看起来有点繁杂,类型转来转去的。

但是这种写法耦合程度更高,以后代码修改的成本会小。

因为实际的类型是父类DataSource,看不到MysqlDataSource类中的相关方法

所以在后序代码中,不用关心是使用的那个类型的数据库,这样就使得后序代码可以和MySQL解耦合了。

不过我个人认为,开发途中更换数据库是一个频率很低的事情,即使要更改,考量的范围和要做出的调整也有很多,不是十几行代码就可以完成的


支持方式二的人认为:

虽然第二种方式耦合程度变得低了,但是代码更加简洁易读啊。

更何况更改数据库是及其少数的情况,大部分情况写第二种都是非常不错的。


以上两种创建方式,见仁见智,不过两种方式都要掌握。

说我了创建,那么set...()方法中的括号如何填写呢?

2.关于set...()方法的填写
1*  setURL()
 dataSource.setURL("jdbc:mysql://127.0.0.1:3306/testjdbc?characterEncoding=utf8&useSSL=false");

URL是资源资源占位符的缩写*(Uniform Resource Locator)

用来表述网络上某一个资源的位置(类似于网址)

数据库可以理解为一种网络资源(客户端——服务器的结构)

URL具有相对固定的格式:

jdbc:mysql

描述了url的用途是什么?——是给jdbc的mysql使用的

 

127.0.0.1

IP地址,代表mysql服务器所在主机的位置


3306

叫做端口号。

端口号是用来区分一个主机上的不同应用程序的。

比如点脑上有酷狗、QQ音乐、网易云音乐,这是发来网络数据,想要把数据给到那个程序,就要用端口号来做区分。

MySQL默认安装的端口号是3306


testjdbc

它是我之前就创建的一个数据库的名字


characterEncoding=utf8

说明数据库指定的字符集是那种。


useSSL=false

代表资源是否需要加密

等于false代表把加密关掉(因为咱们的数据库不值钱,所以咱们的数据库很安全,被必要加锁)。

设置URL很重要,一步都不能错,不然后续会出问题。

2* setUser()
 dataSource.setUser("root");

“root”代表管理员身份。

3* setPassword()
        dataSource.setPassword("1111");

填入的字符串就是安装MySQL时,设置的数据库密码。


2)和数据库建立网络连接

通过刚才创建的对象,使用getConnection()方法:

Connection connection=dataSource.getConnection();

但是,我们直接使用这个方法,会抛出一个异常:

SQLException是一个受查异常,我们直接alt+enter抛出即可。

这样与数据库进阿里了网络连接:

关于JAVA中的异常详细介绍,知识回顾请看:JAVA中的异常

3)使用程序构造SQL语句

我们以插入一个数据行为例,这是我们stuent表的结构(id,name):

表的内容:

构造SQL语句分为两步:

1.通过字符串把代码输入(语句的分号可加可不加)

2.对代码进行预编译(预编译在MySQL服务器上也可以进行,不过为了提高性能还是在客服端上把他解析了),然后上传到服务器上执行

  //3、使用程序构造SQL语句

            //输入SQL语句    
        String sql="insert into student values(3,'王五')";

            //对sql语句进行预编译
        PreparedStatement statement=connection.prepareStatement(sql);

            //放到服务器执行预编译好的语句
         statement.executeUpdate();

注意:

只要SQL语句不是查找(是更新数据),就用statement.executeUpdate()

如果是SQL查找,用statement.executeQuery()

4)关闭资源

先创建的后关闭:

三、JDBC操作数据库的补充

1.数据的插入

数据库插入数据的写法不一定要想上面介绍的那样,把数据写死在代码里。

还有两种书写方式:

两种方式,都可以用户进行输入操作:

*1 .字符串拼接——极不推荐

拼接很简单,就是我们学过的:

//3、使用程序构造SQL语句
        String sql="insert into student values("+id+",'"+name+"')";

不推荐的原因有2:

1.代码看起来很乱,不利于维护。

2.可能会导致“sql注入攻击”。

比如有人故意使坏,输入一些特别的字符串,是的sql语句不在是之前原有的语意。而是另外一些语意,那么就会对数据库带来负面效果。

*2.statement.setXXX()——推荐

我们不再把id和name拼接到字符串中,而是把他换成占位符:

注意必须是英文的问号(?),不然程序不认识,会编译失败。

占位符类似于C语言中printf的%d这种作用。

接下来我们设置两个问号的具体参数:

 //3、使用程序构造SQL语句
        String sql="insert into student values(?,?)";

            //对sql语句进行预编译
        PreparedStatement statement=connection.prepareStatement(sql);

//使用statement自带的setXXX方法,设置?的值
        statement.setInt(1,id);
        statement.setString(2,name);

setXXX有很多类型,匹配数据列的参数即可:

setXXX的第一个参数代表当前数据位于数据行的第几列参数从1开始

这样就大功告成了,整体代码:

import com.mysql.jdbc.MySQLConnection;
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:34398
 * Date:2024-06-07
 * Time:14:26
 */
public class Main {


    public static void main(String[] args) throws SQLException {

        //1、设置数据源

//        DataSource dataSource=new MysqlDataSource();//向上转型
//        //接着又向下转型
//        ((MysqlDataSource) dataSource).setURL();
//        ((MysqlDataSource) dataSource).setUser();
//        ((MysqlDataSource) dataSource).setPassword();


        Scanner scanner=new Scanner(System.in);
        System.out.println("输入学生ID:");
        int id=scanner.nextInt();
        System.out.println("输入学生姓名:");
        String name=scanner.next();

        MysqlDataSource dataSource=new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/testjdbc?characterEncoding=utf8&useSSL=false");


        dataSource.setUser("root");
        dataSource.setPassword("1111");

        //2、和数据库建立网络连接
        Connection connection=dataSource.getConnection();


        //3、使用程序构造SQL语句
        String sql="insert into student values(?,?)";

            //对sql语句进行预编译
        PreparedStatement statement=connection.prepareStatement(sql);

        statement.setInt(1,id);
        statement.setString(2,name);


            //解析后的语句放到服务器,执行
        statement.executeUpdate();

        //4、关闭资源文件
        statement.close();
        connection.close();

    }
}

2.数据的查询

如图只要在更行数据的代码基础上更改第三步即可:

测试结果:

3.JDBC学习的重要性

JDBC在实际开发中用的很少。

因为代码写起来比较的复杂。

后来就有了很多库和框架,来针对JDBC进行简化(都是基于JDBC

像Mybaits框架,就是针对JDBC简化后的组件。

这些框架的使用的确可以提高我们的开发效率,但是有使用遇到特殊的场景,这些通用的框架可能就发挥不了作用了。

需要我们利用JDBC的知识,去修改或者自己开发一个框架,来应对某些独特的场景

因此JDBC的学习非常必要!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值