Javaweb学习笔记11 JDBC

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{

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

  //关闭以前先排空,由于有可能还没创建链接已经报异常,链接没创建没办法关闭

}

相关文章
相关标签/搜索