JAVA学习日记:JDBC(4)

本节课我学习的主要内容有:

1.PreparedStatement接口

PreparedStatement接口:

		该接口是Statement接口的子接口。
  		表示预处理的Statement封装语句,通过?来向sql语句传入参数。
 		允许传入不同的参数重复执行sql语句。
  		
  		优点:
  			增加了预编译的功能,可以预防sql注入。
  			提高了语句执行速度。
 			可以设置参数。

Test01类(测试传参之后的各种对接数据库的方法):

package LessonForJDBC04;

import java.sql.*;
import java.util.*;

class StudentBean3
{
	private int No;
	private String Name;
	private String Sex;
	private int Age;
	
	public StudentBean3() 
	{
		
	}
	
	public StudentBean3(int no, String name, String sex, int age) 
	{
		super();
		No = no;
		Name = name;
		Sex = sex;
		Age = age;
	}

	public int getNo() 
	{
		return No;
	}

	public void setNo(int no) 
	{
		No = no;
	}

	public String getName() 
	{
		return Name;
	}

	public void setName(String name) 
	{
		Name = name;
	}

	public String getSex() 
	{
		return Sex;
	}

	public void setSex(String sex) 
	{
		Sex = sex;
	}

	public int getAge() 
	{
		return Age;
	}

	public void setAge(int age) 
	{
		Age = age;
	}
}

class StudentDAO3
{
	//打印学生信息
	public static ArrayList<StudentBean3> getAllStudentInf(Connection con)
	{
		ArrayList<StudentBean3> student_list = new ArrayList<StudentBean3>();
		
		String sql = "SELECT NO,NAME,SEX,SAGE FROM STUDENTTEST01";
		
		try 
		{
			Statement sta = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
			
			ResultSet rs = sta.executeQuery(sql);
			
			while (rs.next() != false)
			{
				StudentBean3 sb = new StudentBean3(rs.getInt("NO"),rs.getString("NAME"),
						rs.getString("SEX"),rs.getInt("SAGE")); 
				
				student_list.add(sb);
			}
		} catch (SQLException e) 
			{
				e.printStackTrace();
			}
		
		return student_list;
	}
	
	//增加学生
	public static int addStudentWithObject(Connection con, StudentBean3 stu)
	{
		int result = 0;
		
		String sql = "INSERT INTO STUDENTTEST01 (NO,NAME,SEX,SAGE) VALUES (?,?,?,?)";
		
		try 
		{
			PreparedStatement ps1 = con.prepareStatement(sql);
			
			//开始向问号传参:
			ps1.setInt(1, stu.getNo());
			//parameterIndex代表对应的问号是第几个。
			//x是你要传入的值。
			ps1.setString(2, stu.getName());
			ps1.setString(3, stu.getSex());
			ps1.setInt(4, stu.getAge());
			
			result = ps1.executeUpdate();
		} catch (SQLException e) 
			{
				e.printStackTrace();
			}
		
		return result;
	}
	
	//修改学生信息
	public static int updateStudentInfByNo(Connection con, StudentBean3 stu, int student_no)
	{
		int result = 0;
		
		String sql = "UPDATE STUDENTTEST01 SET NAME=?,SEX=? WHERE NO=?";
		
		try 
		{
			PreparedStatement pt = con.prepareStatement(sql);
			
			pt.setString(1, stu.getName());//更新的值
			pt.setString(2, stu.getSex());
			
			pt.setInt(3, student_no);//更新的目标
			
			result = pt.executeUpdate();//更新
		} catch (SQLException e) 
			{
				e.printStackTrace();
			}
		
		return result;
	}
	
	//条件查询
	public static ArrayList<StudentBean3> findStudentByNo(Connection con, int from_no, int to_no)
	{
		ArrayList<StudentBean3> student_list = new ArrayList<StudentBean3>();
		
		String sql = "SELECT NO,NAME,SEX,SAGE FROM STUDENTTEST01 WHERE NO BETWEEN ? AND ?";
		
		try 
		{
			PreparedStatement ps = con.prepareStatement(sql);
			
			ps.setInt(1, from_no);
			ps.setInt(2, to_no);
			
			ResultSet rs = ps.executeQuery();
			while (rs.next() != false)
			{
				StudentBean3 student = new StudentBean3(rs.getInt("NO"),rs.getString("NAME"),
						rs.getString("SEX"),rs.getInt("SAGE"));
				
				student_list.add(student);
			}
			
		} catch (SQLException e) 
			{
				e.printStackTrace();
			}
		
		return student_list;
	}
}

public class Test01 
{
	public static Connection getConnection(String driver_class,String url,String user,String password)
	{
		Connection con = null;
		try 
		{
			Class.forName(driver_class);
			con = DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException | SQLException e) 
			{
				e.printStackTrace();
			}
		
		return con;
	}
	
	public static void main(String[] args) 
	{
		String driver_class = "oracle.jdbc.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:orcl";
		String user = "scott";
		String password = "tiger";
		
		Connection con1 = getConnection(driver_class,url,user,password);
		
//		StudentBean3 sb1 = new StudentBean3(10,"成流行","女",30);
//		System.out.println(StudentDAO3.addStudentWithObject(con1, sb1));
		
//		System.out.println(StudentDAO3.updateStudentInfByNo(con1, sb1, 10));
//		ArrayList<StudentBean3> ar = StudentDAO3.getAllStudentInf(con1);
//		ar.forEach((k1)->{
//			System.out.println("学号:"+k1.getNo()+" 姓名:"+k1.getName()+" 性别:"+k1.getSex()+" 年龄:"+k1.getAge());
//		});
		
		ArrayList<StudentBean3> ar = StudentDAO3.findStudentByNo(con1,1,5);
		ar.forEach((k1)->{
			System.out.println("学号:"+k1.getNo()+" 姓名:"+k1.getName()+" 性别:"+k1.getSex()+" 年龄:"+k1.getAge());
		});		
	}

}

本篇部分文字来源于:
咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》
在这里十分感谢老师能够给我带来学习的激情。

2020.11.18
本文章是本人学习笔记,不进行任何商用所以不支持转载请理解!也请别拿去商用!
如果觉得对你有帮助那么欢迎你随时来回顾!
只为记录本人学习历程。
毕
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值