学习Javaweb第十三天


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、数据库连接池

在JDBC编程中,每次创建和断开Connection对象都会消耗一定的时间和IO资源。这是因为在Java程序与数据库之间建立连接时,数据库端要验证用户名和密码,并且要为这个连接分配资源,Java程序则要把代表连接的java.sql.Connection对象等加载到内存中,所以建立数据库连接的开销很大,尤其是在大量的并发访问时。假如某网站一天的访问量是10万,那么,该网站的服务器就需要创建、断开连接10万次,频繁地创建、断开数据库连接势必会影响数据库的访问效率,甚至导致数据库崩溃。为了避免频繁地建数据库连接,数据库连接池技术应运而生。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立。接下来,通过一张图来简单描述应用程序如何通过连接池连接数据库,如下图所示。

在这里插入图片描述

二、C3P0数据源

package dao;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
/**
 * Created by lc on 2018/8/12.
 */
public class C3p0Utils {
   public static DataSource ds=null;
    //初始化C3P0数据源
    static {
        ComboPooledDataSource cpds=new ComboPooledDataSource();
        //设置连接数据库需要的配置信息
        try {
            cpds.setDriverClass("com.mysql.jdbc.Driver");
            cpds.setJdbcUrl("jdbc:mysql://localhost:3306/shop");
            cpds.setUser("root");
            cpds.setPassword("root");
            //设置连接池的参数
            cpds.setInitialPoolSize(5);//初始连接数目
            cpds.setMaxPoolSize(15);//最大连接数目
            ds=cpds;
        }catch (Exception e){
            throw new ExceptionInInitializerError(e);
        }
    }
    //返回数据源
    public  static DataSource getDataSource(){
        return ds;
    }
}

三、DBUtils工具

代码如下(示例):

package dao;
import javabeen.User;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import java.sql.*;
public class Userdao {
    public boolean Vfpassword(User user) throws SQLException{
        //创建QueryRunner对象,并从C3P0连接池获取数据源
        QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource());
        //写SQL语句
        String sql="SELECT  * FROM user WHERE username=? AND password=?";
        //调用方法
        User user1 = (User) runner.query(sql,new BeanHandler(User.class), new Object[]{user.getUsername(),user.getPassword()});
        if (user1!=null){
            return true;
        }
        else {
            return false;
        }
    }
    public boolean register(User user) throws SQLException{
        QueryRunner runner=new QueryRunner(C3p0Utils.getDataSource());
        String sql="INSERT INTO user VALUES (?,?,?)";
        int i=runner.update(sql, new Object[]{user.getUsername(), user.getPassword(), user.getTel()});
        System.out.println(i);
            if (i>0){
                System.out.println(user.getUsername()+"注册成功!");
                return true;
            }
      else{
                System.out.println("注册失败!");
                return false;
            }
 
    }
}

作用:对JDBC的简单封装,简化JDBC代码
DBUtils的Jar包:commons-dbutils-1.4.jar
核心类:QueryRunner、ResultSetHandler

1.QueryRunner

1.三个主要方法:
update():执行insert、update、delete
query():执行select语句
batch():执行批处理
2.增删改操作QueryRunner、update

	public void fun1() throws SQLException {
		QueryRunner qr = new QueryRunner();
		/*
		QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
		qr.update(sql,params);
		*/
		String sql = "insert into user values(?,?,?)";//insert、update、delete
		qr.update(JdbcUtils.getConnection(), sql, "u1", "zhangSan", "123");//可以控制事务
	}

2.ResultSetHandler

DBUtils提供了一个接口ResultSetHandler,它就是用来ResultSet转换成目标类型的工具
可以把ResultSet的数据放到一个List中,也可能想把数据放到一个Map中,或是一个Bean中
1.查询操作QueryRunner、query、BeanHandler(结果集处理器,实现了ResultSetHandler;把rs中的数据封装到指定类型的javabean中,,返回javabean)

	QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());
	String sql = "select * from t_stu where sid=''";
	Object[] params = {1001};
	// 把结果集转换成Bean(单行)
	Stu stu = qr.query(sql, new BeanHandler<Stu>(Stu.class),params);
	// 把结果集转换成Bean的List(多行,每行对应一个Stu)
	List<Stu> list = qr.query(sql, new BeanListHandler<Stu>(Stu.class));	
	// 把结果集转换成Map(单行)
	Map<String,Object> map = qr.query(sql, new MapHandler());
	// 把结果集转换成List<Map>(多行,每行对应一个map)
	List<Map<String,Object>> list = qr.query(sql, new MapListHandler() );
	// 把结果集转换成一列的List
	List<Object> list = qr.query(sql, new ColumnListHandler("name"));
	// 把结果转换成单行单列的值(通常用于select count(*) from t_stu->多少行记录)
	Number number = (Number)qr.query(sql, new ScalarHandler());

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值