Javaweb学习笔记11 JDBC
JDBC : Java Database Connectivity 可以为多种关系型数据库DBMS 提供统一的访问方式,目的就是用java来操作数据库
一个驱动程序就是一个jar包,操作不同数据库的jar包由各自数据库厂商提供
jdbc提供统一的操作,忽略中间实现的细节(各个驱动程序)。
A jdbc api:提供各种操作访问类接口 Connection Statement PreparedStatement(子类)ResultSet
B jdbc DriverManager:管理不同的数据库驱动
C 各种数据库驱动:相应的数据库厂商提供的(第三方公司提供) 连接直接操作数据库
主要是学A,C是厂商提供,调用即可
三件事,具体是通过以下类/接口实现
DriverManager :管理jdbc驱动
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{
//先打开的后关闭,后打开的先关闭
//关闭之前先排空,因为有可能还没建立连接已经报异常,连接没建立没办法关闭
}