Java DataBase Connectivity(JDBC)& Java数据库连接&笔记总结

1.JDBC简介

Java DataBase Connectivity  Java数据库连接
我们学习的技术是JDBC  不是 MYSQLJDBC  也不是 ORACLE JDBC
JDBC是一套标准,是Java与各大数据库厂商共同定制的一套接口. 这套接口由各大数据库厂商进行了实现.

注意:使用JDBC需要加载对应数据库的jar文件(mysql)

2.JDBC发展历史

自从Java语言于1995年5月正式公布以来,Java风靡全球。
    
    出现大量的用java语言编写的程序,其中也包括数据库应用程序。由于没有一个Java语言的数据库操
作API,编程人员不得不在Java程序中加入C语言的ODBC函数调用。这就使很多Java的优秀特性无法充分
发挥,比如平台无关性、面向对象特性等。
    
    随着越来越多的编程人员对Java语言的日益喜爱,越来越多的公司在Java程序开发上投入的精力日益
增加,对java语言接口的访问数据库的API的要求越来越强烈。也由于ODBC的有其不足之处,比如它并不
容易使用,没有面向对象的特性等等,SUN公司决定开发一Java语言为接口的数据库应用程序开发接口。
    
    在JDK1.x版本中,JDBC只是一个可选部件,到了JDK1.1公布时,SQL类包(也就是JDBCAPI)就成为
Java语言的标准部件。

3.使用步骤*

1.  引入jar文件.
2.  加载数据库驱动 (JavaSE项目中可以省略 , JavaWeb项目必须编写此步骤)
    Class.forName("com.mysql.jdbc.Driver");
3.  通过驱动管理器, 获取JDBC连接对象.
    Connection conn = DriverManager.getConnection("数据库连接地址","帐号","密码");
    //  数据库连接地址格式:  主协议:子协议://ip地址:端口号/数据库名称
    //  mysql的连接地址: jdbc:mysql://localhost:3306/java35
    //  oracle的连接地址: jdbc:oracle:thin:@localhost:1521:ORCL
4.  通过连接对象, 创建SQL执行对象 (SQL执行环境)
    Statement state = conn.createStatement();
5.  通过SQL执行对象 ,执行SQL语句.
    state.execute(String sql语句);
6.  释放资源
	 state.close();
	 conn.close();

4.JDBC中常用的类型与方法

1.  DriverManager   :   驱动管理器
        常用方法:
         -   获取数据库连接:
         static Connection getConnection(String 数据库地址,String 账号 ,String 密
码)
2.  Connection  :   数据库连接对象
        常用方法:
          -   创建SQL执行对象:  Statement createStatement();
3.  Statement   :   SQL执行对象
        常用方法:
            -   执行SQL语句(查询语句返回true, 其它语句返回false)
                    boolean execute(String sql);
            -   执行DML语句(INSERT UPDATE DELETE) 和 DDL语句(create alter drop) 
                    (返回int值, 表示语句对数据库表格的影响行数 !)
                    (通常我们认为 返回值>0 表示执行成功.)
                    int executeUpdate(String sql);
            -   执行DQL语句 (select) 
                    ResultSet executeQuery(String sql);
4.  ResultSet   :   结果集对象 (指的是一个select语句的查询结果)
        常用方法:
            1.  控制游标移动的常用方法:
                    -   boolean next()  ****
                            作用: 控制游标向下一行移动.
                            返回值:    移动成功返回true , 下一行不存在移动失败, 返回false
                    -   boolean privious() 了解
                            作用: 控制游标向上一行移动.
                            返回值:    移动成功返回true , 上一行不存在移动失败, 返回false
                    -   boolean absolute(int 行号) 了解
                            作用: 控制游标向指定行移动
                            返回值:    移动成功返回true , 行不存在移动失败, 返回false
                    -   boolean beforeFirst()   了解
                            作用: 控制游标移动到第一行
                            返回值: 移动成功返回true, 没有第一行数据返回false
                    -   boolean afterLast() 了解
                            作用: 控制游标移动到最后一行
                            返回值: 移动成功返回true, 没有最后一行数据返回false
            2.  获取游标指向行的字段值的常用方法:
                    -   XXX getXXX(String 列名) ***
                    		根据字段名, 得到此字段的值
                    -   XXX getXXX(int 字段的索引) *
                            根据字段的索引, 得到字段的值 , 索引从1开始

4.1.数据库连接基础操作

