网站建设的基本步骤和过程沈阳做网站哪好

当前位置: 首页 > news >正文

网站建设的基本步骤和过程,沈阳做网站哪好,青岛关键词排名推广,品牌网站建设风格怎么确定连接池 连接池概念 ​ 概念#xff1a;其实就是一个容器(集合)#xff0c;存放数据库连接的容器。 当系统初始化好后#xff0c;容器被创建#xff0c;容器中会申请一些连接对象#xff0c;当用户来访问数据库时#xff0c;从容器中获取连接对象#xff0c;用户访问完…连接池 连接池概念 ​ 概念其实就是一个容器(集合)存放数据库连接的容器。 当系统初始化好后容器被创建容器中会申请一些连接对象当用户来访问数据库时从容器中获取连接对象用户访问完之后会将连接对象归还给容器。 缺点用户每次请求都需要向数据库获得链接而数据库创建连接通常需要消耗相对较大的资源创建时间也较长。假设网站一天10万访问量数据库服务器就需要创建10万次连接极大的浪费数据库的资源并且极易造成数据库服务器内存溢出。 连接池技术的核心思想是连接复用通过建立一个数据库连接池以及一套连接使用、分配、管理策略使得该连接池中的连接可以得到高效、安全的复用避免了数据库连接频繁建立、关闭的开销。 连接池好处 1. 节约资源 2. 减少连接db的次数 3. 用户访问高效连接池实现

  1. 标准接口DataSource javax.sql包下的
  2. 方法* 获取连接getConnection()* 归还连接Connection.close()。如果连接对象Connection是从连接池中获取的那么调用Connection.close()方法则不会再关闭连接了。而是归还连接。厂商实现 一般我们不去实现它有数据库厂商来实现DBCP 1. C3P0数据库连接池技术2. Druid数据库连接池实现技术由阿里巴巴提供的c3p0数据库连接池 实现步骤
  3. 导入jar包 c3p0-0.9.5.2.jar 新建web项目 C3p0Test 使用c3p0的连接池导入jar包 导入 mysql驱动包2. 定义配置文件 名称 c3p0.properties 或者 c3p0-config.xml
    路径直接将文件放在src目录下即可。3. 创建核心对象 数据库连接池对象 ComboPooledDataSource4. 获取连接 getConnection 代码 //1.创建数据库连接池对象 DataSource ds new ComboPooledDataSource(); //2. 获取连接对象 Connection conn ds.getConnection(); 工具类的抽取 package cn.yanqi.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.mchange.v2.c3p0.ComboPooledDataSource;// 你抽出的代码要有一定意义并且要有通用性任何一个关于这个工具类都 可以去使 public class JdbcUtils {//默认加载src 下面c3p0-config.xml加载private static ComboPooledDataSource ds new ComboPooledDataSource();//创建连接public static Connection getConnection() throws SQLException{return ds.getConnection();} }配置文件 c3p0-config.xml 注意一定放在src下 ?xml version1.0 encodingUTF-8? c3p0-config!– 我们希望在配置文件中出现链接的参数信息 –default-config!– name 属性定义 链接参数的key 标签的内容 代表值–property namedriverClasscom.mysql.jdbc.Driver/propertyproperty namejdbcUrljdbc:mysql:///day03/propertyproperty nameuserroot/propertyproperty namepasswordroot/property!– 连接池参数 –property nameinitialPoolSize5/propertyproperty namemaxPoolSize10/propertyproperty namecheckoutTimeout3000/property/default-config /c3p0-config测试 Test public void test1() throws SQLException {//封装的c3p0相关代码Connection conn JdbcUtil.getConnection();Statement stmt conn.createStatement();int i stmt.executeUpdate(delete from user where id 29);System.out.println(i);} Druid数据库连接池 Druid数据库连接池实现技术 德鲁伊由阿里巴巴提供的 实现步骤 一、步骤1. 导入jar包 druid-1.0.9.jar2. 定义配置文件是xx.properties形式的可以叫任意名称可以放在任意目录下, 一般都放在src3. 加载配置文件。Properties4. 获取数据库连接池对象通过工厂来来获取 DruidDataSourceFactory5. 获取连接getConnection代码实现//3.加载配置文件Properties pro new Properties();InputStream is DruidDemo.class.getClassLoader().getResourceAsStream(druid.properties);pro.load(is);//4.获取连接池对象DataSource ds DruidDataSourceFactory.createDataSource(pro);//5.获取连接Connection conn ds.getConnection(); 二、定义工具类1. 定义一个类 JDBCUtils2. 提供静态代码块加载配置文件初始化连接池对象3. 提供方法1. 获取连接方法通过数据库连接池获取连接2. 释放资源3. 获取连接池的方法配置文件 在src中创建 druid.properties driverClassNamecom.mysql.jdbc.Driverurljdbc:mysql:///db3usernamerootpasswordroot# 初始化连接数量initialSize5# 最大连接数maxActive10# 最大等待时间maxWait3000工具类的抽取 import java.io.IOException; import java.sql.ResultSet; import java.sql.SQLException; /*** Druid连接池的工具类/ public class JDBCUtils {//1.定义成员变量 DataSourceprivate static DataSource ds ;static{try {//1.加载配置文件Properties pro new Properties();pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream(druid.properties));//2.获取DataSourceds DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/** 获取连接/public static Connection getConnection() throws SQLException {return ds.getConnection();}/** 获取DataSource对象 用于jdbcTemplate获取*/public static DataSource getDataSource(){return ds;} }测试 public class DruidTest {Testpublic void test(){Connection conn DruidUtil.getConnection();try {Statement stmt conn.createStatement();int i stmt.executeUpdate(INSERT INTO test.t_user(id, username, passworld, age) VALUES (null, 江一燕, 520, 18));System.out.println(i);} catch (SQLException e) {e.printStackTrace();}} }JDBCTemplate模版 概述 Spring JDBC Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发后面我们专门讲spring框架 实现步骤
  4. 导入jar包 4 12. 创建JdbcTemplate对象。依赖于数据源DataSourceJdbcTemplate template new JdbcTemplate(ds);3. 调用JdbcTemplate的方法来完成CRUD的操作update():执行DML语句。增、删、改语句queryForMap():查询结果将结果集封装为map集合将列名作为key将值作为value 将这条记录封装为一个map集合注意这个方法查询的结果集长度只能是1queryForList():查询结果将结果集封装为list集合注意将每一条记录封装为一个Map集合再将Map集合装载到List集合中query():查询结果将结果封装为JavaBean对象query的参数RowMapper一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装new BeanPropertyRowMapper类型(类型.class)queryForObject查询结果将结果封装为对象一般用于聚合函数的查询快速入门 /*** JdbcTemplate入门*/ public class JdbcTemplateDemo1 {public static void main(String[] args) {//1.导入jar包//2.创建JDBCTemplate对象JdbcTemplate template new JdbcTemplate(JDBCUtils.getDataSource());//3.调用方法String sql update account set balance 5000 where id ?;int count template.update(sql, 3);//insert update delete System.out.println(count);//自已关闭自已归还} } CRUD的测试 代码实现 数据库准备 CREATE TABLE emp (id int(11) NOT NULL AUTO_INCREMENT,username varchar(25) DEFAULT NULL,job varchar(100) DEFAULT NULL,addr varchar(25) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;INSERT INTO test.emp(id, username, job, addr) VALUES (1, tom, 开发, 上海); INSERT INTO test.emp(id, username, job, addr) VALUES (2, mary, 测试, 郑州); 实体类 // 注意事项java属性名 要与 数据库的字段名保持一致不然无法封装 public class Emp {private Integer id;private String username;private String job;private String addr;//提供有参无对构造方法//提供get set 方法//提供toString方法 }测试类 public class Test1 {//获取数据源private DataSource dataSource JDBCUtil.getDataSource();//使用jdbcTemplate 技术简化jdbc操作private JdbcTemplate JdbcTemplate new JdbcTemplate(dataSource);//修改Testpublic void testUpdateById(){String sql update emp set job 财务 where id ? ;int i this.JdbcTemplate.update(sql, 2);System.out.println(i);}//添加Testpublic void testAdd(){String sql insert into emp (id , username , job ,addr) values(?,?,?,?);int i JdbcTemplate.update(sql, null, yiyan, 小秘, 郑州);System.out.println(i);}//删除Testpublic void testDeleteById(){String sql delete from emp where id ?;int i JdbcTemplate.update(sql, 1);System.out.println(i);}//查询数据返回listTestpublic void testQueryById(){String sql select * from emp where id ?;//返回的是listListEmp emps this.JdbcTemplate.query(sql, new BeanPropertyRowMapper(Emp.class), 2);for(Emp e : emps){System.out.println(e);}}//查询条数Testpublic void testForObject(){String sql select count(1) from emp;Long i this.JdbcTemplate.queryForObject(sql, Long.class);System.out.println(i);}//查询数据返回mapTestpublic void testQuery2(){String sql select * from emp where id ?;//返回mapMapString, Object map this.JdbcTemplate.queryForMap(sql,2);//map遍历SetString set map.keySet();for(String key : set){Object o map.get(key);System.out.println(key : o);}}/*** 查询数据返回对象中* 注意事项 返回的单个对象必须要有结果这个结果只能接受一条* */public Emp queryTest3(){Emp emp null;try {String sql select * from emp where id ?;//如果这里查到数据就直接返回return this.template.queryForObject(sql, new BeanPropertyRowMapper(Emp.class),9);} catch (DataAccessException e) {//没有查询到方式一// throw new RuntimeException(没有查询到数据);//没有查询到方式二return null;}}//测试 查询数据返回对象中public static void main(String[] args) {JdbcTemplateDemo jt new JdbcTemplateDemo();Emp emp jt.queryTest3();System.out.println(emp);}} (Emp.class),9); } catch (DataAccessException e) { //没有查询到方式一 // throw new RuntimeException(“没有查询到数据”); //没有查询到方式二 return null; } } //测试 查询数据返回对象中 public static void main(String[] args) { JdbcTemplateDemo jt new JdbcTemplateDemo(); Emp emp jt.queryTest3(); System.out.println(emp); } }