Java的JDBC编程
1. 数据库编程的必备条件
? ? ? ? 主要大体上来说有三个:
? ? ? ? 1、编程语言,如Java,C、C++、Python等
? ? ? ? 2、数据库,如Oracle,MySQL,SQL Server等
? ? ? ? 3、数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提 供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的, 要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。
? ? ? ? 小小的拓展:
????????数据库的类别:
- mysql
- oracle
- sql sever
- sqlite
------------------>代码操作数据库的前提,是数据库要提供api,咱们调用api才能完成操作。
????????Api(application programing interface)应用程序编程接口。具体的体现形式就是一些已经实现好了的类和方法。如果某个东西,提供的api特别多,特别丰富,就会把这个东西称为sdk(软件开发工具);Jdk就是java 的开发工具包。
????????以上四种数据库,提供的api不一致(提供的函数,函数名,功能,参数,返回值)
所以,java就将以上的多种数据库联合到一起,即来提供一种api标准,各个数据库将已经搞好的api重新包装一下,搞到一起。
????????这时,我们就只需要按照一套api来搞就可以。故此就不关心各种数据库api的差异,只用学java这一套就行了。
? ? ? ? 由此,数据库原有的api不变,在这个基础上,加个封装层,适配到jdbc这一套接口上。后序学到的操作数据库的框架,本质上就是jdbc的封装。
2. Java的数据库编程
2.1 引入JDBC?
????????JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.* ,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问;
????????Jdbc编程,通过java代码来操作数据库。一般来说只有在调试,测试,验证环境才通过手动操作数据库。本质上,使用编程语言来操作数据库,其实是在操作sql。
2.2?JDBC工作原理
????????JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类
????????JDBC访问数据库层次结构如下图所示:
????????JDBC优势:
? ? ? ? 1、Java语言访问数据库操作完全面向抽象接口编程
? ? ? ? 2、开发数据库应用不用限定在特定数据库厂商的API
? ? ? ? 3、程序的可移植性大大增强
3. JDBC的使用
3.1?准备工作
????????需要引入mysql的jdbc的驱动包。(该驱动包是第三方库,不是jdk这里原生就有的,需要通过其他途径下载下来并引入到项目中)驱动包如下图所示:
? ? ? ? ? ?
????????第一个是更高版本的驱动包,第二个是低版本的驱动包,选择相对应自己mysql版本来下载相应的驱动包;
? ? ? ? 我们下载的是一个.Jar的文件,Jar本质上是一个类似于rar这样的压缩包,里面主要是.class文件;
3.2?把jar包导入到项目中
????????随便在项目中创建一个目录,把jar包拷贝进去。(Lib是库的意思),具体如下图所示:
? ? ? ??
????????右键这个目录,add as library-->添加为库:
? ? ? ?
? ? ? ? 此时,如此则导入成功;
3.3 写jdbc的代码
3.3.1 步骤一
????????创建数据源,数据源描述了你要操作的数据库在哪里
????????数据库是服务器,服务器可能在你这个主机上,也可能在其他主机上,我们首先要明确这个服务器的位置。
? ? ? ? 数据库主要是通过Ip地址+端口号+数据库名来定位。
????????IP地址:是用来描述一个主机在网络上的位置,是一串数字组成的。
????????127.0.0.1:这是一个特殊的ip,叫做“环回ip”(lookback)--表示主机。
???????端口号:一个主机上有很多服务器程序,我们使用端口号来区分不同的服务程序。3306:(mysql服务器默认的端口号)
?实际应用中使用DataSource对象,获取方法有以下两种:
方法一:
DataSource ds = new MysqlDataSource(); ((MysqlDataSource) ds).setUrl("jdbc:mysql://127.0.0.1:3306/dream?characterEncoding=utf-8&&useSSL=false");
图解分析:
方法二:
MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/dream?characterEncoding=utf-8&&useSSL=false");
????????两种用法没有什么区别;
????????url参数解释:
?3.3.2 步骤二
????????数据库连接Connection:和数据库服务器,建立连接
????????利用前面所创建的数据源对象,调用setUser方法与setPassword方法
-
setUser方法里面传的是用户名,一般默认为root
-
setPassword方法里面传的是你的数据密码
? ? ? ? 至此代码如下:
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("111111");
//2、和数据库服务器,建立连接
Connection connection= dataSource.getConnection();//connection是jdbc的
?????????这个代码就会和数据库服务器之间建立连接(抽象的连接:可以理解成通信双方各自保存对方的信息)
3.3.3 步骤三
????????构造一个sql
//3、构造一个sql, String sql = "delete from student1 where id = ? ;"; //需要把string sql 转化成 语句对象 PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1,id); // statement.setString(2,name);
? ? ? ? 具体语法解析如下:
? ? ? ? 1. 通过控台,写sql,就是把原始的sql发给服务器,服务器负责解析sql
? ? ? ? 2.1 使用statement(没有预处理),只是服务器先解析,在执行
? ? ? ? 2.2 使用preparedstatement,就不一样,可以先给客户端这边,提前把sql解析好,把解析后的结果发给服务器,服务器的解析开销就大大降低了,直接解析即可。
? ? ? ? 下面是两个方法的使用:
????????上面的那个只负责查询,返回值是resultset(结果集,select语句得到的临时表)
????????下面那个可以进行增删改查(创建表、删除表),只需要返回一个数据,这个整数表示这个操作影响了几行。
此处的名次解释:
- Datasource数据源:描述了数据库服务器在哪里
- Connection连接:需要先建立连接,才能进行通信。基于Datasource构造出来的,知道数据库服务器在哪里,才能建立起链接。
- PrepareStatement语句:基于连接生成的,当前语句对象是要发给服务器的
3.3.4?步骤四
????????并把sql发给服务器进行执行
//4、并把sql发给服务器进行执行 int n = statement.executeUpdate(); System.out.println("n ="+n);
????????此时,代码就会构造一个网络请求,发送给mysql服务器(咱们的代码就是客户端的角色,相当于cmd),并且会等待服务器的相应,并把得到的相应显示在控制台上。
3.3.5?步骤五
????????最后一步,释放必要的资源
//5最后一步,释放必要的资源 statement.close(); connection.close();
????????释放的顺序和创建的顺序是相反的。
3.3.6 结果展示
? ? ? ? 运行idea,执行代码指令:
? ? ? ? 在mysql中查看:
起初:
之后:
? ? ? ? ?关于select语句的代码(过程略):
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestJDBCSelest {
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("111111");
//2、和数据库服务器,建立连接
Connection connection= dataSource.getConnection();//connection是jdbc的
//3、构造一个sql,
String sql = "select * from student1";
//需要把string sql 转化成 语句对象
PreparedStatement statement = connection.prepareStatement(sql);
//4\并把sql发给服务器进行执行
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()){
//这个代码,就是获取id这一列的数值,期望得到一个int
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id:" + id);
System.out.println("name:" + name);
}
//5最后一步,释放必要的资源
resultSet.close();
statement.close();
connection.close();
}
}
? ? ? ? 代码运行:
名词解释:
????????耦合:两个东西之间的关联联系,关系越密集,耦合就越高。
????????高耦合:好的夫妻,一方有难,对另外以方会有很大的影响。-->改一处的代码,结果其他很多东西出bug
????????低耦合:一对陌生人,一方有难,但是对另外一方微乎其微。
????????内聚:把有关系的代码,放在一起,不要放在各个地方。
????????低内聚:某个功能的代码,会散落在各个地方,想要理解,想要修改,就要满地图去找
????????高内聚:把有关联得代码,放到一起
ps:本次的内容就到这里了,如果大家感兴趣的话就请一键三连哦!!!
至此,mysql初阶结束;
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!