• jsp补-java数据库连接、java反射机制


    DB

    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.sql.*;
    public class DB {
    	private static String driver = "com.mysql.jdbc.Driver";//写死
    	public static void main(String[] args) throws ClassNotFoundException, SQLException {
    		Connection conn=null;
    		Statement stmt=null;
    		ResultSet rs=null;
    		conn = getConnection();
    		stmt=conn.createStatement();
    		String sql = "select * from tb_user";
    		rs = stmt.executeQuery(sql);//执行sql语句  结果保存在rs里
    		while(rs.next()){//每次只访问一行  必须先调用next 因为如同指向空头节点 return true if the new current row is valid; false if there are no more rows
    			System.out.println(rs.getString("name"));
    		}
    		 //  前面的链接和结果让前面的代码继续抛 main throws
    		sql="insert into tb_user(name,email) values('jerry','123@123')";
    		stmt.executeUpdate(sql);
    		close(rs);// 是种资源。按顺序关闭 不能一起放一个try里不然抛出异常会导致后面close失败 所以要分别
    		close(stmt);  //内部都可以捕获 异常 
    		close(conn);
    		//crud 
    
    	}
    	public static void close(Object toClose){
    		//利用反射机制
    		Class theClass=toClose.getClass();//得到参数的类
    		try {
    			Method close = theClass.getMethod("close");//找到这个类叫colse的方法
    			close.invoke(toClose);//对某个对象做close方法
    			//规律 改变方法属性时要用方法确定这些方法属性从属于哪个对象
    		} catch (NoSuchMethodException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (SecurityException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IllegalArgumentException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (InvocationTargetException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	/*
    	public static void close(Connection conn) {
    		try {
    			conn.close();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public static void close(Statement stmt) {
    		try {
    			stmt.close();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public static void close(ResultSet rs) {
    		try {
    			rs.close();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}*/
    	//总是要用到的代码   外面的也可以链接这个数据库
    	public static Connection getConnection() throws ClassNotFoundException, SQLException {
    		Connection conn;
    		Class.forName(driver);
    		String password="";
    		String url="jdbc:mysql://localhost:3306/chat?useUnicode=true&characterEncoding=UTF-8";
    		String user="root";
    		conn = DriverManager.getConnection(url,user,password);
    		return conn;
    	}
    
    }
    

    Bank

    import java.lang.reflect.Field;
    
    public class Bank {
    	private int money;
    	
    	public int getMoney() {
    		return money;
    	}
    	public void setMoney(int money) {
    		this.money = money;
    	}
    
    }
    
    

    User

    import java.lang.reflect.Field;
    
    public class User {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Bank bank = new Bank();
    		Class<? extends Bank> bankClass = bank.getClass();
    		Field money;
    		try {
    			money = bankClass.getDeclaredField("money");
    			money.setAccessible(true);//money原本是私有的 改变访问规则
    			money.setInt(bank, 100);//应该修改字段的对象
    			System.out.println(bank.getMoney());
    		} catch (NoSuchFieldException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (SecurityException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}//反射字段 属性名
    		catch (IllegalArgumentException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    		
    	}
    
    }
    
    

  • 相关阅读:
    day7随笔
    day6随笔
    day5笔记
    uniapp 全屏蒙版下的其他view禁止滑动
    uniapp scroll-view 组件右侧的滚动条
    uni 组件 头部
    根据两点的经纬度查询两点间的距离
    仅供学习使用的一些 相关vue类
    仅供学习使用的一些样式+行为
    百度地图简单调用
  • 原文地址:https://www.cnblogs.com/leefree/p/12747374.html
Copyright © 2020-2023  润新知