JDBC知识体系

1、JDBC
(1)JDBC简介
  - JDBC就是Java中连接数据库方式
  - 我们可以通过JDBC来执行SQL语句。
(2)获取数据库连接
  - java.sql.Connection 数据库连接
  - 我们队数据库的一切操作都是从获取Connection开始
  - 获取数据库连接的四个参数:
    ① 数据库的地址 url
      a)语法:jdbc:子协议:厂商内容
      b)MySQl的格式:jdbc:mysql://主机名:端口号/数据库名字
      c)例子:jdbc:mysql://localhost:3306/test
    ② 用户名 user 连接数据库使用的用户名
    ③ 密码 password 数据库的密码
    ④ 数据库驱动全类名 driverClass
  - 基本步骤:
    ① 导入数据库驱动的jar包:mysql-connector-java-5.1.37-bin.jar
    ② 准备四个参数
      - url
      - user
      - password
      - driverClass
    ③ 加载数据库驱动:Class.forName(driverClass)
    ④ 通过DriverManager来获取数据库连接

static Connection getConnection(String url, String user, String password)

      - 核心类:- java.sql.DriverManager: 数据库驱动的管理器,负责加载数据库的驱动获取数据库连接

      - 数据库连接: java.sql.Connection
         - static Connection getConnection(String url, String user, String password) 
         - getConnection方法用来通过url地址,用户名,密码等参数来获取数据库连接

    ⑤ 创建一个Statement对象,通过Statement对象来执行SQL语句
      - java.sql.Statement: SQL语句的执行器
      - boolean execute(String sql) :执行一条SQL语句,并返回一个布尔值,执行成功返回true,执行失败返回false。用的不多 
    ⑥ 执行查询的SQL语句,并返回一个结果集

      - ResultSet executeQuery(String sql) 
      - int executeUpdate(String sql):执行修改数据的SQL语句(增删改),并返回受影响的行数
      核心类:- java.sql.ResultSet: 查询到的数据的结果集,我们通过JDBC查询数据库获得的数据,都封装在ResultSet中
      - boolean next():控制光标向下移动一行,如果光标当前位置是afterLast则返回false,告诉你没数据了,就别读了。
      如果光标移动以后,没有在afterLast则返回true,可以读取数据。
    ResultSet方法:
      a) - 在ResultSet有很多getXxx(int),比如getString(),getInt(),getByte()。
       通过这些方法可以读取当前行的数据,它们需要一个int值作为参数,int指的是读取数据的列数,列数是从1开始的。
      b) - 在ResultSet中还有很多getXxx(String),它和上边的方法的作用一致,只不过它们需要的都是String类型的参数,参数代表的是当前的列名,
       比如:我们要获取id的值:getInt("id")
          要获取name的值:getString("name")
       注意:如果查询的SQL使用了别名,则列名以别名为准。

(3)数据的增删改
  //创建一个SQL执行器
  Statement stat = conn.createStatement();
  //创建一个SQL语句
  String sql = "INSERT INTO t_stu(`name` , age) VALUES('沙僧',28)";

  //执行SQL语句
  //executeUpdate用来执行一条修改SQL的语句
  //它需要一个String类型sql作为参数,并会返回一个int型的值,该值表示SQL语句执行以后影响到的行数
  int count = stat.executeUpdate(sql);

(4)数据的查询
  //创建Statement对象
  Statement stmt = conn.createStatement();
  //创建一个SQL语句
  String sql = "SELECT id, name sname, age FROM t_stu WHERE id=2";
  //执行查询
  ResultSet rs = stmt.executeQuery(sql);
  //控制光标下移一行
  //如果当前行有数据,则读取
  if(rs.next()){
    //获取id,name,age
    int id = rs.getInt("id");
    String name = rs.getString("sname");
    int age = rs.getInt("age");
    System.out.println(id+"--"+name+"--"+age);
  }
区别:查询操作和修改的主要不同的是,查询使用executeQuery(),
它会返回ResultSet结果集,我们需要对结果集进行读取。
  ① 当我们只需要读取一个数据时,用if。
当需要读取全部数据时,用while
  ② 代码的规范:
  - Connection、Statement、ResultSet,这些资源都是需要和数据建立连接的
这些资源我们并不是总需要使用,当我们不适用这些资源,需要将这些资源关闭。
  - 关闭资源顺序:从后往前关:
  先关 ResultSet
  再关 Statement
  最后关 Connection
  - 示例代码:

 1 //定义三个变量
 2 Connection conn = null;
 3 Statement stmt = null;
 4 ResultSet rs = null;
 5 try{
 6 
 7 }catch(Exception e){
 8     e.printStackTrace();
 9 }finally{
10     try {
11         if(rs!=null){
12             rs.close(); //关闭ResulSet
13         }
14         if(stmt != null){
15             stmt.close();
16         }
17         if(conn != null){
18             conn.close();
19         }
20     } catch (SQLException e) {
21       e.printStackTrace();
22     }
23 } 

(5)DAO(Data Access Object) 数据访问对象
在Java中使用DAO类,来去和数据库交互,而其他类不再需要编写JDBC相关的代码,而是直接调用DAO。
在实际上开发中,我们所有的JDBC相关的代码都应该写在DAO中,java.sql这个包下的内容不应该出现在DAO以外的地方。

1 t_user
2 CREATE TABLE t_user(
3   id INT PRIMARY KEY AUTO_INCREMENT,
4   username VARCHAR(100),
5   `password` VARCHAR(100),
6   email VARCHAR(100),
7   nickname VARCHAR(50)
8 )

创建UserDao(负责User对象和数据库相关的操作) 

  User getUserByUsername(String username) --> 根据用户查找用户

  int saveUser(User user); --> 将用户对象插入进数据库

  User getUserByUsernameAndPassword(String username , String password) --> 根据用户名和密码查找用户

posted @ 2017-08-22 10:07  bwlu---ed  阅读(155)  评论(0)    收藏  举报