JDBC整理

why?
1.如何在java中操作数据库
2.提供统一的操作方式去操作所有的关系数据库
what?
java DataBase Connectify(jdbc)
使用java语言实现连接数据库方式
how?
jdbc六大步骤
a.ODBC:open Datebase Connectify
1.使用统一方式去操作数据库
2.使用c语言实现
3.嵌入式方向连接数据库使用ODBC
b.jDBC:java Datebase Connectify
1.使用统一方式去操作数据库
2.使用java语言实现
3.JAVAEE,JAVASE连接数据库,使用JDBC
4.sun公司提出

**

jdbc API是什么?

**
所在包:
java.sql.;—javase
javax.sql.
;—javaee
提供的就是java方面的连接数据库的标准
操作数据库
1.连接数据库
2.发送sql语句操作数据库
3.获取处理结果

使用时候应该导包:
ojdbc14.jar

**

JDBC驱动的四种类型

**:

a)JDBC-ODBC桥驱动:
把c语言转化成java语言效率很低
b)部分java实现的本地驱动:
把c语言转化成java语言效率很低
必须安装客户端
c)纯java实现的网络驱动
使用数据库特殊的协议
d)纯java实现的本地驱动
采用TCP/IP协议进行通信
Oracle只支持第二,四类驱动
现在Oracle采用第四类驱动:thin

URL:如何去标识一个唯一的数据库。
可以安装一个数据库,可以配置多个数据库系统。
URL由数据库厂商提供的。
针对Oracle的URL:
jdbc:oracle:thin:@localhost:1521:XE

JDBC的编程步骤
1)注册驱动:告诉应用程序连接什么数据库
驱动程序:ojdbc14.jar或者ojdbc5.jar
三种方式:
a)使用类加载(常用)
Class.forName(driverName);
b)创建driver对象
Driver driver=new driverName();
DriverManager.registerDriver(driver);
c)使用jdbc.drivers的属性
-Djdbc.drivers=oracle.jdbc.driver.OracleDriver

**2)获取与数据库的连接,**Connection
两种方式:
a)DriverManager.getConnection
(url,user,passwd);(常用)
b)Driver对象.connect(url,properties)
必须和第一步的第二种方式连用

3)创建发送sql语句的对象(Statement)
Statement
a)执行异构的sql语句,效率更高
b)创建对象和执行sql语句
createStatement();
execute***(sql);
c)动态sql语句使用字符串拼接的方式
d)不会进行预编译
PreparedStatement
a)执行同构的sql语句,效率更高
b)创建对象和执行sql语句
prepareStatement(sql);
execute***();
c)动态sql语句使用?.
执行sql之前给?赋值
d)会进行预编译,传入的内容是真正的字符串
CallableStatement:执行pl/sql的语句
4)执行sql语句
boolean execute(sql):执行任何sql语句。返回是否有结果集效率低
ResultSet executeQuery(sql):执行查询sql语句,返回结果集
int executeUpdate(sql):执行DMLsql语句,返回受影响行数
insert,update,delete

5)处理结果(针对查询语句)
ResultSet:结果集,最开始返回所有数据最前面
while(rs.next()){
//处理每一条数据getType()
}
getType(序列号|字段名字):序列号从1开始
Type是数据类型。
getInt(1),getString(2)
getInt(“id”),getString(“last_name”)
为某一个字段赋值:setType===>setInt()
6)关闭资源,close()
先开的后关,后开的先关
一旦Connection关闭,其他的资源取不到。

面向对象编程和关系数据库如何映射
关系数据库 面向对象编程
表 class
字段 实例变量
外键 has a的关系
主键的值交给序列

create table s_emp(
  dept_id number references s_dept(id)
)
class Emp{
   Dept dept;
}
class Dept{
   Set<Emp> emps;
}

创建发送sql语句的对象(Statement)
i))Statement
a)执行异构的sql语句,效率更高
b)创建对象和执行sql语句
createStatement();
execute***(sql);
c)动态sql语句使用字符串拼接的方式
d)不会进行预编译
ii)PreparedStatement
a)执行同构的sql语句,效率更高
b)创建对象和执行sql语句
prepareStatement(sql);
execute***();
c)动态sql语句使用?.
执行sql之前给?赋值。
?不能使用在字段名和表名中。
d)会进行预编译,传入的内容是真正的字符串。
预编译的效果:想给name赋值为br’iup
只能用PreparedStatement才可以插入成功。
e)避免sql注入(sql漏洞)

事务Transaction
JDBC中事务都是自动提交
try{
开启事务conn.setAutoCommit(false);
你的账户update
我的账户update
提交事务conn.commit();
}catch(Exception e){
回滚事务conn.rollback();
}

批处理:提高效率。用于处理大量数据
将一批sql语句发送给数据库,
数据库一次性执行这一批sql语句。
addBatch(sql) 将sql语句添加到批处理中
addBatch()
executeBatch():执行这一批sql语句

做下封装

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class ConnectionFactory {
  private static String DRIVER = "oracle.jdbc.driver.OracleDriver";
  private static String URL = "jdbc:oracle:thin:@localhost:1521:XE";
  private static String USER = "briup";
  private static String PASSWORD = "briup";
  static{
     Properties p=new Properties();
      try {
      p.load(ConnectionFactory.class.getResourceAsStream("db.properties"));
      DRIVER=p.getProperty("DRIVER");
      URL=p.getProperty("URL");
      USER=p.getProperty("USER");
      PASSWORD=p.getProperty("PASSWORD");
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  public static Connection getConnection(){
    Connection conn=null;
    try {
      Class.forName(DRIVER);
      conn=DriverManager.getConnection(URL, USER, PASSWORD);
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return conn;
  }
  public static void close(Connection conn,Statement st,ResultSet rs)
  {
    try {
      if(rs!=null)rs.close();
      if(st!=null)st.close();
      if(conn!=null)conn.close();
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  public static void close(Connection conn,Statement st)
  {
    close(conn,st,null);
  }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值