JDBC连接(javadatabaseconnectivity)
JDBC连接(java database connectivity)jdbc使用的步骤
1.通过反射机制加载驱动类-->>相当于是一个jdbc管理的工具类 2.找到我们的数据库连接池的url 3.使用Driver Manager(驱动管理器)获得到数据库连接 4.通过connect创建一个状态通道 5.就可以使用sql语句向状态通道中传入我们想要实现的sql语句 6.最后,注意一定要关闭所有的连接
通过使用数据库驱动-->>使用java来对数据库进行增删改的操作
注意jar包的添加 具体实现
示例: package com; import java.sql.*; /** * @Author: fyw * @Description:1.通过反射机制加载驱动类-->>相当于是一个jdbc管理的工具类 2.找到我们的数据库连接池的url 3.使用Driver Manager(驱动管理器)获得到数据库连接 4.通过connect创建一个状态通道 5.就可以使用sql语句向状态通道中传入我们想要实现的sql语句 6.最后,注意一定要关闭所有的连接 * @Date Created in 2021-08-28 19:12 * @Modified By: */ public class Demo01 { public static void main(String[] args) { Statement statement = null; ResultSet resultSet = null; Connection connection = null; //1. 加载驱动类 try { Class.forName("com.mysql.cj.jdbc.Driver"); //2. 获得连接 String url = "jdbc:mysql://localhost:3306/yhp2?serverTimezone=UTC"; String userName = "root"; String passWord = "123456"; connection = DriverManager.getConnection(url, userName, passWord); //3. 定义sql语句,创建状态通道,进行sql语句的发送 statement = connection.createStatement(); resultSet = statement.executeQuery("select *from yhp2.emp1"); while (resultSet.next()){//判断是否有下一条数据 System.out.println("姓名:"+resultSet.getString("ename")+"工资:"+resultSet.getDouble("sal")); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { try { if (resultSet != null) { resultSet.close(); } //5. 关闭资源 if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
通过状态通道传入sql语句的时候有几种不同的函数用法,注意返回值,
如果是查询executeQuery()-->>resultSet-->>结果集映射
如果是更新操作(包括update,delete,insert)-->>返回的都是int性的影响行数 package com; import java.sql.*; /** * @Author: fyw * @Description: * @Date Created in 2021-08-28 19:12 * @Modified By: */ public class Demo01 { public static void main(String[] args) { Statement statement = null; ResultSet resultSet = null; Connection connection = null; //1. 加载驱动类 try { Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/yhp2?serverTimezone=UTC"; String userName = "root"; String passWord = "123456"; //2. 获得连接 connection = DriverManager.getConnection(url, userName, passWord); //3. 定义sql语句,创建状态通道,进行sql语句的发送 statement = connection.createStatement(); resultSet = statement.executeQuery("select *from yhp2.emp1"); while (resultSet.next()){//判断是否有下一条数据 System.out.println("姓名:"+resultSet.getString("ename")+"工资:"+resultSet.getDouble("sal")); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { try { if (resultSet != null) { resultSet.close(); } //5. 关闭资源 if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); } } } } sql注入package com; import java.sql.*; /** * @Author: fyw * @Description: * @Date Created in 2021-08-28 19:12 * @Modified By: */ public class Demo04 { public static void main(String[] args) { Statement statement = null; ResultSet resultSet = null; Connection connection = null; //1. 加载驱动类 try { Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/yhp2?serverTimezone=UTC"; String userName = "root"; String passWord = "123456"; //2. 获得连接 connection = DriverManager.getConnection(url, userName, passWord); //3. 定义sql语句,创建状态通道,进行sql语句的发送 statement = connection.createStatement();//通过连接通道返回一个状态通道,可以通过状态通道进行传入sql语句 // int result = statement.executeUpdate("insert into yhp2.emp1(empno,ename,hiredate,sal) values(100005,"fyw","2001-04-29",20000)"); String username1 = "sdfsdf"; String pwd1 = " "" or 1=1 "; resultSet = statement.executeQuery("select *from `5-3kkb作业`.login where username=""+username1+"" and pwd="+pwd1); if(resultSet.next()){ System.out.println("登录成功"); }else{ System.out.println("登录失败"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { try { if (resultSet != null) { resultSet.close(); } //5. 关闭资源 if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); } } } } sql注入解决方案
预状态通道
preparedstatement
1.通过connect连接-->>preparstatement生成我们的预状态通道
2.直接将要执行的sql语句传入-->>关键部分用?代替
3.通过preparstatement.set类型,来传入我们的关键参数 注意:下标是从1开始
4.直接通过预状态通道执行sql package com; import java.sql.*; /** * @Author: fyw * @Description: * @Date Created in 2021-08-28 19:12 * @Modified By: */ public class Demo05 { public static void main(String[] args) { Statement statement = null; ResultSet resultSet = null; Connection connection = null; //1. 加载驱动类 try { Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/yhp2?serverTimezone=UTC"; String userName = "root"; String passWord = "123456"; //2. 获得连接 connection = DriverManager.getConnection(url, userName, passWord); //3. 防止sql注入,先连接一个预状态通道 PreparedStatement preparedStatement = connection.prepareStatement("select * from `5-3kkb作业`.login where pwd=? and username=?"); //4. 通过对占位符的赋值,进行sql; String username1 = "sdfsdf"; String pwd1 = " "" or 1=1 "; preparedStatement.setString(1,username1); preparedStatement.setString(2,pwd1); //5. 执行sql ResultSet resultSet1 = preparedStatement.executeQuery(); if(resultSet1.next()){ System.out.println("登录成功"); }else{ System.out.println("登录失败"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { try { if (resultSet != null) { resultSet.close(); } //5. 关闭资源 if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
这个贵过特斯拉,还备受王思聪质疑的充电宝,即将破圈成功?在双循环背景下,发展共享经济共享消费将继续成为挖掘消费潜力的重要抓手,未来中国共享经济的发展仍将处在快车道上。一王思聪打的赌不知道大家是否还记得,2017年的时候,陈欧宣布聚美优品
手机能否代替相机一前言手机能否代替相机这个话题很容易踩雷和得罪人,反正总有人跳出来说这不对,那也不对。互联网带来的便利,同时也给互联网世界带来更多的喷子,这些喷子在看下面的文章前要不补补知识再来,
九月,新学弟学妹你们选好了笔记本吗?惠普ENVY13轻薄本惠普ENVY13轻薄本每年九月,都有一大批新生进入美丽的校园,但面对崭新的人际关系和种种以前从未遇到过的问题,往往让人感觉手忙脚乱。如何快速融入群体?面对这样的迷茫期,不如就让我们
张小龙微信将推出自有输入法1月20日消息,19日晚,在2021微信公开课Pro版的微信之夜上,微信之父张小龙给出了不少数据和新料。其中,张小龙表示接下来微信将灰度测试输入法。张小龙透露,微信即将有自己的输入
微易客商家为什么要做数字化转型?2020年,疫情突然暴发后,大部分线下门店关停,线上经济呈现爆发式的增长,进而倒逼商家加速了数字化转型。数字化转型是未来企业发展的关键,如果你还在经营传统门店,提醒您一声,赶紧让自
如何看待韩政府给素媛案罪犯发放补助每月7000元人民币据韩媒报道,日前,韩国电影素媛原型罪犯赵斗淳向居住地所在政府,提交韩国向低收入群体发放的国民基础生活保障补贴申请,引发民众强烈反对。当地时间2月2日,京畿安山地区相关人士透露,安山
西藏冒险王失踪成谜,遗体找到系谣言王相军(1990年2020年12月),男,出生于四川邻水,先后去过萨普神山梅里雪山来古冰川布加雪山等70余座冰川,并收获大批粉丝,获得冰川哥的名号。2020年12月20日,王相军在
微易客开工大吉,2021一起犇上班第一天大家正式开启上班模式新年新气象小编祝大家开工大吉,牛气冲天!度过了一个欢乐祥和的春节假期后我们再次回到了工作岗位中告别成绩斐然的2020迎来了充满希望的2021崭新的一年
代孕后又要弃养?央视评论如此践踏底线,法律难容,道德难容1月18日,某女星的前男友张恒在网上晒出抱着两个孩子的照片,随后又放出了几段录音,曝光录音中女方打也打不掉,我都烦死了更令人愤怒,信息量很大,多次流露出了弃养代孕所生孩子的想法。事
百香果女孩遇害案改判被告人死刑,二审影响恶劣?12月28日,百香果女孩案凶手被改判死刑。宣判后,女童母亲大哭,她说,虽然对结果满意,但换不回来女儿。2018年10月4日,10岁女童卖完百香果回家途中,遭杨光毅残忍强奸死亡,一审
微易客刚刚!传化支付牌照成功续展刚刚,又一家支付机构牌照成功续展。中国人民银行官网公示显示,浙江传化支付有限公司支付业务许可证续展成功,业务类型为互联网支付移动电话支付预付卡发行与受理(仅限线上实名支付账户充值)