jdbc

1.Jdbc的使用

1.简述

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。是Java访问数据库的标准规范

**总结:**JDBC是java提供给开发人员的一套操作数据库的接口

​ 数据库驱动就是实现该接口的实现类

2.原理

  1. Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动
  2. DBC是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库!
  3. 每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。

3.开发步骤

1.注册驱动

​ 告知JVM使用的是哪一个数据库的驱动

2.获得连接

​ 使用JDBC中的类,完成对MySQL数据库的连接

3.获得语句执行平台

​ 通过连接对象获取对SQL语句的执行者对象

4.执行sql语句

​ 使用执行者对象,向数据库执行SQL语句

​ 获取到数据库的执行后的结果

5.处理结果

6.释放资源

​ 一堆close()

4.实例

1.获得连接
                     //1.注册驱动 反射技术,将驱动类加入到内容
					// 使用java.sql.DriverManager类静态方法 registerDriver(Driver driver)
					// Diver是一个接口,参数传递,MySQL驱动程序中的实现类
					//DriverManager.registerDriver(new Driver());
					//驱动类源代码,注册2次驱动程序
					Class.forName("com.mysql.jdbc.Driver");
					
					//2.获得数据库连接  DriverManager类中静态方法
					//static Connection getConnection(String url, String user, String password)  
					//返回值是Connection接口的实现类,在mysql驱动程序
					//url: 数据库地址  jdbc:mysql://连接主机IP:端口号//数据库名字
					String url = "jdbc:mysql://localhost:3296/mybase";
					String username="root";
					String password="123";
					Connection con = DriverManager.getConnection(url, username, password);
					
					//3.获得语句执行平台, 通过数据库连接对象,获取到SQL语句的执行者对象
					// con对象调用方法   Statement createStatement() 获取Statement对象,将SQL语句发送到数据库
					// 返回值是 Statement接口的实现类对象,,在mysql驱动程序
					Statement stat = con.createStatement();
					System.out.println(stat);
				}
2.执行结果
//intsert操作         
// 返回值int,操作成功数据表多少行

				int row = stat.executeUpdate

	("INSERT INTO sort(sname,sprice,sdesc) VALUES('汽车用品',50000,'疯狂涨价')");

				System.out.println(row);

			//6.释放资源  一堆close()

			stat.close();

			con.close();


//select操作
String sql = "SELECT * FROM sort";
	//4. 调用执行者对象方法,执行SQL语句获取结果集
	// ResultSet executeQuery(String sql)  执行SQL语句中的select查询
	// 返回值ResultSet接口的实现类对象,实现类在mysql驱动中
	ResultSet rs = stat.executeQuery(sql);
	//5 .处理结果集
	// ResultSet接口方法 boolean next() 返回true,有结果集,返回false没有结果集
	while(rs.next()){
	//获取每列数据,使用是ResultSet接口的方法 getXX方法参数中,建议写String列名
	System.out.println(rs.getInt("sid")+"   "+rs.getString("sname")+
	"   "+rs.getDouble("sprice")+"   "+rs.getString("sdesc"));
	}
					
					rs.close();
					stat.close();
					con.close();

5.SQL注入攻击

假设有登录案例SQL语句如下:

SELECT * FROM 用户表 WHERE NAME = 用户输入的用户名 AND PASSWORD = 用户输的密码;

此时,当用户输入正确的账号与密码后,查询到了信息则让用户登录。

但是当用户输入的账号为XXX 密码为:XXX’ OR ‘a’=’a时,则真正执行的代码变为:

SELECT * FROM 用户表 WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’ OR ’a’=’a’;

此时,上述查询语句时永远可以查询出结果的。那么用户就直接登录成功了,显然我们不希望看到这样的结果,这便是SQL注入问题。

6.PrepareStatement

1.预处理对象

使用PreparedStatement预处理对象时,建议每条sql语句所有的实际参数,都使用逗号分隔。

String sql = “insert into sort(sid,sname) values(?,?)”;;

PreparedStatement预处理对象代码:

PreparedStatement psmt = conn.prepareStatement(sql)

b: 执行SQL语句的方法介绍

int executeUpdate(); --执行insert update delete语句.

ResultSet executeQuery(); --执行select语句.

boolean execute(); --执行select返回true 执行其他的语句返回false.

c: 设置实际参数

void setXxx(int index, Xxx xx) 将指定参数设置为给定Java的xx值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL Xxx类型值。

例如:

setString(2, “家用电器”) 把SQL语句中第2个位置的占位符? 替换成实际参数 “家用电器”

2.实际处理
Class.forName("com.mysql.jdbc.Driver");

					String url = "jdbc:mysql://localhost:3296/mybase";

					String username="root";

					String password="123";

					Connection con = DriverManager.getConnection(url, username, password);	

					

					String sql = "SELECT * FROM sort";

					

					PreparedStatement pst = con.prepareStatement(sql);

					

					//调用pst对象的方法,执行查询语句,Select

					ResultSet rs=pst.executeQuery();

					while(rs.next()){

						System.out.println(rs.getString("sid")+"  "+rs.getString("sname")+"  "+rs.getString("sprice")+"  "+rs.getString("sdesc"));

					}

					rs.close();

					pst.close();

				con.close();
3.通过配置文件连接
FileInputStream fis = new FileInputStream("database.properties");

					System.out.println(fis);

					//使用类的加载器

					InputStream in = PropertiesDemo.class.getClassLoader().getResourceAsStream("database.properties");

					System.out.println(in);

					Properties pro = new Properties();

					pro.load(in);

					//获取集合中的键值对

					String driverClass=pro.getProperty("driverClass");

					String url = pro.getProperty("url");

					String username = pro.getProperty("username");

					String password = pro.getProperty("password");

					Class.forName(driverClass);

					Connection con = DriverManager.getConnection(url, username, password);

				System.out.println(con);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值