JDBC课堂练习

练习一:在控制台中插入一个数据到数据库里:

package Exercise;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

import org.junit.Test;

import JDBCutil.JDBCconn;
public class Exercise1 {
public int Update(String sql,Object...args){
	Connection conn=null;
	PreparedStatement ps=null;
	try {
		Scanner sc = new Scanner(System.in);
		//1.获取数据库的链接
		conn = JDBCconn.getConn();
		//2.预编译sql语句,返回PreparedStatement的实例 
		ps = conn.prepareStatement(sql);
		//3.填充占位符
		for(int j =0;j<args.length;j++) {
			ps.setObject(j+1, args[j]);
		}
		//4.执行
		/*    ps.execute()
		 *    如果执行的是查询操作,有返回结果,则此方法返回true
		 *    如果执行的是增删改操作,没有返回结果,则次方法放回falase
		 * */
//		ps.execute();
		//此时用:ps.executeUpdate()无参数的,不要插入有参数的,那个是给statement用的
		//executeUpdate()返回一个int类型的变量,若此变量大于0则操作成功,否则则失败
		return  ps.executeUpdate();
		
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}finally {		
		JDBCconn.closeResource(conn, ps, null);
	}
	return 0;
}
@Test 
public void test() throws Exception {
	Scanner sc = new Scanner(System.in);
	System.out.print("请输入ID:");
	int id = sc.nextInt();
	System.out.print("请输入名字:");
	String name = sc.next();
	System.out.print("请输入邮箱地址:");
	String email = sc.next();
	SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
	System.out.print("请输入格式为(yyyy-MM-dd)的日期:");
	Date data = s.parse(sc.next());
	String sql = "insert into customers(id,name,email,birth) values(?,?,?,?) ";
	int update = Update(sql,id,name,email,data);
	if(update>0) {
		System.out.println("操作成功");
	}else {
		System.out.println("操作失败");
	}
}
}

练习二:通过输入身份证号或者准考证号查询考生信息

package Exercise;

import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
import java.util.Scanner;
import Test.*;
import org.junit.Test;

import Test.ExamStudentTble;

import JDBCutil.JDBCconn;

public class Exercise2 {

	public <E> E query(Class<E> clazz, String sql, Object... args) throws Exception {
		Connection conn = JDBCconn.getConn();
		PreparedStatement ps = conn.prepareStatement(sql);
		for (int i = 0; i < args.length; i++) {
			ps.setObject(i + 1, args[i]);
		}
		ResultSet rc = ps.executeQuery();
		ResultSetMetaData data = rc.getMetaData();
		int count = data.getColumnCount();
		if (rc.next()) {
			E e = clazz.newInstance();
			for (int i = 0; i < count; i++) {
				Object columnValue = rc.getObject(i + 1);
				String columnLabel = data.getColumnLabel(i + 1);
				Field field = clazz.getDeclaredField(columnLabel);
				field.setAccessible(true);
				field.set(e, columnValue);
			}
			return e;
		}
		return null;
	}
	@Test
	public void test1() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请选择您要输入的类型");
		System.out.println("a身份证号:");
		System.out.println("b准考证号:");
		String stu1 = sc.next();
		if("a".equals(stu1)) {
			System.out.print("请输入身份证号:");
			String sql = "Select * from examstudent where IDcard= ?";
			ExamStudentTble query=null;
			try {
				query = query(ExamStudentTble.class, sql, sc.next());
			} catch (Exception e) {
				System.out.println("输入错误");
			}
			if(query!=null) {
				System.out.println(query);
			}else {
				System.out.println("查无此人");
			}
		}else if("b".equals(stu1)) {
			System.out.print("请输入准考证号:");
			String sql = "Select * from examstudent where ExamCard= ?";
			ExamStudentTble query=null;
			try {
				query = query(ExamStudentTble.class, sql, sc.next());
			} catch (Exception e) {
				System.out.println("输入错误");
			}
			if(query!=null) {
				System.out.println(query);
			}else {
				System.out.println("查无此人");
			}
		}else {
		   System.out.println("输入错误");
		}
	}//updateInfo
