题目

本文详细介绍了Java中JDBC的基本使用流程,包括加载驱动、建立连接、执行SQL语句及结果处理等内容。同时对比了Statement与PreparedStatement的区别,重点强调了PreparedStatement在性能优化方面的优势,特别是预编译和防止SQL注入的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java类的加载机制

适配器模式

collection底层

java并发包

反射

jdbc

1.加载jdbc驱动程序

Class.forName("com.mysql.jdbc.Driver")

2.建立连接

Connection connection =  (Connection) DriverManager.getConnection("jdbc:mysql://127.0.0.1/automan", "root", "1");

3.创建一个Statement

      a、执行静态SQL语句。通常通过Statement实例实现。   
      b、执行动态SQL语句。通常通过PreparedStatement实例实现。   
      c、执行数据库存储过程。通常通过CallableStatement实例实现。
      PreparedStatement有预编译的功能,已经绑定sql,之后无论执行多少次,都不会再进行编译
      statement执行多少遍就要编译多少次sql,所以preparestatement比statement效率高
      每一种数据库都会尽最大努力对预编译语句提供最大的性能优化.因为预编译语句有可能被重复调用.所以语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行.这并不是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配.那么在任何时候就可以不需要再次编译而可以直接执行.而statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配.比如: 
      insert into tb_name (col1,col2) values ('11','22');
      insert into tb_name (col1,col2) values ('11','23'); 
      相同操作但因为数据内容不一样,所以整个个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.这样每执行一次都要对传入的语句编译一次. 
      当然并不是所以预编译语句都一定会被缓存,数据库本身会用一种策略,比如使用频度等因素来决定什么时候不再缓存已有的预编译结果.以保存有更多的空间存储新的预编译语句. 
      b.preparestatement是预编译,所以可以防止sql注入
      c.可读性preparestatement更高一些
```
 Statement stmt = con.createStatement() ;   
 PreparedStatement pstmt = con.prepareStatement(sql) ;   
 CallableStatement cstmt =                    con.prepareCall("{CALL demoSp(? , ?)}") ; 
```

4.执行sql语句

    executeQuery 、executeUpdate  和execute   
    a、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句   
        ,返回一个结果集(ResultSet)对象。   
    b、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或   
        DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等   
    c、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的   
        语句。   
        ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   
        int rows = stmt.executeUpdate("INSERT INTO ...") ;   
        boolean flag = stmt.execute(String sql) ;   

5.处理结果

        while(rs.next()){   
            String name = rs.getString("name") ;   
            String pass = rs.getString(1) ; // 此方法比较高效   
        }   
        (列是从左到右编号的,并且从列1开始)  

6.关闭JDBC对象

     a、关闭记录集   
     b、关闭声明   
     c、关闭连接对象   
          if(rs != null){   // 关闭记录集   
            try{   
                rs.close() ;   
            }catch(SQLException e){   
                e.printStackTrace() ;   
            }   
          }   
          if(stmt != null){   // 关闭声明   
            try{   
                stmt.close() ;   
            }catch(SQLException e){   
                e.printStackTrace() ;   
            }   
          }   
          if(conn != null){  // 关闭连接对象   
             try{   
                conn.close() ;   
             }catch(SQLException e){   
                e.printStackTrace() ;   
             }   
          }  

servlet和jsp的区别

MVC

实现一个springmvc的思路

springmvc的事务

堆,栈,常量区

java值传递和引用传递

where和having

having和where都是用来筛选
分组筛选用having
普通筛选用where
where里面不能用聚合函数

mysql聚集索引和非聚集索引

     两者的根本区别是表记录的排列顺序和与索引的排列顺序是否一致  
     >1.聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

2.聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。
3.聚集索引查询数据速度快,插入数据速度慢;非聚集索引反之。
聚集 索引和非聚集索引都可以建立在重复列上。
建立主键是,默认是聚集索引
聚集索引插入慢,查询快,非聚集索引相反

js增加一个元素

     var newNode = document.createElement("div"); 
    newNode.innerHTML = " This is a newcon "; 
    oTest.appendChild(newNode); 
    oTeset.insertBefore(newNode,null);

http请求的种类

equals()和hashcode()

JS提交表单

<input type='submit' value='submit'
document.getElementByIdx_x("myForm").submit();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值