Java Web开发之JDBC

 

JDBC的定义:

JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组Java语言编写的类和接口组成。

 

JDBC的架构方式:

 

 

:

 

结构:
 DriverManager (是一工厂实现类,用了工厂方法模式)
    |
 Dirver  (是驱动程序对象的接口,指向具体数据库驱动程序对象=DriverManager.getDriver(String URL))
    |
 Connection (是连接对象接口,指向具体数据库连接对象=Drivermanager.getConnection(String URL))
    |
 Statement (执行静态SQL语句接口,=Connection.CreateStatement())
    |
 ResultSet  (是指向结果集对象的接口,=Statement.excuteXXX())

 

JDBC的工作原理:(反射机制)

 1.装载驱动程序(实例化是自动向DriverManager注册(DriverManager.registerDriver()))

Class.forName(driver) 
  Class.forName(driver).newInstance()
    new driver()

2. 取得数据库连接 

//有两种方式
  //1.第一种:用DriverManager取数据库连接
     Connection con = DriverManager.getConnection(url,uid,pwd);
 
 //2.第二种:用jndi(java的命名和目录服务)方式
    Context ctx = (Context)new InitialContext().lookup("java:comp/env");  
     DataSource ds = (DataSource)ctx.lookup(jndi);
       Connection cn =  ds.getConnection();

3.执行SQL语句:

//有2种方式

//第1种:用Statement执行sql语句(主要是不带参的)
     Statement sm = cn.createStatement();
               sm.executeQuery(sql);  //执行数据查询语句
               sm.executeUpdate(sql);  //执行数据更新语句

//第2种:用PreparedStatement来执行sql语句(主要是带参的)
       String sql = "insert into Employer(id,name) value(?,?)";
                PreparedStatement ps =  cn.PreparedStatement(sql);
                    ps.setInt(1,xxx);
                    ps.setString(2,xxx);

                        .....
              ResultSet rs =    ps.executeQuery();   //查询
                int c=          ps.executeUpdate();   //更新
  
   //用PreparedStatement来执行sql语句(批量更新或删除sql)
   PreparedStatement pstmt =  cn.PreparedStatement("UPDATE EMPLOYEES SET SALARY=? WHERE ID =?");
      for(int i = 0; i<length;i++){
          pstmt.setBigDecimal(1,patam1[i]);
          pstmt.setInt(2,param2[i]);
          pstmt.addBatch();
}
   pstmt.executeBatch();
 

4.事务的处理(JDBC的事务处理简单,在执行多条更新语句后,加cn.commit()或cn.rollback()就可以)

//提交
cn.commit();
//如果发生异常,则回滚
cn.rollback();

5.处理执行结果:

 查询语句:返回结果集ResultSet

更新语句:返回数字,表示该更新影响的记录数(0,表示未更新,1表示更新失败)

ResultSet的方法:while(re.next())

        next():将游标往后移动一行,如果成功返回true,如果失败返回false

       getInt("id")或getString("name"),返回当前游标下某个字段的值

6.关闭数据库连接:

rs.close();
ps.close();
cn.close();

注:

  1. 如果SQL中包含了未知的参数可以用占位符问号“?”进行替代,然后只需要传递参数即可,另外,使用占位符可以很好地避免SQL注入的攻击。
  2. 增加、删除、查询和修改操作是DAO需要做的最基本的4项操作。(查询一般需要提供遍历查询和id查询,对于遍历查询,DAO需要提供User泛型的List对象,对于id查询则提供已经装配好数据的User对象。至于增加和修改操作,上层一般会提供一个User对象,DAO把User对象中的数据使用INSERT语句插入表格中。删除操作则只需要提供一个id即可。)

JDBC的优点:

  1. 操作便捷
  2. 可移植性强
  3. 通用性好
  4. 面向对象

 

JDBC的缺点:

1.访问数据记录的速度受到一定程度的影响

2.更改数据源困难。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值