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{

  //先打开的后关闭,后打开的先关闭

  //关闭之前先排空,因为有可能还没建立连接已经报异常,连接没建立没办法关闭

}

 

posted @ 2019-02-20 16:37  子汉疆南  阅读(218)  评论(0编辑  收藏  举报