JDBC : Java Database Connectivity 能够为多种关系型数据库DBMS 提供统一的访问方式,目的就是用java来操做数据库java
一个驱动程序就是一个jar包,操做不一样数据库的jar包由各自数据库厂商提供mysql
jdbc提供统一的操做,忽略中间实现的细节(各个驱动程序)。sql
A jdbc api:提供各类操做访问类接口 Connection Statement PreparedStatement(子类)ResultSet数据库
B jdbc DriverManager:管理不一样的数据库驱动api
C 各类数据库驱动:相应的数据库厂商提供的(第三方公司提供) 链接直接操做数据库安全
主要是学A,C是厂商提供,调用便可oracle
三件事,具体是经过如下类/接口实现函数
DriverManager :管理jdbc驱动sqlserver
Connection :链接 (经过DriverManager来产生) 性能
Statement(PrepareStatement):增删改查 (经过Connection来产生)
CallableStatement: 调用数据库中的存储过程或者存储函数 (经过Connection来产生)
ResultSet :返回结果集 (经过Statement来产生)
jdbc访问数据库的具体步骤
a。导入驱动,加载具体的驱动类
b。与数据库创建链接( 数据库名(包含链接字符串,IP,端口号)、用户名、密码 )
c。发送sql。执行
d。处理结果集
4.数据库驱动 驱动jar 具体驱动类
oracle ojdbc-x.jar oracle.jdbc.OracleDriver
MySql mysql-connector-java-x.jar com.mysql.jdbc.Driver
SqlServer sqljdbc-x.jar com.microsoft.sqlserver.jdbc.SQLServerDriver
链接字符串
jdbc:oracle:thin:@localhost:1521:ORCL
jdbc:mysql://localhost:3306/数据库实例名
jdbc:microsoft:sqlserver:localhost:1433;databasename=数据库实例名
链接过程当中遇到的问题汇总
问题 解决方式
字符集不匹配 将mysql的默认字符集设置为utf-8
用的包过于老旧 从官网下载对应版本
time zone 对应不上 在url最后加上?serverTimezone=GMT%2B8
root不能没有密码链接 设置root的密码而且记住
使用jdbc操做数据库时,若是对数据库进行了更换,只须要替换:驱动、具体驱动类、链接字符串、用户名、密码
增删改都是executeUpdate ,查询是executeQuery
resultSet就是数据库的一张表
经过循环将数据取出来
rs 是executeQuery查询后返回的对象,有next()方法与getXXX(name)方法
connection 产生Statement对象 createStatement()
connection 产生PreparedStatement对象 PrepareStatement()
connection 产生CallableStatement对象 prepareCall()
Statement 操做数据库:
增删改:executeUpdate()
查询 : executeQuery()
ResultSet 保存结果集 select* from xxx
next()光标下移,判断是否有下一条数据
privious:true/false
getXxx(字段名/位置)获取具体的字段值
PreparedStatement 操做数据库:
public interface Prepared Statement extends Statement
所以有
增删改:executeUpdate()
查询 : executeQuery()
有一堆赋值操做 setXxx()
Statement 与 PreparedStatement:
Statement
直接写sql,写完执行就好了
PreparedStatement:
这个sql可能存在占位符问号,在建立statement的对象时将sql预编译 prepareStatement(sql)
用setXxx方法替换占位符
推荐使用preparedStatement,缘由以下
1。编码更加简便,避免字符串的拼接
2。提升性能(由于有预编译操做)
重复增长100次的时候 prepared sql 须要编译执行100次
prepared Statement
3。安全
可以有效的防止sql注入
JDBC总结(模板、八股文);
try{
a。导入驱动包、加载具体驱动类Class.forName(""具体驱动类)
b。与数据库创建链接connection = DriverManager.getConnection(...);
c经过connection ,获取操做数据库的对象(statement/preparedstatement/callablestatement)
stmt=connection.createStatement();
d。(查询)处理结果集 resultset
while(rs.next()){rs.getXxx}
}catch(ClassNotfFundException e ){
//找驱动的时候会抛出这个异常
}catch(SQLException e){
//除了上面那个,都抛出这个
}catch(Exception e){
}finally{
//先打开的后关闭,后打开的先关闭
//关闭以前先排空,由于有可能还没创建链接已经报异常,链接没创建没办法关闭
}