zoukankan      html  css  js  c++  java
  • JDBC各个类详解——实习日志7.11

    代码实现:

    复制代码
    //1.导入驱动jar包
    //2.注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //3.获取数据库连对象
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","password");
    //4.定义sql语句
    String sql = "update account set balance = 500 where id = 1";
    //5.获取执行sql语句的对象 Statement
    Statement stmt = conn.createStatement();
    //6.执行sql
    int count = stmt.executeUpdate(sql);
    //7.处理结果
    System.out.println(count);
    //8.释放结果
    stmt.close();
    conn.close();
    复制代码

    详解各个对象

    1. DriverManager:驱动管理对象

    功能:

    1.注册驱动:告诉程序该使用哪一个数据库驱动jar

    • static void registerDriver(Driver driver):注册与给定的驱动程序DriverManager
    写代码使用:Class.forName("com.mysql.jdbc.Driver");

    注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。

    2.获取数据库连接

    *方法:static Connection getConnection(String url, String user, String password)
    *参数:
      *url:指定连接的路径

    • 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
    • 例子:jdbc:mysql://localhost:3306/db3
    • 细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称

      *user:用户名
      *password:密码


    2. Connection:数据库连接对象

    功能:

    1.获取执行sql语句的对象

    Statement createStatement()
    PreParedStatement perpareStatement(String sql)

    2.管理事务:

    • 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
    • 提交事务:commit()
    • 回滚事务:rollback()

    3. Statement:执行sql的对象

    执行sql
    1.Boolean execute(String sql ):可以执行任意的sql (了解)
    2.int executeUpdate(String sql ):执行DML(insert,update,delete)语句、DDL(create,later,drop)语句

    • 返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败

    3.ResultSet executeQuery(String sql) :执行DQL(select)语句

    4. ResultSet:结果集对象,封装查询结果

    1.boolean next():游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
    2.getXxx(参数):获取数据

    • Xxx:代表数据类型 如:int getInt(),String getString()
    • 参数:
    1.int:代表列的编号,从1开始 如:getString(1)
    2.string:代表列名称。 如:getDouble("balance")

    注意:
    使用步骤:

    1. 游标向下移动一行
    2. 判断是否有数据
    3. 获取数据

     

    5. PreparedStatement:执行sql的对象

    1.SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题

    • 1.输入用户(随便),输入密码:a' or 'a' = 'a
    • 2.sql:select * from user where username = 'shhshdcainiao' and password = ' a' or 'a' = 'a '

    2.解决sql注入问题:使用PreparedStatement对象来解决
    3.预编译的SQL:参数使用   作为占位符
    4.步骤:

    • 1.导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
    • 2.注入驱动
    • 3.获取数据库连对象 Connection
    • 4.定义sql
    • 5.获取执行sql语句的对象 Statement
    • 6.执行sql ,接受返回结果
    • 7.处理结果
    • 8.释放资源

    5.注意:后期都会使用 PreparedStatement来完成增删改查的所有操作

    • 1.可以防止SQL注入
    • 2.效率更高

    JDBC控制事物

    1.事物:一个包含多个步骤的业务操作。如果这个业务操作被事物管理,则这多个步骤要么同时成功,要么同时失败
    2.操作

    • 1.开启事务
    • 2.提交事务:
    • 3.回滚事务:

    3.使用Connection对象来管理事务
    开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务

    • 在执行sql之前开启事务

    提交事务:commit()

    • 当所有sql的都执行完提交事务

    回滚事务:rollback()

    • 在catch中回滚事务

     

    抽取JDBC工具类:JDBCUtils

    目的:简化书写
    分析:

    • 1.注册驱动来抽取
    • 2.抽取一个方法获取连接对象

    需求:不想传递参数(麻烦),还得保证工具类的通用性。
    解决:配置文件

    jdbc.properties
    url =
    user = 
    password =
    • 3.抽取一个方法释放资源
  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/developing/p/11170287.html
Copyright © 2011-2022 走看看