• 【JDBC】JDBC操作实战


    JDBC

    jdbc:是使用java语言对数据进行操作

    1).常见接口、类

    	 ①java.sql.Connection:		数据库连接,只有先获得Connection对象才能连接到数据库
    		常见方法:
    			prepareStatement(sql语句); 创建发送sql语句工具的方法
    
    	 ②java.sql.PreparedStatement:	发送sql语句的工具,具备发送sql的功能(方法)
    		常见方法:
    			executeQquery();		发送查询sql,并返回结果集
    			executeUpdate();		发送增、删、改的sql,返回受影响行数的int类型
    			setXXX(序号, 值);	设置sql内的占位参数(?)
    
    	 ③java.sql.ResultSet:			结果集,数据库执行sql返回查询的结果,光标默认在第一行(不是数据),下图
    		常见方法:
    			next();				游标下移一行
    			getXXX(“字段名”);		获得当前行的字段名的值; 例如:int id = rs.getInt(id);
    			getXXX(int index);		获得当前行指定序号列的值; 例如:int id= rs.getInt(1);
    			getString()/getDate()/getInt()/getDouble()…
    
    	 ④java.sql.Driver:			驱动类,访问数据库的方式,不同数据库会自动提供具体的实现接口
    
    	 ⑤java.sql.DriverManager:		管理多个驱动
    			getConnection(url, uid, pw); 获得数据库连接,url:”jdbc:oracle:thin:@ip:端口:实例名(orcl)”
    
    	 ⑥java.sql.ResultSetMetaData; 	对结果集ResultSet的进一步操作,其包含了结果集表的所有信息
    			例如:打印表t
    			ResultSet rs = preparedStatement.executeQuery();
    		    ResultSetMetaData rmd = rs.getMetaData();
    			//打印一行字段名:
    			for(int i = 1; I < rmd.getColumnCount(); i++) 
    				System.out.print(rmd.getColumnLabel(i) + “	”);
    			System.out.println();
    			//逐行打印数据
    			while(rs.next()) {
    				for(int I = 1; i < rmd.getColumnCount(); i++) {  //获取查询结果字段的个数	
    					System.out.print(rs.getString(i) + “	”);
    				}
    			}	
    

    2).JDBC操作步骤

    	 准备阶段:先导入ojdbcX.jar包(例如:将ojdbc6.jar复制到项目的lib文件夹—build path—add to build path)
    	 ①加载驱动:
    Class.forName(“oracle.jdbc.OracleDriver”);
    
    	 ②获得数据库连接
    		Connection conn = DriverManager.getConnection(url, username, password);
     		url: jdbc:oracle:thin:@ip:端口:orcl/xe(实例)
    
    	 ③创建发送sql语句的工具,并发送
    		PreparedStatement psmt = conn.prepareStatement(“sql语句”);
    		// PreparedStatement psmt = conn.prepareStatement(“insert into emp values(?, ?)”); //占位参数
    		// psmt.setInt(1, 1001); psmt.setString(2, ‘jwnming’);
    		psmt.executeUpdate();		//发送增、删、改的sql命令,返回受影响行数的int类型
    		psmt.executeQuery();		//发送查询的sql命令,返回查询的结果集(ResultSet)
    
    	 ④处理查询的结果集
    		ResultSet rs = psmt.executerQuery();
    		rs.next(); //使当前行,为数据的第一行
    		System.out.println(rs.getInt(“id”));  //打印当前行的id值
    		System.out.println(rs.getString(1));  //打印当前行的第一个字段值
    
    	 ⑥释放资源:先创建的后关闭
    		if(rs != null) rs.close();		先判断是否为空
    		if(psmt != null) psmt.close();
    		if(conn != null) conn.close();
    

    3).驱动加载剖析、动态sql语句

    1. 驱动加载剖析
    DriverManager管理驱动
      	 //管理驱动
      	 public class DriverManager{
       	    private static List<Driver> drivers  = new CopyOnWriteArrayList<>();//存放多个driver对象.
        	    //真正的注册驱动的代码.
         	public static void registDriver(Driver driver){
             	drivers.add(driver);
          	}
          	public static Connection getConnection(String url,String user,String password){
          	    //...
         	}
      	 }
    
     驱动加载
       	// 表面书写: Class.forName("oracle.jdbc.OracleDriver")
       	// 如何实现驱动加载?
      	public class OracleDriver implements Driver{
            //加载驱动
            static{
                Driver driver = new oracle.jdbc.OracleDriver();//创建驱动
                DriverManager.registDriver(driver);//添加驱动对象, 注册驱动,  加载驱动.
            }
       	}
    
    2. 动态访问数据库的sql
    方式1:  SQL字符串拼接,将数据通过字符串拼接,绑定在SQL语句中;
    	缺点:sql注入
    	例如:String sql = “select * from employees where name = ‘” + name +”’”;
    
    方式2:  pstm动态参数:? 方式只能动态绑定数据/值的部分 
    
    优点: 防止SQL注入.
    缺点: 不能动态绑定  sql的关键词,列名..
    
    步骤:
    ①. 创建SQL允许将值,用? 站位: `delete from t_person where name = ?`
       pstm = conn.prepareStatement("delete from t_person where name = ?");
       // insert into t_person values(?,?,?,?,?);
    ②. 绑定参数:对?站位的值,进行替换,绑定.
       //pstm.setXxxx(?的序号从1开始,要绑定的具体值);// 将数据绑定在指定的?位置.
    
       pstm.setInt();  //绑定整数类型的值
       pstm.setString() //绑定字符串的值
       pstm.setDouble();// 绑定double的值
       pstm.setDate();//绑定日期.
    ③. 发送sql(执行)
       pstm.executeUpdate();//执行增删改
       pstm.executeQuery();//执行查询.
    

    4).批处理(批量更新数据)

    批更新(BatchUpdate) :  **PreparedStatement**核心
    1. 将绑定的参数,缓存在java本地.
       pstm.addBatch()
    2. 将缓存在java本地的多组参数,一次性发送给Oracle.
       pstm.executeBatch()
    例如:
    		for(int i = 0; i < 10000; i++) {
    			psmt1.setString(1, name);
    			psmt1.addBatch();
    			if(i % 600 == 0) {
    				psmt1.executeBatch();
    			}
    		}
    	psmt1.executeBatch();
    
  • 相关阅读:
    SDN第三次作业
    SDN第二次上机作业
    SDN第二次作业
    JAVA小记
    算法笔记
    排序
    SDN期末作业
    SDN第五次上机作业
    SDN第四次上机作业
    SDN第四次作业
  • 原文地址:https://www.cnblogs.com/jwnming/p/13634741.html
Copyright © 2020-2023  润新知