第五次作业——JDBC

一、PreparedStatement和Statement的区别

Statement是执行静态的SQL语句的,例如我们在数据库中查询数据时写的SQL语句就是静态的,查询哪位同学的什么信息,我们都在SQL语句中明确的给定了,这就是静态的SQL语句。

PreparedStatement是动态执行SQL语句,假如说我们现在想要查询的是王浩同学的相关信息,但是之后又变为了其他同学的信息,因此我们在where name = ?,这一步不能把值写死,而是要根据传进来的参数来决定,这就是动态的SQL语句。

在我们所写的增删改查中,所增加的信息,删除的信息和查询的信息都不是确定的,因此我在写下面的操作的时候采用的PreparedStatement。

回顾一下我们之间创建Statement以及执行SQL语句的过程:

statement = connection.createStatement()

res = statement.executeQuery(sql)

采用PreparedStatement执行SQL语句

PreparedStatement pstatement = connection.prepareStatement(sql)

pstatement.setXxx(第几个问号, 填充的参数)

pstatement.executeQuery()

由此,我们看到这两者创建以及执行过程的区别

首先是connection调用的方法不一样,第二点是它们的sql出现的时间不一样(一个出现在创建的阶段,一个出现在执行的阶段),第三是PreparedStatement多了一个填充参数的过程。

二、新建数据表以及填充部分数据

注意这些原始数据,之后在操作数据库后会发生改变

 

三、程序分析及实现

因为本题是实现数据库的增删改查四个操作,因此我就写了四个方法出来,分别是增加信息、删除信息、更改信息和查询信息。我们需要的时候直接调用就好了。

同时由于增删改查的信息不确定,因此我采用PreparedStatement来执行sql语句。

在使用PreparedStatement时要注意的是由于我们增加的信息是不确定的,因此我们的sql语句中需要我们后期调用方法来填充的地方需要用?来进行占位

一下程序我是在java的控制台输出的,因为我在使用浏览器输出的时候遇到了一个404问题,我能感觉出来是因为路径导致的错误,但是我现在还没有办法解决。

这个错误让我感到很奇怪的一点是我的程序没有放在WEB-INF下面,但是在访问的路径中却出现了WEB-INF这个文件夹,这也是导致我404错误的原因。

 

这是执行成功的图片

增加信息

 

删除信息
更改信息

 

查询信息
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//实现对数据库的增删改查的操作
public class huiyuan {
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	
	//1.向数据库种增加某些信息
	//对于我们的会员信息表而言,我们需要增加的字段有id(int), name(String), age(float), xingbie(String)
	public void addItems(int id, String name, float age, String xingbie)
	{
		try {
			//加载驱动
			Class.forName("com.mysql.jdbc.Driver");
			//建立与数据库的连接
			String url = "jdbc:mysql://localhost:3306/test";
			conn = DriverManager.getConnection(url, "root", "admin");
			String sql = "insert into huiyuan(id, name, age, xingbie) values(?, ?, ?, ?)";
			//填充占位符
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, id);
			pstmt.setString(2, name);
			pstmt.setFloat(3, age);
			pstmt.setString(4, xingbie);
			int i = pstmt.executeUpdate(); //这个方法返回的是受影响的信息的条数
			if(i > 0){
				System.out.println("插入信息成功");
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	//2.删除数据库种的某些信息,需要输入用户的id就可以删除
	public void deleteItems(int id)
	{
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/test";
			conn = DriverManager.getConnection(url, "root", "admin");
			String sql = "delete from huiyuan where id = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, id);
			int i = pstmt.executeUpdate(); //这个方法返回的是受影响的信息的条数
			if(i > 0){
				System.out.println("删除信息成功");
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	//3.更改数据库种的某些信息,比如说用户想更改他的年龄,那么我们需要传进来用户的姓名
	public void updateItems(float age, String name)
	{
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/test";
			conn = DriverManager.getConnection(url, "root", "admin");
			String sql = "update huiyuan set age = ? where name = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setFloat(1, age);
			pstmt.setString(2, name);
			int i = pstmt.executeUpdate(); //这个方法返回的是受影响的信息的条数
			if(i > 0){
				System.out.println("更改信息成功");
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			try {
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	//4.查询数据库种的信息,需要传一个参数,例如姓名,就能显示出相关的信息
	public void selectItems(String name)
	{
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/test";
			conn = DriverManager.getConnection(url, "root", "admin");
			String sql = "select * from huiyuan where name = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, name);
			rs = pstmt.executeQuery();
			while(rs.next())
			{
				int id = rs.getInt(1);
				String names = rs.getString(2);
				float age = rs.getFloat(3);
				String xingbie = rs.getString(4);
				System.out.println(id + "    " + names + "     " + age + "     " + xingbie);
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	//在主程序中调用以上的方法得出结果
	public static void main(String[] args)
	{
		//根据我们在java中所学的知识,只有先创建一个对象才可以调用其方法
		huiyuan test = new huiyuan();
		//test.addItems(6, "李好", 32, "女");
		//test.deleteItems(6);
		//test.updateItems(20, "李海");
		test.selectItems("张悦");
	}
}

 那我们最后再看一下数据库中数据的变化

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值