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();