public int updateInfo(String sql,Object...args) {
		
		Connection conn=null;
		PreparedStatement p1=null;
		try {
			//1.首先和之前一样先获得4个基本信息,也就是获得配置文件
			InputStream is = ClassLoader.getSystemClassLoader().getSystemResourceAsStream("jdbc.properties");
			Properties p = new Properties();
			p.load(is);
			String url=p.getProperty("url");
			String user = p.getProperty("user");
			String psw = p.getProperty("password");
			String Diver = p.getProperty("driverClass");
			//2.注册驱动
			Class.forName(Diver);
			//3.获取链接
			conn = DriverManager.getConnection(url, user, psw);
			//4.获取PreparedStatement 预准备编译
			p1 = conn.prepareStatement(sql);
			//接下来具体的增删改操作循环,此时你有多少个参数就执行多少次,所以是args.length
			for(int i =0 ;i<args.length;i++) {
				//注意前面的参数是对应数据库中的哪个字段,而索引是从1开始的,所以是i+1,而后面的是java中的数组所以是i
				p1.setObject(i+1,args[i]);
			}
			//执行
			return p1.executeUpdate();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			//关闭资源
		}finally {
			try {
				if(p1!=null)
				p1.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(conn!=null)
					conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return 0;
		
		
	}
	@Test
	public void test2() {
		Scanner sc = new Scanner(System.in);
		String sql = "delete from examstudent where FlowID =?";
//		String sql = "insert into examstudent values(?,?,?,?,?,?,?)";
		System.out.print("请输出要删除的考试的流水号:");
		int i = updateInfo(sql, sc.nextInt());
//		int i = updateInfo(sql, 7,4,"123456","1234547879","111","123","95");
		if(i>0) {
			System.out.println("删除成功");
		}else {
			System.out.println("查无此人");
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,针对sakila数据库中的actor表,以下是Java实现增删改查操作的示例: 1. 查询所有演员的信息 ``` String query = "SELECT * FROM actor"; try { Connection conn = DriverManager.getConnection(url, username, password); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(query); while(rs.next()){ int actorId = rs.getInt("actor_id"); String firstName = rs.getString("first_name"); String lastName = rs.getString("last_name"); Timestamp lastUpdate = rs.getTimestamp("last_update"); // 处理查询结果 } rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } ``` 2. 查询某个演员的信息 ``` String query = "SELECT * FROM actor WHERE actor_id = ?"; try { Connection conn = DriverManager.getConnection(url, username, password); PreparedStatement pstmt = conn.prepareStatement(query); pstmt.setInt(1, actorId); ResultSet rs = pstmt.executeQuery(); if(rs.next()){ int actorId = rs.getInt("actor_id"); String firstName = rs.getString("first_name"); String lastName = rs.getString("last_name"); Timestamp lastUpdate = rs.getTimestamp("last_update"); // 处理查询结果 } rs.close(); pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } ``` 3. 添加一个新演员 ``` String query = "INSERT INTO actor (first_name, last_name, last_update) VALUES (?, ?, NOW())"; try { Connection conn = DriverManager.getConnection(url, username, password); PreparedStatement pstmt = conn.prepareStatement(query); pstmt.setString(1, firstName); pstmt.setString(2, lastName); int rowsInserted = pstmt.executeUpdate(); if(rowsInserted > 0){ // 处理插入成功的情况 } pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } ``` 4. 更新某个演员的信息 ``` String query = "UPDATE actor SET first_name = ?, last_name = ?, last_update = NOW() WHERE actor_id = ?"; try { Connection conn = DriverManager.getConnection(url, username, password); PreparedStatement pstmt = conn.prepareStatement(query); pstmt.setString(1, firstName); pstmt.setString(2, lastName); pstmt.setInt(3, actorId); int rowsUpdated = pstmt.executeUpdate(); if(rowsUpdated > 0){ // 处理更新成功的情况 } pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } ``` 5. 删除某个演员的信息 ``` String query = "DELETE FROM actor WHERE actor_id = ?"; try { Connection conn = DriverManager.getConnection(url, username, password); PreparedStatement pstmt = conn.prepareStatement(query); pstmt.setInt(1, actorId); int rowsDeleted = pstmt.executeUpdate(); if(rowsDeleted > 0){ // 处理删除成功的情况 } pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } ``` 需要注意的是,在实际开发中,需要先加载数据库驱动,例如: ``` Class.forName("com.mysql.jdbc.Driver"); ``` 另外,为了防止SQL注入,建议使用PreparedStatement代替Statement,并将输入参数进行验证和转义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hyong~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值