- 一,JDBC
- --1,概述
- --2,使用步骤
- 1, 提供了丰富的工具类jar包,项目中导入jar包
- 2, 连接数据库: 端口号3306 库名cgb2109 用户名root 密码root
- 3, 写SQL
- 4, 处理数据库返回给java的结果
- --3,导入jar包
- 1,选用哪个版本的jar包,要看你安装的数据库的版本
- 2,导入jar包
- --4,入门案例
- --5,总结
- 二,JDBC的练习
- --1,查询courses表的所有数据
- --2,向dept表中插入数据
- --3,模拟用户登录
- 1, 让用户输入用户名 和 密码
- 2, 在数据库里 准备表
- 3, 利用JDBC查库,发起select语句
- 三,SQL攻击
- --1,模拟SQL攻击的现象
- --2,解决方案
sun公司提供的一套 java *** 作数据库的标准
专门用来完成 java 和 数据库 交互的技术,全称是: java database connectivity
1, 复制粘贴到工程里
2, 选中jar包,右键-add as libarary… ok
package cn.tedu.jdbc; import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; //测试jdbc public class Test1 { //junit单元测试:@Test public void 没有参数 @Test public void get() throws Exception { //1,注册驱动 --参数是类的全路径 Class.forName("com.mysql.jdbc.Driver");//5版本的jar包 //Class.forName("com.mysql.cj.jdbc.Driver");//8版本的jar包 //2,连接数据库,并返回了数据库的连接Connection String url = "jdbc:mysql://localhost:3306/cgb2109"; //遵循的协议://本机ip地址:端口号/数据库名 Connection c = DriverManager.getConnection(url,"root","root"); //3,获取传输器 Statement s = c.createStatement(); //4,执行SQL语句 //需求:利用java查询数据库中dpet表的所有数据 ResultSet r = s.executeQuery("select * from dept");//执行查询的SQL语句 //s.executeUpdate()执行增删改的SQL语句 //5,处理结果 while( r.next() ){//next()判断有没有数据 //getXxx()获取不同类型的数据 // r.getInt(1);//根据列的编号获取列的值 int a=r.getInt("deptno");//根据列名获取列的值 String b = r.getString("dname"); String d = r.getString(3); System.out.println(a+b+d); } //6,释放资源 r.close();//结果集 s.close();//传输器 c.close();//连接器 } }–5,总结 二,JDBC的练习 –1,查询courses表的所有数据
package cn.tedu.jdbc; import org.junit.Test; import java.sql.*; //测试jdbc public class Test1 { //需求:查询courses表的所有数据 @Test public void get2() throws Exception{ //1,注册驱动 --参数是类的全路径 Class.forName("com.mysql.jdbc.Driver"); //2,连接数据库,并返回了数据库的连接Connection String url="jdbc:mysql://localhost:3306/cgb2109?characterEncoding=utf8"; Connection c = DriverManager.getConnection(url,"root","root"); //3,获取传输器 Statement s = c.createStatement(); //4,执行SQL ResultSet r = s.executeQuery("select * from courses");//查询SQL //5,处理结果 while(r.next()){//判断有没有数据 //表里有三列,循环三次就行了 for (int i = 1; i <4 ; i++) { //获取数据getXxx()--getObject()更通用可以获取任意类型的数据 Object a = r.getObject(i);//i是列的索引1 2 3..列 System.out.println(a);//打印每列的值 } } //6,释放资源 r.close(); s.close(); c.close(); } }–2,向dept表中插入数据
//需求:向dept表中插入数据 @Test public void add() throws Exception{ //1,注册驱动 --参数是类的全路径 Class.forName("com.mysql.jdbc.Driver"); //2,连接数据库,并返回了数据库的连接Connection // String url="jdbc:mysql://localhost:3306/cgb2109?characterEncoding=utf8"; String url="jdbc:mysql:///cgb2109?characterEncoding=utf8";//简写 Connection c = DriverManager.getConnection(url,"root","root"); //3,获取传输器 Statement s = c.createStatement(); //4,执行SQL int rows = s.executeUpdate( "insert into dept values(null,'java开发',"北京")"); //5,处理结果 //executeQuery查询,会把结果返回给ResultSet需要遍历,,, //executeUpdate增删改,会返回对数据库的影响行数,,,通常不处理 //6,释放资源 s.close(); c.close(); }–3,模拟用户登录 1, 让用户输入用户名 和 密码 2, 在数据库里 准备表
CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment, `name` varchar(20) default NULL, `pwd` varchar(10) default NULL, PRIMARY KEY (`id`) )3, 利用JDBC查库,发起select语句
select * from user where name=‘jack’ and password=‘123’
package cn.tedu.jdbc; import org.junit.Test; import java.awt.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; //模拟用户登录 public class Test2 { //模拟用户登录 @Test public void login() throws Exception{ //1,注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2,连接数据库 String url="jdbc:mysql:///cgb2109?characterEncoding=utf8"; Connection c = DriverManager.getConnection(url, "root", "root"); //3,获取传输器 Statement s = c.createStatement(); //4,执行SQL String sql="select * from user where name='jack' and pwd='123'"; ResultSet r = s.executeQuery(sql); //5,处理结果 if( r.next() ){//判断有数据吗?如果有数据就可以登录 System.out.println("登录成功!"); }else{//没数据,重新输入或去注册 System.out.println("登录失败,请重新输入或去注册!"); } //6,释放资源 r.close(); s.close(); c.close(); } }三,SQL攻击 –1,模拟SQL攻击的现象
//出现了问题:SQL攻击:
//1,本质上就是因为SQL中出现了特殊符号#,#号在SQL中是注释的意思(测试时使用固定的用户名jack’#)
//2,Statement传输器在执行SQL时遇到了SQL拼接,把#当做了注释用!!
package cn.tedu.jdbc; import org.junit.Test; import java.awt.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Scanner; //模拟用户登录 public class Test2 { //模拟用户登录,从单元测试改成main()原因是IDEA单元测试方法无法键盘输入 public static void main(String[] args) throws Exception{ //1,注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2,连接数据库 String url="jdbc:mysql:///cgb2109?characterEncoding=utf8"; Connection c = DriverManager.getConnection(url, "root", "root"); //3,获取传输器 Statement s = c.createStatement(); //4,执行SQL System.out.println("请输入用户名:"); String username = new Scanner(System.in).nextLine(); System.out.println("请输入密码:"); String password = new Scanner(System.in).nextLine(); //拼接字符串: 一对儿双引号中间一对儿加号 再中间看你了 "+???+" // String sql="select * from user where name='jack' and pwd='123'"; String sql="select * from user where name='"+username+"' and pwd='"+password+"'"; ResultSet r = s.executeQuery(sql); //5,处理结果 if( r.next() ){//判断有数据吗?如果有数据就可以登录 System.out.println("登录成功!"); }else{//没数据,重新输入或去注册 System.out.println("登录失败,请重新输入或去注册!"); } //6,释放资源 r.close(); s.close(); c.close(); } }–2,解决方案
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)