package com.java.demo;

import java.sql.*;

public class Demo1 {
   
    public static void createTable() throws ClassNotFoundException, SQLException {
   
        //1.    加载数据库驱动 (可以省略的.  在JavaEE的web项目中,jar包不可以省略.)
        //      mysql6以下驱动:com.mysql.jdbc.Driver
        //      mysql6和6以上驱动:com.mysql.cj.jdbc.Driver
        Class.forName("com.mysql.jdbc.Driver");
        //2.    通过驱动管理器, 获取JDBC的连接对象
        //      连接地址格式:
        //           主协议:子协议://ip地址:端口号/数据库名称
        //           mysql:     jdbc:mysql://localhost:3306/test
        //           oracle:    jdbc:oracle:thin:@ip地址:1521/ORCL
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123");
        //3.    通过连接对象,创建SQL执行对象 (SQL执行环境)
        Statement state = conn.createStatement();
        //4.    通过SQL执行对象 执行SQL
        state.execute("create table person(id int,nickname varchar(32))");
        //5.    释放连接
        state.close();
        conn.close();
    }

    public static void insertData() throws Exception {
   
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8", "root", "123");
        Statement state = conn.createStatement();
        state.execute("insert into person values(1,'张三')");
        state.close();
        conn.close();
    }

    public static void insertPerson() throws Exception {
   
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8", "root", "123");
        Statement state = conn.createStatement();
        int flag = state.executeUpdate("insert into person values(1,'张三'),(2,'李四'),(3,'王二麻子')");
        state.close();
        conn.close();
        System.out.println("返回:"+flag);
    }

    public static void deletePerson() throws Exception {
   
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8", "root", "123");
        Statement state = conn.createStatement();
        int flag = state.executeUpdate("delete from person where id=1");
        state.close();
        conn.close();
        System.out.println("返回:"+flag);
    }

    public static void updatePerson() throws Exception {
   
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8", "root", "123");
        Statement state = conn.createStatement();
        int flag = state.executeUpdate("update person set nickname='haha' where id=2");
        state.close();
        conn.close();
        System.out.println("返回:"+flag);
    }

    public static void selectPerson() throws Exception {
   
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8", "root", "123");
        Statement state = conn.createStatement();
        ResultSet rs = state.executeQuery("select * from person");
        while(rs.next()){
   
            int id = rs.getInt("id");
            String nickname = rs.getString("nickname");
            System.out.println("id="+id+"\tnickname="+nickname);
        }
        rs.close();
        state.close();
        conn.close();
    }
}

5.工厂方法设计模式 ( 静态工厂方法模式 )

工厂方法模式一种创建对象的模式.
工厂方法模式基于"输入",应用在超类和多个子类之间的情况,这种模式将创建对象的责任转移到工厂类;
工厂设计模式的优点:
    1.  面向接口编程,体现了面向对象的思想
    2.  降低了耦合, 将创建对象的工作转移到了工厂类

代码案例:
1. 水果接口

public interface Fruit {
   
    void eat();
}
2.  苹果 (水果的一种)
public class Apple implements Fruit{
   
    @Override
    public void eat() {
   
        System.out.println("苹果吃起来甜甜的脆脆的.");
    }
}
3.  香蕉 (水果的一种)
public class Banana implements Fruit{
   
    @Override
    public void eat() {
   
        System.out.println("香蕉吃起来软软的甜甜的");
    }
}
4.  静态工厂类
   public class FruitFactory {
   
       public static Fruit get(){
   
           //return new Apple();
           return new Banana();
       }
    }

5.1.简单工厂设计模式

public class Demo {
   
    public static void main(String[] args) {
   
        Fruit f = FruitFactory.get();
        f.eat();
    }
}

6.DAO


DAO(Data Access Object)是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务
逻辑与数据库资源中间。
为了建立一个健壮的Java应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。用程序设计的
语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,
当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个
特定的数据存储。
DAO模式是标准的JavaEE设计模式之一.开发人员使用这个模式把底层的数据访问操作和上层的商务逻辑分
开.一个典型的DAO实现有下列几个组件:
    1. 一个DAO工厂类;
    2. 一个DAO接口;
    3. 至少一个实现DAO接口的具体类;
    4. 数据传递对象(有些时候叫做Bean对象).

6.1.工厂与DAO结合案例

用户类

package com.java.demo3;

import java.util.Objects;

public class User {
   
    private String username;
    private String password;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值