阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能帮到你!
目录
一:通过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的代码块影响不大,这种现象就叫做低耦合。
举个形象的例子:张三和李四是兄弟,张三有天出车祸了,李四必须要去医院照顾张三,此时李四的工作就不得不耽误了,对李四的影响很大
高内聚:就是把有关系的代码放在一起 ,方便管理
举个形象的例子:我的衣服分夏季和冬季两类塞进两个大柜子,在每个柜子中,我又把上衣,裤子,袜子,帽子放到不同的夹层中,从而我每次找衣服穿的时候就很快能找到