JDBC和连接池

JDBC和连接池

大纲

  1. JDBC
  2. 连接数据库的方式

具体案例

JDBC

需求:满足Java程序能对多个不同的数据库进行操作,而创建了一种接口,实现对数据库的规范
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

连接数据库的方式

1.方法1

先创建一个Driver对象,然后设置连接到的数据库的地址,然后创建一个properties对象,在里面设定好账户密码,然后通过driver的connect方法,创建出connect连接
在这里插入图片描述

public class jdbc01 {public static void main(String[] args) throws SQLException {// 前置工作,在项目下创建文件夹,然后将jar文件拷贝到该目录下,// 然后将其加入到项目中// 1.注册驱动Driver driver = new Driver();// 2.得到连接// (1)jdbc:mysql://表示表示规定好的协议// (2)localhost 应该是ip地址(这里是主机的ip地址)// (3)3306表示MySQL监听的端口// (4)test db 是指连接到MySQL的哪个数据库// (5)本质上是进行socket连接String url = "jdbc:mysql://localhost:3306/test01";// 将用户名和密码封装到一个Properties对象中Properties properties = new Properties();// user和password是规定好的,后面的值根据实际情况properties.setProperty("user","root");properties.setProperty("password"," ");Connection connect = driver.connect(url, properties);// 3.执行sql语句String sql = "insert into actor values(null,'刘德华','男','1970-11-11','110')";// Statement 用于执行静态sql语句并返回生成的结果的对象Statement statement = connect.createStatement();int rows = statement.executeUpdate(sql);// 如果是dml语句,返回的就是影响到的行数System.out.println(rows > 0? "成功":"失败");//4.关闭连接statement.close();connect.close();}
}

缺点:driver是第三方的,依赖性强,灵活性差

2.使用反射机制

在这里插入图片描述

public class jdbc02 {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");Driver driver = (Driver) aClass.newInstance();String url = "jdbc:mysql://localhost:3306/test01";Properties properties = new Properties();properties.setProperty("user","root");properties.setProperty("password","");Connection connect = driver.connect(url, properties);System.out.println(connect);}
}

3.使用DriverManager替换Driver

这种方法具有更好的拓展性
在这里插入图片描述

public class jdbc03 {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");Driver driver = (Driver) aClass.newInstance();String url = "jdbc:mysql://localhost:3306/test01";String user = "root";String password = "";// 也可以还是使用properties来存储账户和密码,最后在DriverManager的getConnection方法里传入url和properties;DriverManager.registerDriver(driver);Connection connection = DriverManager.getConnection(url, user, password);System.out.println(connection);}
}

4.自动注册,简化操作(推荐使用)

在反射时,完成了类的加载,在静态代码块里实现了自动注册
在这里插入图片描述
在这里插入图片描述

public class jdbc04 {public static void main(String[] args) throws ClassNotFoundException, SQLException {Class.forName("com.mysql.jdbc.Driver");// 可以不写String url = "jdbc:mysql://localhost:3306/test01";String user = "root";String password = "lei2483034010";Connection connection = DriverManager.getConnection(url, user, password);System.out.println(connection);}
}

5.使用配置文件(最推荐)

在4方法的基础上,使用配置文件来存储账户和密码,更加的灵活
在这里插入图片描述

public class jdbc05 {public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {Properties properties = new Properties();properties.load(new FileInputStream("src\\mysql.properties"));String user = properties.getProperty("user");String password = properties.getProperty("password");String driver = properties.getProperty("driver");String url = properties.getProperty("url");Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection(url, user, password);System.out.println(connection);}
}

执行sql语句

在这里插入图片描述
实际开发中,基本不使用statement,因为它不能预防sql注入
所以使用preparedStarement来防止sql的注入
在这里插入图片描述
使用这个类的好处
在这里插入图片描述

public class PreparedStatement {public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {Scanner myScanner = new Scanner(System.in);System.out.println("请输入账号");String account = myScanner.nextLine();System.out.println("请输入密码");String pwd = myScanner.nextLine();Properties properties = new Properties();properties.load(new FileInputStream("src\\mysql.properties"));String user = properties.getProperty("user");String password = properties.getProperty("password");String driver = properties.getProperty("driver");String url = properties.getProperty("url");Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection(url, user, password);String sqlSelect = " select name,pwd from admin where name =? and pwd =?";java.sql.PreparedStatement preparedStatement = connection.prepareStatement(sqlSelect);// 赋值preparedStatement.setString(1,account);preparedStatement.setString(2,pwd);ResultSet resultSet = preparedStatement.executeQuery();// 得到一个查询到resultSet集if (resultSet.next()){System.out.println("恭喜,登录成功");}else {System.out.println("对不起,登录失败");}resultSet.close();preparedStatement.close();connection.close();}
}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/527204.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【unity实战】3D水系统,游泳,潜水,钓鱼功能实现

最终效果 文章目录 最终效果素材将项目升级为URP画一个水潭地形材质升级为URP创建水调节水第一人称人物移动控制游泳水面停留添加水下后处理水下呼吸钓鱼参考完结 素材 https://assetstore.unity.com/packages/vfx/shaders/urp-stylized-water-shader-proto-series-187485 将…

239.滑动窗口最大值

一个和 滑动窗口有关的题目 官方给出了三种解法 很值得借鉴 方法一: priority_queue O(nlogn) 使用模板库的优先队列保存pair(i, nums[i]) 在取最大值 .top() 的时候 注意 看一看它的下标在不在范围内(<i-k), 不在的时候需要把它(队首元素)pop出去 每次push或者pop…

Meta正打造一个巨型AI模型,旨在为其“整个视频生态系统”提供动力,一位高管透露

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【Linux】gcc与make、makefile

文章目录 1 gcc/g1.1 预处理1.2 编译1.3 汇编1.4 链接1.4.1 静态链接1.4.2 动态链接 2 make和makefile2.1 依赖关系2.2 依赖方法2.3 伪目标 3 总结 1 gcc/g 当我们创建一个文件&#xff0c;并向里面写入代码&#xff0c;此时&#xff0c;我们该如何使我们的代码能够运行起来呢&…

java中使用rabbitmq

文章目录 前言一、引入和配置1.引入2.配置 二、使用1.队列2.发布/订阅2.1 fanout(广播)2.2 direct(Routing/路由)2.3 Topics(主题)2.4 Headers 总结 前言 mq常用于业务解耦、流量削峰和异步通信,rabbitmq是使用范围较广,比较稳定的一款开源产品,接下来我们使用springboot的sta…

保姆级认识AVL树【C++】(三种insert情况 || 四种旋转方法)

目录 前言 一&#xff0c;AVL概念 二&#xff0c;基础框架 三&#xff0c;insert 1. 插入三种情况 2. 四种旋转方法 法一&#xff1a;左单旋法 法二&#xff1a;右单旋法 法三&#xff1a;先左后右双旋法 法四&#xff1a;先右后左双旋法 测试&#xff08;判断一棵树…

修改简化docker命令

修改|简化docker命令 使用命令打开 .bashrc 文件&#xff1a; vim ~/.bashrc在文件中添加类似以下行来创建别名&#xff1a; # 查看所有容器 alias disdocker images # 查看运行容器 alias dpsdocker ps # 查看所有容器 alias dpsadocker ps -a # 停止容器 alias dsdocker s…

基于智慧灯杆的智慧城市解决方案(2)

功能规划 智慧照明功能 智慧路灯的基本功能仍然是道路照明, 因此对照明功能的智慧化提升是最基本的一项要求。 对道路照明管理进行智慧化提升, 实施智慧照明, 必然将成为智慧城市中道路照明发展的主要方向之一。 智慧照明是集计算机网络技术、 通信技术、 控制技术、 数据…

Data Concerns Modeling Concerns

How was the data you are using collected? What assumptions is your model making by learning from this dataset? Is this dataset representative enough to produce a useful model? How could the results of your work be misused? What is the intended use and …

第15章——西瓜书规则学习

1.序贯覆盖 序贯覆盖是一种在规则学习中常用的策略&#xff0c;它通过逐步构建规则集来覆盖训练数据中的样本。该策略采用迭代的方式&#xff0c;每次从训练数据中选择一部分未被覆盖的样本&#xff0c;学习一条能够覆盖这些样本的规则&#xff0c;然后将这条规则加入到规则集中…

【Python】成功解决ModuleNotFoundError: No module named ‘matplotlib‘

【Python】成功解决ModuleNotFoundError: No module named ‘matplotlib’ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448…

Linux系统安装及简单操作

目录 一、Linux系统安装 二、Linux系统启动 三、Linux系统本地登录 四、Linux系统操作方式 五、Linux的七种运行级别&#xff08;runlevel&#xff09; 六、shell 七、命令 一、Linux系统安装 场景1&#xff1a;直接通过光盘安装到硬件上&#xff08;方法和Windows安装…