日升时奋斗,日落时自省
目录
一、JDBC编程
无论是前面学习的MySQL初阶操作还是进阶操作看似都是直接能在命令行上敲出来的,但是实际上又不是这么敲的,手动敲的话数量大了,效率就很慢了
绝大多数的SQL都是通过自动执行的
这这种自动化执行就需要编译语言来操作数据库了
mysql客户端(mysql自带的黑框框)>> 通过网络来访问 >>mysql服务器
这就是开始直接使用mysql客户端进行操作给服务器发送信息
自己写mysql客户端(C,C++,java,Python)>> mysql服务器
编译语言操作数据库服务器
这里为什么说我们能写一个数据库客户端,因为各种数据库都提供了一系列的API(下面会详细说API是做什么的),可以让咱们比较方便实现这个数据库客户端。
这里会有友友问是不是数据库服务器也可以自己写一个,非常难写
数据库服务器涉及的东西很多(前面在事务的时候就提到了储存引擎,索引对应的数据结构,内部数据结构如何控制组织数据,存储数据,SQL执行引擎,代码优化等)
1、API
所以MySQL也提供了API(Application Programming interface 应用程序编程接口)
API就像是一个驱动,API提供了方法,类等,使用过java或者是C等一些编译语言的话,这个也好解释,里面使用的方法,可以编程的语句就是API
API实例:
(1)java的标准库,就会给我们提供一些API,(实用:Scanner,集合类,方法、组类)
(2)操作系统,提供的API操作硬盘访问的文件,访问内存内容,重置网卡,包括模拟鼠标时间,模拟键盘,都是以类或者方法提供给我们
(3)数据库(MySQL)同样有API为了提供驱动完成操作数据库,完成各种数据库的增删改查操作
一个现实中的例子:人生活在社会上,但是需要使用不同功能的东西来完成生活,澡堂就像是个API提供洗澡的功能(这个应该很好理解)
总述:顾名思义 “ 应用程序编程接口” 能给你提供某些功能或者服务
MYSQL中的API就是为了让我们实现客户端的 (有官方维护,直属于Oracle)
MYSQL的API是C语言风格的,但是不能只有这一个版本的,因为MYSQL使用范围很广泛,就不能只有这个一个语言的版本,也提供了多个其他语言版本的API,其他版本的API本质上还是调用了C的API(跨语言调用)
但是数据库不是只有MySQL一种,有多种数据库Oracle,SQLserver,SOLite等多种数据库都会提供API,这下就造成了一个很不友好的局面,就是每个数据库都有自己的API,那岂不是使用需要注意的东西就要把程序员坑没了
在java中就不一样了,这些数据库的API统一起来,JDBC就诞生了,JDBC这套API相当于被加入了java的标准库(记住是相当于,不是真的在里面,这里只是说是共生关系),为什么会这样,就是因为java后期的发展很快,一直都趋于榜前列,影响力很大,以java为自身作为标准,数据库都提供了能够适应JDBC相关的“驱动包”
既然是以一个标准来定义,API如何使用都成为定性
(1)JDBC优点:无论是那个数据库,操作性代码大体不变。(JDBC屏蔽了不同数据库带来的API差异,减少了程序员的劳动量,对于java语言益处多多)
(2)缺点:JDBC只能适用于java数据库连接,是面向对象的,出了这个语言就不能了,Windows自带的一个ODBC提供API代表开放式数据库连接,是程序性的
当然这里在java数据库连接中,建议使用JDBC对口连接,性能针对java更快,ODBC更复杂,难学,使用需要内部转换,效率低。
2、JDBC使用
2.1、驱动包
这个是一个驱动包(中央仓库有,数据库厂商提供的),我们是需要把它放在java中的目录里
驱动包在中央仓库下载,应用商店即可找到(这里附一个连接,直接点开就行)
https://mvnrepository.com/
以下开始画面操作
这里点这个热气球图片,比较简单,照这点就行,点完之后右下角这个skip就会变成next点击就进去了。
接下来有很多版本,这里我选择的是5版本,因为我的mysql是5版本的
自己要找好下载的文件路径哈
打开idea
然后步骤如下
如下就算是JDBC驱动包,导入结束
这个驱动包里有很多.class文件,看着多其实不难,都是固定的东西(想看了可以解压缩文件看看,这里就不在截图展示了)
3、JDBC代码编程
3.1、增(删改)
JDBC中很多API都是接口(interface)
new 一个驱动包里的类,其实和java的东西都是一样的模式,只是这里是创建数据库的,一个能够连接数据库的类,那还需要知道服务器的地址涉及到那个库,用户和密码
(1)创建数据源(重要步骤)
注解:每个人的电脑ip地址可能不一样,这里对127.0.0.1解释统一写这个是没有问题的,特殊的ip地址被叫做“ 环回ip ”表示主机自己(本体)
使用条件:你的服务器和你的jdbc在同一个电脑上
上面的数据源操作创建好了,只是描述了服务器在哪,还没有连接上,更没进行访问
(2)连接操作(重要步骤)
连接(Connection) 就是客户端和那个服务器连接,就可以进行通信了
(3)写SQL语句(重要步骤)
(4)SQL语句预处理(重要步骤)
(5)显示影响行数
显示后打印就可以,这里其实看个人需求
(6)关闭连接,数据源或者集合
注意:先进行的连接,连接后预处理sql语句,但是关闭的时候是先关闭预处理PreparedStatement,后关闭连接
jdbc使用过程中会看见两种不同的风格的代码
一种:DriverManager
使用的时候,需要借助反射,对我们并不友好,反射不属于常规编程手段,特殊情况使用
另一种:DataSource
只有相比才能知道的DataSource比较香的,内置了数据量连接池,可以重复利用连接
这里简单提示一下:可以使用原始代码进行书写sql语句,但是不推荐,更推荐通配符书写,可读性更高
插入代码:(大体的框架都是一样的,可以尝试删或者改)
public class JDBC_CSDN_Demo {
public static void main(String[] args) throws SQLException {
//1.先创建DataSource 数据库,描述Mysql数据库在哪
DataSource dataSource=new MysqlDataSource(); //创建一个数据源
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/class?charactorEncoding=utf8&&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("输入自己的数据库密码");
//2.连接操作
Connection connection= dataSource.getConnection();
//3.操控台,输入信息
Scanner scanner=new Scanner(System.in);
System.out.println("请输入学号:");
int id =scanner.nextInt();
System.out.println("请输入姓名:");
String name=scanner.next();
//4.构造SQL语句
//String sql="insert into teacher values("+ id +", '" + name + "')";
String sql="insert into teacher values(?,?)";
//5.mysql 需要一个特定的对象,来描述SQl情况
PreparedStatement statement=connection.prepareStatement(sql);
statement.setInt(1,id);
statement.setString(2,name);
//影响的行数
int result= statement.executeUpdate();
System.out.println(result);
//6.关闭连接
statement.close();
connection.close();
}
}
3.2、查询
查询的要点:
利用结果集 将所有的行提取出来在打印
关键代码:ResultSet resultSet=statement.executeQuery(); 主要目的是获得结果集
只有用executeQuery才能获得结果集
减少了很多的cmd代码,代码自动运行
这里sql语句与cmd上没有什么太大区别,where 条件都可以使用
当然cmd不是说就不用了,只是说大批量数据时就需要 代码自动处理 其实还是很常用的,所以基础的操作我们得会(不能忘)
(1)实际上JDBC 可能也不一定会用的上,因为JDBC代码还是比较多的,框架会解决代码繁琐的问题
(2)因此一些库或者框架都会对JDBC进行封装, 使用更便捷。
(3)我们通过了解这些框架的底层也就是JDBC就能够 深入框架的使用,框架的革新比较快,不如JDBC耐用,只要我们知道JDBC就能在这个基础上学习框架,更容易,核心构架
查询代码:
public class JDBC_CSDN_Select {
//查询上有特殊的步骤
public static void main(String[] args) throws SQLException {
//首先还是创建DataSource数据库,描述一下数据库在哪里
DataSource dataSource=new MysqlDataSource();
//数据库的地址 ,用户, 密码
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/class?charactorEncoding=utf8&&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("输入自己的数据库密码");
//开始连接
Connection connection=dataSource.getConnection();
//剩下的还是写sql语句
String sql ="select * from teacher ";
//预处理
PreparedStatement statement=connection.prepareStatement(sql);
//查询需要结果集进行接受
ResultSet resultSet=statement.executeQuery();
while(resultSet.next()) {
//这里的next就相当于是一个光标 最开始在一行的上面
//光标每次都会到下一个位置
//获得就是 getInt getStirng getCharactor 等等后缀都是对应的
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println(id + ":" + name);
}
}
}
如果有误,留言提示,看到后我也会给予自我学习和回答问题