- java类的加载机制
wait - 适配器模式
wait
wait - collection底层
wait
wait - java并发包
wait
newFixedThreadPool
newCachedThreadPool
newScheduledThreadPool
newSingleThreadExecutor
wait - 反射
wait
wait - jdbc
wait
a.加载jdbc驱动程序
Class.forName("com.mysql.jdbc.Driver")
b.建立连接
Connection connection =
(Connection) DriverManager.getConnection("jdbc:mysql://127.0.0.1/automan", "root", "1");
c.创建一个Statement
①、执行静态SQL语句。通常通过Statement实例实现。
执行动态SQL语句。通常通过PreparedStatement实例实现。
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’);
相同操作但因为数据内容不一样,所以整个个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.这样每执行一次都要对传入的语句编译一次.
当然并不是所以预编译语句都一定会被缓存,数据库本身会用一种策略,比如使用频度等因素来决定什么时候不再缓存已有的预编译结果.以保存有更多的空间存储新的预编译语句.
②.preparestatement是预编译,所以可以防止sql注入
③.可读性preparestatement更高一些
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;
d.执行sql语句
executeQuery 、executeUpdate 和execute
①、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句
,返回一个结果集(ResultSet)对象。
②、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
③、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
int rows = stmt.executeUpdate("INSERT INTO ...") ;
boolean flag = stmt.execute(String sql) ;
e.处理结果
while(rs.next()){
String name = rs.getString("name") ;
String pass = rs.getString(1) ; // 此方法比较高效
}
(列是从左到右编号的,并且从列1开始)
f.关闭JDBC对象
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() ;
}
}
wait - servlet和jsp的区别
wait
Servlet是Java提供的用于开发Web服务器应用程序的一个组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容。Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。
使用Servlet产生动态网页,需要在代码中打印输出很多HTML的标签,此外,在Servlet中,我们不得不将静态现实的内容和动态产生内容的代码混合在一起。使用Servlet开发动态网页,程序员和网页编辑人员将无法一起工作,因为网页编辑人员不了解Java语言,无法修改Servlet代码,而Java程序员可能也不是很了解网页编辑人员的意图,以至于无法修改和实现网页功能。为了解决这些问题,Sun公司就推出了JSP技术。
JSP通过在标准的HTML页面中插入Java代码,其静态的部分无须Java程序控制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用Java脚本控制。
事实上,JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例——JSP页面由系统编译成Servlet,Servlet再负责响应用户请求。JSP其实也是Servlet的一种简化,使用JSP时,其实还是使用Servlet,因为Web应用中的每个JSP页面都会由Servlet容器生成对应的Servlet。对于Tomcat而言,JSP页面生成的Servlet放在work路径对应的Web应用下。
JSP文件必须在JSP服务器内运行。JSP文件必须生成Servlet才能执行。每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet。JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。index.jsp页面中的每个字符都由index.java文件的输出流生成.
servlet是在web服务器上的java程序,它提供服务,由它来传递给你html的格式。Servlet API为Servlet提供了统一的编程接口
Servlet必须部署在Servlet容器,才能响应客户端的请求 对外提供服务。要对外统一接口,由容器来调用。
jsp侧重显示;servlet侧重控制逻辑。
wait - MVC
wait
wait - 实现一个springmvc的思路
wait
wait - springmvc的事务
wait
wait - 堆,栈,常量区
wait
wait - java值传递和引用传递
wait
wait - where和having
wait
having和where都是用来筛选
分组筛选用having
普通筛选用where
where里面不能用聚合函数
wait mysql聚集索引和非聚集索引
wait
两者的根本区别是表记录的排列顺序和与索引的排列顺序是否一致
a.聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。
b.聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。
c.聚集索引查询数据速度快,插入数据速度慢;非聚集索引反之。
聚集 索引和非聚集索引都可以建立在重复列上。
建立主键是,默认是聚集索引
聚集索引插入慢,查询快,非聚集索引相反
wait
js增加一个元素
var newNode = document.createElement("div");
newNode.innerHTML = " This is a newcon ";
oTest.appendChild(newNode);
oTeset.insertBefore(newNode,null);
16. http请求的种类
wait
17. equals()和hashcode()
wait
18. JS提交表单
<input type='submit' value='submit'
document.getElementByIdx_x("myForm").submit();