0%

Java_JDBC学习

  JDBC是Java Database Connectivity(Java数据库连接)的简称,用Java语言规范客户端程序如何访问数据库的应用接口,提供了通过Java传输SQL操作给数据库的方法。

JDBC架构


  JDBC架构分为双层架构和三层架构。

JDBC双层架构

  双层架构就是通过Java API(JDBC)直接访问数据库。Java API或者应用直接访问数据源。

JDBC三层架构

  三层结构就是客户端(GUI),服务端(JDBC),数据库。

JDBC的基本步骤


  1. 建立数据库的驱动,安装驱动程序。

    Class.forName(driver);
    其中driver为驱动,就是使用Jdbc的要使用的驱动,一般为:driver = "com.mysql.cj.jdbc.Driver";(如果是使用mysql-connector-java-5.1之前的版
    本,则去掉cj即可,这个是使用8.0版本时必须要加入的。)
    
  2. 建立与数据库的连接,通知数据库要进行连接。

    Connection connection = DriverManager.getConnection(url, username, password);
    其中url为要连接的数据库的相关信息,一般为:url="jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
    username = '你要连接数据库索要使用的用户名'
    password = '你使用的用户的密码'
    
  3. 创建操作数据库的对象

    Statement stmt = connection.createStatement();
    或者
    PreparedStatement pstmt = connection.prepareStatement(sql);
    
  4. 使用数据库对象执行数据库的操作

    1. 使用修改数据库信息的操作(无返回数据)

      String sql="update user set LoginName='博哥' where Id=1";
      int row = stmt.executeUpdate(sql);	//row:代表数据库受到影响的函数,一般来说,增删改都会提示数据库受影响的行,一般可以用来判断是否操作成功。
      
    2. 使用查询已提取数据库信息的操作(含返回数据)

      String sql="select * from user";
      ResultSet rs = stmt.executeQuery(sql);
      List list=new ArrayList();
      查询的方法时executeQuery(),它接受一个ResultSet类型的结果,当读取数据库数据的时候,它有一个游标指针,指向数据库第一条记录,如果循环读取,每读一行指针就会下移一行数据,直到所有数据读取完毕。
      其中ResultSet类型的参数读取数据有两种方法。1.rs.get(索引)2.rs.get(数据库字段名)第一种就是所搜寻当前记录的第几条属性,1代表的就是搜到结果的第一个属性,以此类推。第二种就是直接输入字段名直接获得与之匹配的属性,数据库字段名不区分大小写。
      
  5. 关闭数据库的连接

    connection.close();//关闭之前创建的数据库对象
    

  其中的sql语句分为两种形式,不同类型的sql语句也会使用不同的数据库对象。

  1. 连接型

    连接型的sql使用Statement类型的数据库对象,直接将完整的sql语句传入Statement的executeUpdate()/executeQuery()方法中来完成操作。
    Statement stmt = conniction.createStatement();
    int row = stmt.executeUpdate(sql);
    或者
    Statement stmt = conniction.createStatement();
    ResultSet rs = stmt.executeQuery(sql);	
    
  2. 索引型

    索引型的sql使用PreparedStatement类型的数据库对象,将带有索引的sql语句传入connection的方法prepareStatement(sql)方法来完成操作。
    String sql = "seletc * from user where LoginName=? and LoginPwd=?"//其中的?代表的是之后要传入的值。
    PreparedStatement pstmt = connection.prepareStatement(sql);
    //将参数按照之前sql之中定义的顺序一一填入其中,第一个值为索引,就是?出现在sql语句中的第几个位置。第二个值为要传入该位置的确定的值。
    pstmt.setString(1,name);
    pstmt.setString(2,pwd);
    

  其中索引型要比连接型更加的安全,更加快捷。
连接型字段的弊端
可以直接通过上面图片显示的方法直接登录,即使数据库中没有用户的登录名为"‘or 1=1 or’"。