笔记-JavaWeb学习之旅5
CP30的演示
package cn.itcast.datasourcejdbc;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class C3P0Demo2 {
public static void main(String[] args){
//创建连接池对象,使用多态
//不指定配置文件的名称,会连接默认配置
DataSource ds = new ComboPooledDataSource();
//使用getConnection方法获取连接
try{
//归还连接对象演示
//文件默认配置了10个连接
for(int i = 0 ; i <10 ; i++){
Connection c = ds.getConnection();
//i<5个的话不会报错
//i<11的话会报异常 An attempt by a client to checkout a Connection has timed out.
System.out.println(i+""+c);
//现在归连接
if(i==5){
c.close();
//运行正常,并且控制台打印的对象有两个地址是一样的
}
}
}catch(SQLException e){
e.printStackTrace();
}
}
}
Druid
package cn.itcast.druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo1 {
public static void main(String[] args) throws Exception{
//druid包下的类DruidDataSourceFactory有个方法可以获取到连接池对象
// DruidDataSourceFactory需要Properties参数
//创建Properties对象
Properties p = new Properties();
//加载读取文件配置,需要一个参数字节输入流或字符输入流
//获取字节输入流参数,可以先获取字节码文件然后通过方法getClassLoader来获取ClassLoader对象
//通过ClassLoader对象来获取字节输入流
Class aClass=new DruidDemo1().getClass();
ClassLoader aClassClassLoader= aClass.getClassLoader();
InputStream aInputStream = aClassClassLoader.getResourceAsStream("druid.properties");
//有了字节输入流对应的资源,就可以让他加载了
//以上代码都可以通过一行代码来实现
//InputStream aInputStream = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties");
p.load(aInputStream);
//获得数据库连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(p);
//创建连接
Connection aConnection = ds.getConnection();
System.out.println(aConnection);
}
}
Druid工具类的创建
package cn.itcast.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtils {
//定义成员变量DataSource
private static DataSource ds;
static{
try {
//加载配置文件
Properties pro = new Properties();
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//获取连接池
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接方法
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
//释放资源方法
public static void close(Statement stmt, Connection conn){
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs,Statement stmt, Connection conn){
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();
}
}
}
//获取连接池方法
public static DataSource getDataSouce(){
return ds;
}
}
package cn.itcast.druid;
import cn.itcast.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DruidDemo2 {
public static void main(String[] args) {
Connection c =null;
PreparedStatement ps =null;
//使用Druid操作数据库
try {
//获取连接
c = JDBCUtils.getConnection();
//要执行sql语句,需要先创建sql语句,sql语句的参数使用?占位符
String sql = "INSERT INTO emp(id,ename,salary)VALUES(?,?,?)";
//要执行sql语句,需要创建prepareStatement对象
//prepareStatement对象可以通过Connection对象的方法来获取
ps = c.prepareStatement(sql);
//调用prepareStatement的方法给占位符赋值
ps.setInt(1,10015);
ps.setString(2,"李白");
ps.setDouble(3,15000.00);
//执行sql语句
int count = ps.executeUpdate();
System.out.println(count);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(ps,c);
}
}
}
package cn.itcast.jdbcTemplate;
import cn.itcast.utils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;
public class JDBCTemplateDemo {
public static void main(String[] args) {
//创建JDBCTemplate对象
//参数给予数据源,让他连接到数据库
JdbcTemplate jt = new JdbcTemplate(JDBCUtils.getDataSouce());
//定义sql语句
String sql = "UPDATE emp set salary = ? where id = ?";
//调用update方法,参数一个是sql语句,另一个给占位符赋值
//赋值与问好占位符一一对应
int count = jt.update(sql,20000.00,10015);
System.out.println(count);
}
}
Spring JDBC
Spring框架对JDBC的简单封装,提供了一个JDBCTemplate对象简化JDBC的开发
步骤:
- 导入jar包
- 创建jdbcTemplate对象。依赖于数据源DataSource
- 调用jdbcTemplate的方法来完成crud的操作
- update():执行DML语句,增删改语句
- queryForMap():查询结果将结果集封装为map集合
- queryForList();查询结果将结果集封装为list集合
- query():查询结果,将结果封装为JavaBeanduixang
- queryForObject:查询结果封装为对象
package cn.itcast.test;
import cn.itcast.utils.JDBCUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class Demo {
private JdbcTemplate jt = new JdbcTemplate(JDBCUtils.getDataSouce());
//单元测试,可以让方法独立执行
@Test
//修改1001号数据salary为15000
public void test1(){
//创建框架对象,参数传递数据源
//创建sql语句
String sql = "Update emp set salary = 15000 where id = ?";
//有了框架,不用创建prepareStatement对象也可以执行sql语句了
int count = jt.update(sql,1001);
System.out.println(count);
}
//添加一条记录
@Test
public void test2(){
String sql = "insert into emp(id,ename,salary) values (?,?,?)";
int count= jt.update(sql,1016,"郭靖",12000);
System.out.println(count);
}
//删除刚刚添加的记录
@Test
public void test(){
String sql = "delete from emp where id = ?";
int count = jt.update(sql,1016);
System.out.println(count);
}
//查询id为1001的记录,将其封装为Map集合
@Test
public void test4(){
String sql = "select * from emp where id = ?";
//查询的结果集长度只能是1,如果要查询两行的数据的话,会报错
Map<String,Object> map = jt.queryForMap(sql,1001);
System.out.println(map);
//{id=1001, ename=孙悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=15000.00, bonus=null, dept_id=20}
}
@Test
//查询所有记录,将其封装为List集合
public void test5(){
String sql = "select * from emp";
//queryForList方法会把每一天记录封装为map集合,然后再将map集合封装为List集合
List<Map<String,Object>> list = jt.queryForList(sql);
for(Map<String,Object> map : list){
System.out.println(map);
}
}
@Test
//查询所有记录,将其封装成Emp对象的list集合
public void test6(){
String sql = "select * from emp";
//query方法有两个参数,一个是sql语句,一个是RowMapper的实现类,一般我们使用它给我们提供的实现类,BeanPropertyRowMapper,这个实现类可以完成数据到JavaBean的自动封装
List<Emp> list = jt.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class));
for(Emp emp :list){
System.out.println(emp);
}
}
@Test
//查询总记录数
public void test7(){
String sql = "select count(id) from emp";
//第一个参数是sql,第二个参数是class类型,是一个将来要返回的Class类型
//将来要返回Long类型,那么参数就是Long.class
Long l = jt.queryForObject(sql,Long.class);
System.out.println(l);
}
}
Web概念概述
JavaWeb:使用Java语言开发基于互联网的项目
软件架构:
C/S:Client/Server 客户端/服务器端
在用户本地有一个客户端程序,在远程有一个服务器端程序
如QQ,迅雷....
优点:1.用户体验号
缺点:开发,安装,部署,维护麻烦
B/S:Browser/Server 浏览器/服务器端
只需要一个浏览器,用户通过不同的网址(URL),客户访问不同的服务器端程序
优点:1.开发,安装,部署,维护,简单
缺点:如果应用过大,用户体验可能会受影响
对硬件要求过高
B/S架构详解
资源分类:
1.静态资源:使用静态网页开发技术发布的资源,特点:所有用户访问,得到结果是一样的,比如,文本,图片,视频,HTML,CSS,JavaScript。如果用户请求的是静态资源,那么服务器会直接将静态资源放送给浏览器。浏览器中内置了静态资源的解析引擎,可以展示静态资源
2.动态资源:使用动态网页及时发布的资源,特点所有用户访问,得到的结果可能不一样,如:JSP/servlet,php,asp....。如果用户请求的是动态资源,那么服务器就会执行动态资源,转换为静态资源,在发送给浏览器
我们要学习动态资源你,就必须先学习静态资源
静态资源(三剑客):
HTML:用于搭建基础网页,展示网页的内容
CSS:用于美化页面,布局页面
JavaScript:控制页面的元素,让页面有一些动态的效果
HTML快速入门
语法:
- html文档后缀名.html 或者.htm
- 标签分为
- 围堵标签:有开始标签和结束标签如
- 自闭和标签:开始标签和结束标签在一起
- 标签可以嵌套:
- 在开始标签中可以定义属性。属性是由键值对构成,值需要用引号引起来
- html的标签不区分大小写,但是建议小写。
<html>
<head>
<title>title</title>
</head>
<body>
<font color='red'>Hello World</font><br/>
<font color='green'>Hello World</font>
</body>
</html>
3.标签学习
文件标签:构成html最基本的标签
- html:html文档的根标签
- head:头标签。用于指定html文档的一些属性。引入外部资源
- title:标题标签
- body:体标签
- (): html5中定义该文档是html文档
文本标签:和文本有关的标签
注释:
.
to
:标题标签
.
:段落标签
换行标签
展示水平线
;拥有属性可以改变水平线的样式color:颜色,width:宽度,size:高度,align:对齐方式(center:居中对齐,left:左对齐,right:右对齐)字体加粗:
字体斜体
字体标签有颜色(color),大小(size),字体样式的属性(face)
属性定义:
color
- 英文单词:red,green,blue
- rge(值1,值2 ,值3),值得范围0~255,如 rgb(0,0,255),表示红色绿色为0,蓝色为255
width:
- 数值:width='20',数值的单位,默认是px(像素)
- 数值%:占比相对于父元素的比列
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文本标签</title>
</head>
<body>
<!-- 注释 -->
<!-- br 换行-->
<!--h1~h6标题标签-->
云想衣裳花想容<br>
春风扶槛露华浓<br>
若非群玉山头见<br>
会向瑶台月下逢<br>
<!-- 段落标签 p-->
<p>
黄河远上白云间
<p/>
<p>
一片孤城万仞山
<p/>
<p>
羌笛何须怨杨柳
<p/>
<p>
春风不度玉门关
</p>
<!--hr显示一条水平线 是自闭和标签-->
<hr color = 'red'/>
<!--加粗b-->
春风不度玉门关<br>
<b>春风不度玉门关</b>
<!--斜体i-->
<i>羌笛何须怨杨柳</i>
<hr>
<!--字体font-->
<font color="red" size ="5" face="楷体">云想衣裳花想容</font><br>
</body>
</html>
- 图片标签:
- src:指定图片的位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图片标签</title>
</head>
<body>
<!--alt 代表找不到图片的话就用指定的文字代替-->
<img src="3.jpg" width="500" align="right" alt="图片挂了">
</body>
</html>
列表标签:
有序列表:ol , li代表每一项
无序列表ul ,li代表每一项
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <!--有序列表ol-->
早上起床干的事情
<ol>
<li>睁眼</li>
<li>看手机</li>
<li>洗衣服</li>
<li>洗漱</li>
</ol>
<!--有无列表ul-->
<ul>
<li>睁眼</li>
<li>看手机</li>
<li>洗衣服</li>
<li>洗漱</li>
</ul>
</body>
</html>
链接标签:
a:定义以超链接
属性:href:指定访问资源的URL(统一资源定位符)
target :指定打开资源的方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>链接标签</title>
</head>
<body>
<!--超链接a-->
<a href="https://www.cnblogs.com/train99999/">点击在本页面进入我的博客</a><br>
<!--点击在新的页面打开选项卡-->
<a href="https://www.cnblogs.com/train99999/" target="_blank">点击在新的选项卡中打开</a><br>
<!--访问本地的资源-->
<a href="3.jpg">点击加载本地图片</a><br>
<!--打开会打开本地邮箱-->
<a href="mailto:123456@train.com">点击联系我</a>
<!--点击图片加载链接-->
<a href="https://www.cnblogs.com/train99999/"><img src="3.jpg"></a>
</body>
</html>
div和span:
div:每一个div占满一整行,块级标签
span:文本信息在一行展示,行内标签,内联标签
语义化标签:html5中为了提高程序的可读性,提供了一些标签(header,footer)这些标签对页面没有任何的样式。
笔记-JavaWeb学习之旅5的更多相关文章
- 笔记-JavaWeb学习之旅7
JavaScript基础 概念:一门客户端脚本语言,运行在客户端浏览器中,每一个浏览器都有JavaScript的解析引擎,是一个脚本语言,不需要编译,直接就可以被浏览器解析执行. JavaScript ...
- 笔记-JavaWeb学习之旅19
Redis:redis是一款高性能的NOSQL系列的非关系型数据库 NOSQL: Not Only SQL ,意即"不仅仅是SQL",是一项全新的数据库理念,泛指非关系型数据库 r ...
- 笔记-JavaWeb学习之旅18
AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和XML 异步和同步:客户端和服务器端相互通信的基础上 同步:客户端操作后必须等待服务器端的响应, ...
- 笔记-JavaWeb学习之旅17
1.过滤选择器 首元素选择器:first 获得选择的元素中的第一个元素 尾元素选择器:last获得选择元素中的最后一个元素 非元素选择器:not(selector) 不包括指定内容的元素 偶数选择器: ...
- 笔记-JavaWeb学习之旅16
增强对象的功能 动态代理:在内存中形成代理类 实现步骤: 代理对象和真实对象实现相同的接口 代理对象 = Proxy.newProxyInstance(); 使用代理对象调用真实对象的方法 增强方法 ...
- 笔记-JavaWeb学习之旅15
Filter:过滤器 概念:当访问服务器的资源是,过滤器可以将请求拦截下来,完成一些特殊的功能 快速入门: 步骤: 定义一个类,实现接口Filter 复写方法 配置拦截路径 package com.d ...
- 笔记-JavaWeb学习之旅14
JSTL:JavaServer Pages Tag Library JSP标准标签库 if标签 <%@ page import="java.util.ArrayList" % ...
- 笔记-JavaWeb学习之旅10
Servlet server applet运行在服务器端的小程序,servlet就是一个接口,定义了Java类被浏览器访问到的规则(Java类重写这个接口,就可以被浏览器(tomcat)识别) Ser ...
- 笔记-JavaWeb学习之旅13
验证码案列 昨天晚上出现的500错误原因在于验证码没有获取到,获取验证码是应该获取的是共享域中的验证码,而我把获取值得键给写成了jsp中的键,而不是内存生成图片中,然后把图片上传到共享域中的键.这两个 ...
随机推荐
- LNK1112: module machine type 'x64' conflicts with target machine type 'X86'
1 什么是“module machine type” 这个是当前工程要链接的静态库的target machine type. 2 什么是“target machine type” 这个是当前工程生成的 ...
- Netty聊天器(实战一):从0开始实战100w级流量应用
Java 聊天程序(百万级流量实战一):系统介绍 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之14 [博客园 总入口 ] 源码IDEA工程获取链接:Java 聊天室 实战 源码 写在前面 ...
- spark 划分stage Wide vs Narrow Dependencies 窄依赖 宽依赖 解析 作业 job stage 阶段 RDD有向无环图拆分 任务 Task 网络传输和计算开销 任务集 taskset
每个job被划分为多个stage.划分stage的一个主要依据是当前计算因子的输入是否是确定的,如果是则将其分在同一个stage,从而避免多个stage之间的消息传递开销. http://spark. ...
- IE6 PNG图片不透明的解决方案-tinypng
https://tinypng.com/ 把图片上传上去,就能处理这个问题啦. 纠正一下 再也不用把png图片一个个拖到TinyPNG进行在线压缩(和熊猫哥哥说再见了):再不用把JPG/JPEG图片拖 ...
- SpringBoot-(7)-基于Web,JDBC,MySql,Druid,MyBatis整合创建SpringBoot项目
1 打开Spring Initializr 如果Project SDK为空,手动指定下JDK SDK路径 2, 填写Group和Artifact 3,选择依赖 选择Web,MySQL,JDBC,MyB ...
- [数据挖掘课程笔记]Naïve Bayesian Classifier
朴素贝叶斯模型 1) X:一条未被标记的数据 2) H:一个假设,如H=X属于Ci类 根据贝叶斯公式 把X表示为(x1,x2,....xn) x1,x2,....xn表示X在各个特征上的值. 假设有c ...
- spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】
最近做了一个spring boot 整合 quartz 实现 动态定时任务配置,在集群环境下运行的 任务.能够对定时任务,动态的进行增删改查,界面效果图如下: 1. 在项目中引入jar 2. 将需要 ...
- Python 的枚举类型
起步 Python 中的枚举类型 Python 的原生类型中并不包含枚举类型.为了提供更好的解决方案,Python 通过 PEP 435 在 3.4 版本中添加了 enum 标准库. 枚举类型可以看作 ...
- Python 参数校验的进化
Python 函数参数魔法 事情的起因是感觉目前项目中的参数校验方法写的太简单了,很多时候需要在server层再if else处理,于是就动手准备写一个好用一点的,可以自定义校验参数规则的参数校验器, ...
- Gym - 100676E —— 基础题
题目链接:https://odzkskevi.qnssl.com/1110bec98ca57b5ce6aec79b210d2849?v=1490453767 题解: 这种方法大概跟离散化扯上点关系:首 ...