A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cyahua 中级黑马   /  2018-5-21 14:52  /  447 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 cyahua 于 2018-5-21 14:54 编辑

JDBC 学习笔记
相关API
  • DiverManager

    • 注册驱动

      • static void registerDriver(Diver driver):一般不使用
      • Class.forName("驱动全名"):一般使用这种方式(右键-Copy Qualified Name可以复制类全名)

        • 在驱动类中存在一个静态代码块,在加载字节码文件时,会调用DriverManager的registerDriver()方法
          static {
              try {
                  DriverManager.registerDriver(new Driver());
              } catch (SQLException var1) {
                  throw new RuntimeException("Can't register driver!");
              }
          }
    • 获得连接

      • static Connection getConnection(String url, String user, String password)
      • url格式:数据库协议://IP地址:端口号/数据库(数据库可以不写);
        例子:jdbc:mysql://localhost:3306/web_test3

  • Connection

    • 创建执行SQL语句的对象

      • Statement createStatement():创建Statement对象,执行SQL语句(存在SQL注入漏洞)
      • CallaleStatement prepareCall(String sql):创建CallableStatement对象调用数据库存储过程
      • PreparedStatement prepareStatement(String sql):创建PreparedStatement对象将参数化的SQL语句发送到数据库(解决了SQL注入漏洞)

    • 管理事务

      • void setAutoCommit(boolean autoCommit):将此链接的自动提交模式设置为给定状态
      • void commit:提交,并释放此Connection对象当前持有的所有数据库锁
      • void rollback():回滚,并释放此Connection对象当前持有的所有数据库锁

  • Statement

    • 执行SQL语句

      • boolean execute(String sql)
      • esultSet executeQurey(String sql)
      • int excuteUpdate()

    • 批处理

      • void addBatch(String sql)
      • void excuteBatch()
      • void clearBatch()

  • ResultSet

    • boolean next()用于遍历结果集

      while(rs.next()){
          rs.getXXX(column);
      }
    • XXX getXXX(String column):获取相应记录的值
    • Object getObject(String column)

JDBC开发步骤
step1:注册驱动:Class.forName()
step2:获得连接:Connection conn = DriverManger.getConnection(url,username,password)
step3:编写SQL语句,String sql ="",值的地方用占位符?代替
step4:预编译sql并且获得可执行sql语句的对象PreparedStatement ps = conn.prepareStatemet(String sql)
step5:为sql语句设置值,用值代替sql语句中的?  ps.setXXX(int n,值) n:代表第几个问号的意思,从1开始
step6:执行sql语句
    如果是查询:ResutSet rs = ps.executeQuery();//获得结果集
    如果是增删改:int num = ps.executeUpdate() ;// num 代表影响的行数
step7:释放资源属性Properties
  • Properties对象的使用

Properties prop = new Properties();
prop.load(new FileInputeStream(String path或File对象));
prop.getProperty(String key);
  • 注:

    • .properties文件的编码格式为ISO-8859-1,内容不能有中文;如果想把值设置成中文,需要写成\uXXXX形式
    • 包含了程序解耦和的思想;

批处理
String sql = "insert into user values (null,?)";
// 预编译SQL:
pstmt = conn.prepareStatement(sql);
for(int i=1;i<=10000;i++){
    pstmt.setString(1, "name"+i);
    // 添加到批处理
    pstmt.addBatch();//注意内存溢出
    if(i % 1000 == 0){
        // 执行批处理:
        pstmt.executeBatch();
        // 清空批处理:
        pstmt.clearBatch();
    }
}事务
  • 开启事务:setAutoCommit(false)
  • 提交:commit()
  • 回滚:rollback()
  • 核心思想:事务管理要使用同一个connection对象

连接池
  • 使用连接池的原因:提升性能,从内存中获取和归还的效率要远远高于创建和销毁的效率

增强类中方法的方式
java的23种设计模式
  • 采用继承

    • 最简单,但有使用条件:必须能控制这个类的构造

  • 装饰者模式
  • 动态代理

DBUtils
  • QueryRunner

    • 构造方法:

      • QueryRunner()
      • QueryRunner(DataSource ds)

    • 方法:

      • int update(String sql. Object...parsms)
      • int update(Connection conn, String sql, Object... params)
      • query(String sql, ResultSetHandler<T> rsh, Object... params)
      • query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

工具类编写原则:把相同或相似的代码抽取出来
  • ResultHandler
  • ResultHandler实现类

    • ArrayHandler
    • ArrayListHandler
    • BeanHandler
    • BeanListHandler
      如果表字段与实体类属性名称不同,可以利用别名
      决定属性封装能否成功的是get和set方法的名称,而不是属性名称
      实体类一定要有一个无参构造方法
    • MapHandler
    • MapListHandler
    • ColumnListHandler
    • SaclaHandler

      • select count(XXX) from table返回的是一个long值

    • keyedhandler



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马