• 浅说JDBC连接


    目录

    1.三大重点

    1.1.ORM 框架

    1.2.连接池

    解决方案在5解决方案

    1.3.日志log

    2.问题

    3.解决方案

    3.1   1个连接?  单例模式。

    3.2  若干个连接(服务者)。

    3.3  使用第三方的连接池组件    C3P0


    1.三大重点

    1.1.ORM 框架

    jdbc取出来的是记录集  resultSet,遍历(同时取字段)

    取出来直接就是对象集合。配置(表book  ----------实体类Book)

    1.2.连接池

    web开发

    如果现在同时有 十万个浏览器在访问 网站,是不是就有 十万个连接Connection在内存中?

    解决方案在5解决方案

    1.3.日志log

    jdbc:报错?是否看到了执行的sql语句是什么?

    增删改查

    classpath:类的查找路径

    2.问题

    web开发同时有10万个浏览器访问网站,就有10万个连接,内存就会被撑爆

    3.解决方案

    3.1   1个连接?  单例模式。

    1. public class JDBCUtil {
    2. static Connection con = null;
    3. public static Connection getConnection(){
    4. if (con != null){
    5. return con;
    6. }
    7. else {
    8. try {
    9. Class.forName("com.mysql.jdbc.Driver");
    10. con = DriverManager.getConnection("jdbc:mysql://localhost:3306/shop?user=root&password=123456");
    11. } catch (ClassNotFoundException e) {
    12. e.printStackTrace();
    13. } catch (SQLException throwables) {
    14. throwables.printStackTrace();
    15. }
    16. return con;
    17. }
    18. }
    19. }
    20. public class MyTest {
    21. public static void main(String[] args) throws Exception{
    22. Connection con = JDBCUtil.getConnection();
    23. Connection con2 = JDBCUtil.getConnection();
    24. System.out.println(con == con2); //false
    25. System.out.println(con);
    26. System.out.println(con2);
    27. }
    28. }
    29. 如何判断连接是否被关闭?
    30. try {
    31. if (con != null) {
    32. if (!con.isClosed()) {
    33. return con;
    34. } else {
    35. con = DriverManager.getConnection(URL,USER,PASSWORD);
    36. return con;
    37. }
    38. } else {
    39. con = DriverManager.getConnection("jdbc:mysql://localhost:3306/shop?user=root&password=123456");
    40. return con;
    41. }
    42. } catch (SQLException throwables) {
    43. throwables.printStackTrace();
    44. return con;
    45. }
     
    

    3.2  若干个连接(服务者)。

    维护——编写连接池类

    • DBpool
    1. private static final String DIRVER = "com.mysql.jdbc.Driver";
    2. private static final String URL = "jdbc:mysql://localhost:3306/shop?";
    3. private static final String USER = "root";
    4. private static final String PASSWORD = "123456";
    5. static Connection[] cons; //10个,null
    6. static int count = 0;
    7. //静态代码块
    8. static {
    9. try {
    10. System.out.println("加载驱动");
    11. Class.forName(DIRVER);
    12. //准备10个连接
    13. cons = new Connection[10];
    14. for (int i = 0; i < cons.length; i++) {
    15. cons[i] = DriverManager.getConnection(URL,USER,PASSWORD);
    16. }
    17. } catch (ClassNotFoundException | SQLException e) {
    18. e.printStackTrace();
    19. }
    20. }
    21. public static Connection getConnection() {
    22. count = count % 10 ;
    23. return cons[count++];
    24. }

    • 有什么办法可以强制连接的DBPool的方法名是getConnection()
    1. Class DBPool implements DataSource{
    2. getConnection (){
    3. }
    4. }

    3.3  使用第三方的连接池组件    C3P0

    1. new ComboPooledDataSource();
    2. //use C3P0,数据源(连接池是数据源),ComboPooledDataSource()
    3. ComboPooledDataSource dataSource = new ComboPooledDataSource();
    4. dataSource.setDriverClass("com.mysql.jdbc.Driver");
    5. dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/shop");
    6. dataSource.setUser("root");
    7. dataSource.setPassword("123456");
    8. Connection con = dataSource.getConnection();
    9. Statement stmt = con.createStatement();
    10. ResultSet re = stmt.executeQuery("select * from book");
    11. while (re.next()){
    12. System.out.println(re.getString("name"));
    13. }

  • 相关阅读:
    JavaScript bind,call,apply原理,手写bind,call,apply实现
    金蝶云星空——单据附件上传
    java项目之书店仓库管理系统(ssm源码+文档)
    OpenGL3.3_C++_Windows(9)
    过滤对象数组中有重复值的项
    javascript复习 8.从0-1 彻底理解new
    北邮22级信通院数电:Verilog-FPGA(9)第九周实验(1)实现带同步复位功能、采用上升沿触发的D触发器
    Vue - 将页面内容下载为 pdf 格式文件(html2canvas + jspdf)
    Jenkins继续集成2
    vulnhub BTRSys: v2.1
  • 原文地址:https://blog.csdn.net/weixin_46048259/article/details/126432393