博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC
阅读量:4321 次
发布时间:2019-06-06

本文共 4517 字,大约阅读时间需要 15 分钟。

1.JDBC  

 1)JDBC简介

        - JDBC就是Java中连接数据库方式

        - 我们可以通过JDBC来执行SQL语句。

        2)获取数据库连接

        - java.sql.Connection 数据库连接

        - 我们队数据库的一切操作都是从获取Connection开始
        - 获取数据库连接的四个参数:
            1.数据库的地址 url
                  语法:jdbc:子协议:厂商内容
                  MySQl的格式:jdbc:mysql://主机名:端口号/数据库名字
                  例子:jdbc:mysql://localhost:3306/test
            2.用户名 user 连接数据库使用的用户名
            3.密码 password 数据库的密码
            4.数据库驱动全类名 driverClass

         基本步骤:

            1.导入数据库驱动的jar包

                mysql-connector-java-5.1.37-bin.jar
            2.准备四个参数
                - url
                - user
                - password
                - driverClass
            3.加载数据库驱动
                Class.forName(driverClass)
            4.通过DriverManager来获取数据库连接    
                static Connection getConnection(String url, String user, String password)     

         核心类:

            - java.sql.DriverManager

                    - 数据库驱动的管理器,负责加载数据库的驱动获取数据库连接
            - static Connection getConnection(String url, String user, String password)  
            - getConnection方法用来通过url地址,用户名,密码等参数来获取数据库连接的
            - java.sql.Connection
            - 数据库连接
            - Statement createStatement()  
                    - 创建一个Statement对象,通过Statement对象来执行SQL语句
            - java.sql.Statement
            - SQL语句的执行器
                  - boolean execute(String sql)  
                          - 执行一条SQL语句,并返回一个布尔值,执行成功返回true,执行失败返回false。用的不多
                   - ResultSet executeQuery(String sql)  
                          - 执行查询的SQL语句,并返回一个结果集
                  - int executeUpdate(String sql)  
                          - 执行修改数据的SQL语句(增删改),并返回受影响的行数
                        
            - java.sql.ResultSet
                - 查询到的数据的结果集,我们通过JDBC查询数据库获得的数据,都封装在ResultSet中
                - boolean next()  
                    - 控制光标向下移动一行,如果光标当前位置是afterLast则返回false,告诉你没数据了,就别读了。
                        如果光标移动以后,没有在afterLast则返回true,可以读取数据。
                        
                - 在ResultSet有很多getXxx(int),比如getString(),getInt(),getByte()。
                    通过这些方法可以读取当前行的数据,它们需要一个int值作为参数,
                        int指的是读取数据的列数。
                    列数是从1开始的。
                    
                - 在ResultSet中还有很多getXxx(String),它和上边的方法的作用一致,
                    只不过它们需要的都是String类型的参数,参数代表的是当前的列名,
                        比如:我们要获取id的值
                            getInt("id")
                        要获取name的值
                            getString("name")
            注意:如果查询的SQL使用了别名,则列名以别名为准

 

 3)数据的增删改      

        a. 创建一个SQL执行器

          Statement stat = conn.createStatement();
        b. 创建一个SQL语句
          String sql = "INSERT INTO t_stu(`name` , age) VALUES('沙僧',28)";
        c. 执行SQL语句
        d. executeUpdate用来执行一条修改SQL的语句
        e. 它需要一个String类型sql作为参数,并会返回一个int型的值,该值表示SQL语句执行以后影响到的行数
          int count = stat.executeUpdate(sql);  

 4)数据的查询

       a. 创建Statement对象

          Statement stmt = conn.createStatement();
        b. 创建一个SQL语句
          String sql = "SELECT id, name sname, age FROM t_stu WHERE id=2";
        c. 执行查询
          ResultSet rs = stmt.executeQuery(sql);
        d. 控制光标下移一行
        e. 如果当前行有数据,则读取
     

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); }
View Code

        > 查询操作和修改的主要不同的是,查询使用executeQuery(),
            它会返回ResultSet结果集,我们需要对结果集进行读取。
            
        > 当我们只需要读取一个数据时,用if。
            当需要读取全部数据时,用while
            
        > 代码的规范:
            - Connection、Statement、ResultSet,这些资源都是需要和数据建立连接的
                这些资源我们并不是总需要使用,当我们不适用这些资源,需要将这些资源关闭。
            - 关闭资源顺序:
                从后往前关:
                    先关 ResultSet
                    在关 Statement
                    最后关 Connection
            - 示例代码:
            

//定义三个变量                Connection conn = null;                Statement stmt = null;                ResultSet rs = null;                                try{                                    }catch(Exception e){                    e.printStackTrace();                }finally{                                        if(rs!=null){                        //关闭ResulSet                        try {                            rs.close();                        } catch (SQLException e) {                            // TODO Auto-generated catch block                            e.printStackTrace();                        }                    }                                        if(stmt != null){                        try {                            stmt.close();                        } catch (SQLException e) {                            e.printStackTrace();                        }                    }                                        if(conn != null){                        try {                            conn.close();                        } catch (SQLException e) {                            e.printStackTrace();                        }                    }                                    }
View Code

DAO(Data Access Object) 数据访问对象:

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

CREATE TABLE t_user(            id INT PRIMARY KEY AUTO_INCREMENT,            username VARCHAR(100),            `password` VARCHAR(100),            email VARCHAR(100),            nickname VARCHAR(50)   )
View Code

       

    创建UserDao(负责User对象和数据库相关的操作)    
    
            User getUserByUsername(String username) --> 根据用户查找用户
        
            int saveUser(User user); --> 将用户对象插入进数据库
          
            User getUserByUsernameAndPassword(String username , String password) --> 根据用户名和密码查找用户
        
    登录:
        登录实际上就是这么一条SQL语句:
            SELECT * FROM t_user WHERE username='' AND password=''
        

转载于:https://www.cnblogs.com/bkyy/p/7846179.html

你可能感兴趣的文章
设计模式 - 简单工厂
查看>>
数组与指针杂记
查看>>
四色原理
查看>>
Codeforces Round#500 Div.2 翻车记
查看>>
再更新ww的mingw MinGW-full-20101119
查看>>
Benefit UVA - 11889
查看>>
全排列 最详细的解题报告
查看>>
c++ web服务器
查看>>
android机型排行榜(201509)
查看>>
eclipse + maven + scala+spark环境搭建
查看>>
jmeter中webdriver插件,进行自动化压测
查看>>
整站开发初始化
查看>>
洛谷P2900 [USACO08MAR]土地征用Land Acquisition(斜率优化)
查看>>
uoj#448. 【集训队作业2018】人类的本质(Min_25筛+拉格朗日插值)
查看>>
vim配置及插件安装管理(超级详细)
查看>>
楼市仅是阶段性回暖 去库存仍是明年楼市主基调
查看>>
UIImagePickerController
查看>>
怎样打开64位 Ubuntu 的32位支持功能?
查看>>
关于docker jenkins启动时失败的问题处理
查看>>
JavaScript 循环绑定之变量污染
查看>>