第六周作业完成,一个半小时

时间:2022-05-21 01:06:47

一、JDBC ORM 对象和关系数据库的映射

个人看了之后认为这个知识点可能再jdbc中是最重要的知识点之一,毕竟之前的sql语句的插入仅仅只是利用eclipse简单操作数据库,而ORM才可以真正称得上数据库和java的交互操作,可以通过java的类和方法来实现对数据库操作的函数调用。

这里我们构造方法,通过id查找每个角色的任务

第六周作业完成,一个半小时

 接下来我再写插入、更新以及显示当前数据表中所有数据的方法

第六周作业完成,一个半小时

第六周作业完成,一个半小时

 第六周作业完成,一个半小时

 第六周作业完成,一个半小时

有个代码的大坑点一定要注意,sql语句中加字符串连接一定要打单引号,我update方法中就是连接字符串时没有使用单引号导致调试了很久。

二、dao 

无非就是java类的封装,接口的使用

第六周作业完成,一个半小时

package jdbc;

import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import character.novel;

public class noveldao implements dao{
	 public noveldao() {
	        try {
	            Class.forName("com.mysql.jdbc.Driver");
	        } catch (ClassNotFoundException e) {
	            e.printStackTrace();
	        }
	    }
	 public Connection getConnection() throws SQLException {
	        return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8", "root",
	                "123456");
	    }
	 
	    public void see() {
	        try {
	            Class.forName("com.mysql.jdbc.Driver");
	        } catch (ClassNotFoundException e) {
	            e.printStackTrace();
	        }
	      
	        try (Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "123456");
	            Statement s = c.createStatement();) {
	        	String sql = "select * from novel";
	        	ResultSet rs = s.executeQuery(sql);
	            while (rs.next())
	            {
	            	String name = rs.getString(2);
	            	String area = rs.getString(3);
	            	String task = rs.getString(4);

	            	System.out.println(name + " " + area + " " + task);
	            }
	        } catch (SQLException e) {
	            e.printStackTrace();
	        }
	    }
	   
	    public void update(int i ,String t)
	    {
	    	 try {
	             Class.forName("com.mysql.jdbc.Driver");
	         } catch (ClassNotFoundException e) {
	             e.printStackTrace();
	         } 
	    	 
	    	 
	         try(Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "123456");
	                 Statement s = c.createStatement();) { 
	        	 String sql = "update novel set task = '" + t + "' where id = '" + i + "'";                    
	             s.execute(sql);
	         } catch (SQLException e) {
	             e.printStackTrace();
	         } 
	    }
	    
	    public void add(novel n)
	    {
	    	 try {
	             Class.forName("com.mysql.jdbc.Driver");
	         } catch (ClassNotFoundException e) {
	             e.printStackTrace();
	         } 
	         String sql = "insert into novel values(null,?,?,?)";
	         try(Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8","root", "123456");
	                 PreparedStatement ps = c.prepareStatement(sql);) {                     
	             ps.setString(1, n.name);
	             ps.setString(2, n.area);
	             ps.setString(3, n.task);
	             ps.execute();
	         } catch (SQLException e) {
	             e.printStackTrace();
	         } 
	    }
}

 这里与java语法的接口和抽象类有相关联,最近需要重新过一遍java基础语法:

抽象类:
抽象类:含有abstract修饰符的class。抽象类不能创建实例对象,类中的方法不必是抽象的,但是抽象类中定义的抽象方法必须在子类中实现,所以抽象类不能有抽象构造方法或抽象静态方法。
接口:
可以说成是抽象类的一种特例,接口不能创建实例对象,接口中的所有方法都必须是抽象的。接口中的方法默认为public abstract类型,接口中的成员变量类型默认为public static final。

区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量。
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
8. 如果一个类中有抽象方法,那么这个类只能是抽象类。但是抽象类中可以没有抽象方法

三、数据库连接池

1、传统连接

总结一下,就是需要就开连接,用完就关,见一个开一个

2、使用池

总结一下,就是规定了连接上限防止卡顿,连接不会关闭,排队轮流用

3、ConnectionPool构造方法和初始化

1. ConnectionPool() 构造方法约定了这个连接池一共有多少连接

2. 在init() 初始化方法中,创建了size条连接。 注意,这里不能使用try-with-resource这种自动关闭连接的方式,因为连接恰恰需要保持不关闭状态,供后续循环使用

3. getConnection, 判断是否为空,如果是空的就wait等待,否则就借用一条连接出去

4. returnConnection, 在使用完毕后,归还这个连接到连接池,并且在归还完毕后,调用notifyAll,通知那些等待的线程,有新的连接可以借用了。