JDBC1:数据库连接和数据库增删改查

一.数据库整体

0.总体概括

在这里插入图片描述

1.示意图

在这里插入图片描述
在这里插入图片描述

二.数据库连接

1.数据库连接描述

在这里插入图片描述
在这里插入图片描述

2.描述

导入java.sql的驱动的包

①通过读取配置信息来获取用户信息和驱动信息

	InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
	Properties pros = new Properties();
	pros.load(is);
				
	String user = pros.getProperty("user");
	String password = pros.getProperty("password");
	String url = pros.getProperty("url");
	String driverClass = pros.getProperty("driverClass");

②加载驱动并注册

	Class.forName(driverClass);
	//类的静态代码块注册驱动

③获取连接

	Connection conn = DriverManager.getConnection(url, user, password);

三.数据库的增删改查

1.数据库的增删改示意图

在这里插入图片描述

  • 增删改
    在这里插入图片描述
  • 查询
    在这里插入图片描述

2.数据库增删改描述

①获取连接(同上)

②利用Connetion获取preparedStatemenr实例

  • 获取实例

      String sql = "insert into customers(name,email,birth) values(?,?,?)";//?占位符 		
      PreparedStatement ps = conn.prepareStatement(sql);
    
  • 填充占位符

      ps.setString(1, "哪吒"); 		
      ps.setString(2, "enzha@qq.com"); 		
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 		
      java.util.Date date = sdf.parse("1000-01-01"); 		
      ps.setDate(3, new Date(date.getTime()));
    
  • 执行操作

      ps.execute();
    

③关闭资源

	ps.close();
	conn.close();

3.数据库查询描述

①获取连接(同上)

②利用Connetion获取preparedStatemenr实例(同上)

		String sql = "select id,name,email,birth from customers where id = ?";
		ps = conn.prepareStatement(sql);
		ps.setObject(1, 1);
		//增删改执行ps.execute无返回,此时需要有返回结果集,调用ps.executeQuery();返回结果集
		resultSet = ps.executeQuery();

③处理结果集并赋值给对象

  • 通过结果集来访问每条数据

      resultSet.next() 		 
      Object columnvalue = resultSet.getObject(i+1);
    
  • 获取结果集的元数据,通过结果集的元数据获取列数和获取列名,

      ResultSetMetaData rsmd = resultSet.getMetaData(); 		
      int column = rsmd.getColumnCount(); 		
      String columnName = rsmd.getColumnName(index);
    
  • 利用结果集和元数据以及类的反射初始化类属性(整体代码)

      ResultSetMetaData rsmd = resultSet.getMetaData(); 		
      int column = rsmd.getColumnCount(); 		
      if(resultSet.next()){//next作用判断结果集下一条是否发有数据,有数据返回true指针下移,没有数据返回false指针不下移 			
      		Customer cust = new Customer(); 					
      		for(int i = 0;i < column;i++){//处理结果集一行数据的每一个列 	
      		//获取列值
      			Object columnvalue = resultSet.getObject(i+1);
      			//获取结果集中的每个列的列名
      			String columnName = rsmd.getColumnLable(i+1);
      			//给cust对象指定的某个属性columnName赋值为columnvalue,通过反射
      			Field field = Customer.class.getDeclaredField(columnName);
      			field.setAccessible(true);
      			field.set(cust, columnvalue); 			
      		} 			
      		return cust; 		
      	}
    

④关闭资源

	rs.close();
	ps.close();
	conn.close();

四.数据库查询全貌

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值