JDBC
JDBC概念:
-
jdbc就是用Java语言操作数据库的一套api
-
全称:(jdbc DataBase Connectivity)java数据库连接()
-
为了实现同一套代码操作不同的关系型数据库,sun公司指定了一套接口jdbc,而各个数据库厂商写一个实现类去实现jdbc接口,这样Java程序员只需要一套代码就可以操作不同的关系型数据库
-
注意是这些oracle,MySQL,db2他们还取了一个比较洋气的名字,什么MySQL驱动啊,Oracle驱动啊,就是实现类,名字高端大气而已
JDBC的本质
-
sun公司定义的一套接口,即操作所以关系型数据库的规则。
-
各个数据库厂商去实现这套接口,提供数据库驱动jar包(就是各个数据库厂商写好了的实现类)
-
我们可以使用JDBD这套接口编程,真正执行代码的是驱动jar包中的实现类
JDBC的好处
-
你各个数据库厂商使用的接口是一样的,Java代码不需要针对不同是数据库进行不同的Java代码开发
-
可以随时替换底层的数据库,访问的Java代码不变。(就是说,你写了一个操作MySQL数据库的Java代码,你要操作Oracle数据库的时候,你不需要去改变你的Java代码,只需要将MySQL驱动换成Oracle驱动即可)
JDBC快速入门(操作数据库的求代码)
-
注册驱动
Class.forName("com.mysql.jdbc.Driver");
-
获取连接
Connection conn=DriverManager.getConnection(url,username,password)
-
定义sql语句
String sql="你写MySQL数据库的sql语句"
-
获取执行sql对象(获取Statement对象)
Statement stmt=conn.createStatement();
-
执行sql
stmt.executeUptate(sql);
-
这里要看是执行什么sql语句了,不同的sql语句调用不同的方法
-
-
处理返回结果
-
你用Java代码去操作MySQL数据库,将sql语句发送给MySQL数据库,然后MySQL数据库返回处理结果,需要Java代码去处理
-
-
关闭资源
JDBC的API详解
-
DriverManager
-
Connection
-
ResultSet
-
PreparedStatement
DriverManager
注册驱动的细节
-
这是注册驱动时候Driver的源码。底层是DriverManager调用了registerDriver方法,然后new一个 Driver()对象作为参数
static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }
-
这是自己编写注册驱动的代码
-
这个是反射机制加载类,静态代码块随着类的加载而加载
-
在MySQL驱动jar包5后,这一行驱动代码可以省略(在这个目录下写了注册驱动,并且自动加载:mysql-connector-java-5.1.47.jar!\META-INF\services\java.sql.Driver)
-
//1.注册驱动 Class.forName("com.mysql.jdbc.Driver");
url的连接路径
-
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2
-
示例:jdbc:mysql://localhost:3306/db1?useSSL=false
-
解释:后面useSSL=false是一个键值对,useSSl是键,false是值,表示禁用安全连接方式,解决警告提示
-
细节:如果你是连接的本机,那么ip地址和端口号可以省略不写
Connection
事务管理
-
mysql的事务管理
-
开启事务:begin;/start transaction;
-
提交事务:commit
-
回滚事务:rollback;
-
MySQL默认自动提交事务
-
-
JDBC事务管理:(Connection接口中定义了三个对应的方法)
-
开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务
-
提交事务:commit()
-
回滚事务:roolback()
-
-
使用:要在执行sql语句前开启事务,处理结果之后回滚事务,出现异常后回滚事务。如果我们期望两条sql语句同时生效或者失败就要用事务管理起来,出现异常后就会执行catch里面回滚事务代码,不会提交事务(使用到处理异常的try-catch知识)
ResuSet
作用
-
封装DQL查询结果集
ResultSet rs=stmt.executeQuery(sql);//执行DQL语句,返回ResultSet对象
-
讲解:首先我们看这个ResulltSet集合这个Set我们就知道是一个键值对的Set集合,将执行的sql语句查询的结果集封装到这个ResultSet里面,然后取出来。
如何将结果集取出来
-
boolean next()方法:(1):将光标从当前位置向前移动一行;(2):判断当前行是否为有效行(什么是有效行:就是这一行上面有查询结果集的数据)
-
true:有效行,当前有数据
-
false:无效行:当前行没有数据
-
-
xxx getXxx(参数):获取数据
-
int getString(参数);String getString(参数)
-
参数:
-
int:列的编号,从1开始
-
String:列的名称
-
-
-
总结:就是跟集合的iterate迭代器差不多
PreparedStatement
-
作用:防止sql注入,预编译sql并执行sql语句
三步:
-
获取preparedStatement的对象
//SQL语句中的占位符使用?来代替 String sql="select * from tb_user where username=?and password=?" //通过Connection对象获取,并传入对应的sql语句 PreparedStatement pstmt=conn.prepareStatement(sql);
-
这个问号占位符后面会用preparedStatement对象pstmt去调用setXxx方法去设置值,假如第一个问号是String类型就是pstmt.setString(1,第一个问号要填的值)
-
通过这个对象执行sql,是会对sql语句进行转义处理,从而防止sql注入
数据库连接池
数据库连接池简介
-
数据库连接池他是一个容器,负责分配和管理数据库连接
-
他允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个
-
好处:
-
资源重用
-
提升系统响应速度
-
避免数据库连接遗漏
-
数据库连接池实现
-
标准接口:DataSource
-
sun公司提供的数据库连接池标准接口,由第三方组织实现此接口。
-
功能:获取连接
Connection getConnection()
-
常见的数据库连接池:
-
DBCP
-
C3P0
-
Druid
-
-
Druid(德鲁伊)
-
Druid连接池是阿里巴巴开源的数据库连接池
-
功能强大,性能优秀,是Java语言最好的数据库连接池之一
-
-
德鲁伊连接池的操作步骤
-
导入德鲁伊jar包
-
定义配置文件
-
加载配置文件
Properties prop=new Properties(); prop.load(new FileInputStream("配置文件的路径"))
4.获取连接池对象
DataSource datasource=DruidDataSourceFactory.createDataSource(prop);
5.获取数据库连接Connection
Connection connection=dataSource.getConncetion();
细节:
1.获取当前根路径
System.out.println(System.getProperty("user.dir"))
2.在写实体类时候int类型数据最好用包装类型,因为全局变量int有默认值0,而包装类型Integer默认值为null