"我像离家的孤儿,回到了母亲的怀抱,恢复了青春。"
作者:Mylvzi
文章主要内容:MySQL之JDBC
JDBC编程就是通过Java 代码来操纵数据库
数据库编程, 需要数据库服务器提供一些API供程序员使用 ,不同的sql服务器有不同的API,那我们mysql,oracle,sqlserver都有自己的API,那这些API需要我们都去学习么?不需要,因为Java凭借其市场份额,和数据库厂商制定了一套数据库编程规范,即所有的数据库服务器的API都能通过这套API的规范来实现
具体是怎么实现的呢?数据库的厂商设计出了他们专属的"驱动器",在我们些项目的时候,可以把使用到的数据库服务器的驱动器安装到对应的包下,就可以将数据库的API转化为规范的API
所谓的驱动器其实是一个驱动程序,它本质上是一个软件,是由厂商提供的,作用类似于"转接头",将自己原生的API转接为JDBC对应的API
如果想在项目中使用MySQL就需要安装MySQL的驱动程序,并将其放到对应的包之下
下面以mysql为例
首先要先去安装驱动包,可以去中央仓库进行下载(方便)
Maven Repository: mysql » mysql-connector-java » 5.1.48 (mvnrepository.com)
注意:下载的驱动器的版本要和你的MySQL服务器相对应,我的MySQL服务器是5,所以下载的驱动器也是5版本
1.先在src下创建一个"lib"的包(引入第三方包常用名称)
2.在lib包之下复制刚才下载的驱动器
以上都是准备工作,接下来开始进行编码
总体来说分为5步
进行数据库编程需要先进行数据准备,数据准备是通过DataSource这个接口实现的,数据源的准备分为四步
代码
DataSource dataSource = new MysqlDataSource();
源码:
代码
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
解析
这么长的字符串大家不用记忆、下次使用的时候直接复制粘贴即可,这里也叫给大家一个记忆的例子,整个字符串的逻辑还是很简单的
代码
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123456");
root是MySQL默认的自带的用户,密码是登录MySQL的密码
完整代码:
// 1.准备数据源 实例化对象 建立URL 设置用户名和密码
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("123456");
以上只是准备工作 还并没有和mysql进行通信 接下来进行通信
代码
// 2.和数据库服务器建立连接 连接好了之后才能进行后序的 "请求--响应" 操作
Connection connection = dataSource.getConnection();// 此处会报错 需要抛出异常 直接使用throws进行抛出
注意处理异常
此处要注意选择正确的Connection接口
构造sql就是将sql命令使用字符串的形式存储到一个字符串变量中,再进行预处理
// 3.构造sql sql语句最后不需要再去添加; 命令行的时候添加;
String sql = "insert into student values(3,'张三')";
PreparedStatement statement = connection.prepareStatement(sql);
为什么我们要进行sql语句预处理呢?其实也有办法直接让服务器去执行,但是服务器会对传入的字符串进行解析,校验,且传入的字符串可能出现语法错误
进行预处理相当于提前进行检查,会对传入字符串进行解析,校验,看有没有错误的地方,并将字符串解析为结构化数据,这样服务器就不需要再去解析,校验,增加了效率
通过预处理过后的语句statement向数据库传递数据
代码
// 4. 将sql发送给服务器 执行sql
int n = statement.executeUpdate();
System.out.println(n);
最常用的两种方法
代码
// 将id为3的人的名字设置为王五
String sql2 = "update student set name = '王五' where id = 1";
PreparedStatement statement2 = connection.prepareStatement(sql2);
程序通过代码和数据库建立通信,是需要消耗软件/硬件资源的,,当你不再使用数据库时,要把利用的资源返还(好借好还么)
statement.close();
connection.close();
在插入语句里面我们把内容写死了,哪能不能让用户自己输入要插入的内容呢?答案是可以的
可以使用JDBC中的占位符 ?
在jdbc编程中不能传递字符串类型的SQL语句主要出于安全和性能两方面进行考虑
安全上:传递字符串类型的SQL语句引发SQL注入,SQL注入是一种常见的SQL中的漏洞。用户可能传递恶意的代码(尤其是字符串拼接容易发生)来使数据库执行未经授权的操作,从而给数据库服务器带来危险
性能上:使用预编译语句能够提高性能。预编译是指将SQL语句进行预编译处理,并将其存储到数据库服务器之中,下次使用时只需传递参数即可,提高了执行的效率。通过预编译,可以减少数据库对SQL的检查和解析,提高了效率