• 课堂笔记【java JDBC】


    目录

    JDBC简介

    工作原理:

    工作过程:

    JDBC驱动与连接

    JDBC驱动

    连接JDBC驱动

    1.下载特定数据库的JDBCjar包

    2.加载并注册数据库驱动

    3.连接驱动

    JDBC常见API

    JDBC数据查询

    一般查询

    1.接口详解

    2.一般查询示例程序

    JDBC数据维护

    数据维护一般流程

    更新数据

    插入数据

    1.插入单条记录

    2.批量插入数据

    删除数据

    拓展

    JDBC中设置Date类型参数

    1.手动设置时间

    2.自动获取本地时间


    JDBC简介

    JDBC:JDBC在应用程序与数据库之间起到了一个桥梁作用,当应用程序使用JDBC访问特定的数据库时,只需要通过不同的数据库驱动与其对应的数据库进行连接,连接后即可对该数据库进行相应的操作。

    工作原理:

    工作过程:

    JDBC驱动与连接

    JDBC驱动

    由JDBC驱动直接访问数据库

    优点:纯java,快,跨平台

    缺点:访问不同的数据库需要下载专用的JDBC驱动

    连接JDBC驱动

    1.下载特定数据库的JDBCjar包

    到使用的数据库的官网上下载,本文会提供mysql-connector-java-5.1.39-bin.jar jar包

    2.加载并注册数据库驱动

    方法一:写代码(只用于一次程序,不推荐)

    //Class.forName("Driver全名");
    Class.forName("com.mysql.jdbc.Driver");//以mysql数据库为例

    方法二:将jar包复制到java运行环境jre文件中(适用于JDBC4.0以后)

    (1)找到java文件,将jar包放到jdk下,jre下,lib下,ext中。

    (2)找到java文件,将jar包放到jre下,lib下,ext中。

    注意:如果使用第三方软件编程(如:eclipse)则一定要复制jar包到公共jre中

    3.连接驱动

    (1)getConnection方法详解

    DriverManager.getConnection(String url,String user,String password);
    /*url:定位符,找到本机数据库
    *jdbc:数据库服务名://主机名:端口号/创建的数据库名*/
    //user:连接数据库时登录的用户名
    //password:连接数据库时的登录密码
    //例:
        //1、加载并注册数据库驱动。
    	Class.forName("com.mysql.jdbc.Driver");
        //2、通过DriverManager获取数据库连接。
    	Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");

    JDBC常见API

    1.Driver:Driver接口是所有JDBC驱动程序必须实现的接口,用于加载驱动。一次程序的运行中,只需要加载一次。

    2.DriverManager:使用该类注册驱动

    3.Connection:连接数据库的对象

    4.Statement:执行静态的SQL语句,并返回一个结果对象(繁琐,不安全)

    5.ResultSet:结果集对象(封装了查询结果的数据)

    6.PreparedStatement:Statement的子接口,用于执行预编译的SQL语句。(也是通过Connection进行获取)

    JDBC数据查询

    一般查询

    1.接口详解

    一般查询需要JDBC API中的Statement接口与ResultSet接口

    Statement接口:

    (1)由Connection产生;

    (2)Statement对象用于将SQL语句发送到数据库中;

    (3)在JDBC API 中通常有3种Statement对象,它们都可以作为在给定连接上执行SQL语句的容器。

    3种Statement对象
    Statement用于无参数的查询

    PreparedStatement

    (预编译SQL语句)

    用于带参数的查询,当SQL语句多次运行,使用该对象可提高运行效率。
    CallableStatement用于调用存储过程

    (4)Statement与PreparedStatement对象的创建

    //使用Connection对象的createStatement方法,创建Statement对象(conn为Connection对象)
    Statement stmt=conn.createStatement();
    //使用Connection对象的prepareStatement方法,创建PreparedStatement对象
    PreparedStatement pstmt =conn.prepareStatement("要执行的SQL语句");

    (5)Statement对象的方法

    //适用于执行select语句
    public ResultSet executeQuery()throws SQLException;
    //适用于执行insert,update,delete等数据修改和维护语句
    public 行数 executeUpdate(String sql)throws SQLException;

    ResultSet接口:

    (1)ResultSet对象用于包含符合SQL语句中条件的所有记录,它的组织结构类似于一张临时表。

    (2)ResultSet接口自带游标,只有使用next()方法才可使游标转到ResultSet对象中的第一行。

    (3)getXxx()方法,用于返回当前行中指定列索引columnNumber或列名字columnName的数据。

    /*语法:
    XXX getXXX (int columnNuber);
    XXX getXXX (String columnName);*/
    //例:
    int id =resultSet.getInt("id");
    String name=resultSet.getString("name");

    (4)close()用于关闭ResultSet对象

    2.一般查询示例程序

    (1)一般查询执行步骤

    (2)一般查询执行程序(以mysql为例)

    	public static void main(String[] args) {
    		try {
    			//1.注册驱动(已将JDBC Driver jar包放入ext文件中可不写)
    			Class.forName("com.mysql.jdbc.Driver");
    			//2.获取数据库连接对象
    			//如果对象是主机,并端口号是默认值:3306,url可简写:"jdbc:mysql:///jdbc"
    			Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
    			//3.获取SQL语句的执行对象
                            //此处使用Statement接口的子接口PreparedStatement更安全
    			PreparedStatement pstmt=conn.prepareStatement("select*from users");
    			//4.执行SQL语句,调用executeQuery查询方法
    			ResultSet resultSet=pstmt.executeQuery();
    			//5.处理结果集
    			while(resultSet.next()){//next方法返回值为boolean类型
    				int id =resultSet.getInt("id");//getXxx方法:可以根据列号与列名获取
    				String name=resultSet.getString("name");
    				String password=resultSet.getString(3);
    				String email=resultSet.getString(4);
    				
    				System.out.println(id+" "+name+" "+password+" "+email);
    			}
    			//6.关闭流释放资源
    			conn.close();
    			pstmt.close();
    			resultSet.close();
    		} catch (Exception e) {
    			
    			e.printStackTrace();
    		}
    	}

    JDBC数据维护

    会使用到的Statement的方法

    //适用于执行insert,update,delete等数据修改和维护语句
    public 行数 executeUpdate(String sql)throws SQLException;

    数据维护一般流程

    更新数据

    例1:
    public static void main(String[] args) throws Exception {
    		//1.注册驱动
    	    //Class.forName("com.mysql.jdbc.Driver");
    		//2.获取数据库连接
    		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
    		//3.获取SQL语句的执行者
    		PreparedStatement pstmt=conn.prepareStatement("UPDATE users SET NAME='tc' WHERE id=?");
    		//给占位符进行填充数据
    		pstmt.setObject(1, "1");//
    		//4.执行SQL语句
    		int count=pstmt.executeUpdate();//返回值是int数组
    		//5.处理结果集
    		if(count>0){
    			System.out.println(count+"行受到影响");
    		}else{
    			System.out.println("更改失败");
    		}
    		//6.释放资源
    		conn.close();
    		pstmt.close();
    	}
    例2:
    String sql="update users set email='ef@.com' where name='ert'";

    插入数据

    1.插入单条记录

    请回顾Statement接口详解

    例1:
    public static void main(String[] args) {
    		try{
    			//1.注册驱动
    			//Class.forName("com.mysql.jdbc.Driver");
    			//2.获取数据库连接
    			Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
    			//3.准备insert SQL语句
    			String sql="INSERT INTO users(name,password,email,birthday) VALUES(?,?,?,?)";
    			//4.设置参数,注意所使用的参数的数据类型
    			PreparedStatement pstmt=conn.prepareStatement(sql);
    			pstmt.setString(1, "cm");pstmt.setString(2, "1234556");
    			pstmt.setString(3, "228567@qq.com");
    			SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );//设置日期格式
    			java.util.Date date = sdf.parse( "2002-5-6" );//设置日期参数
    			long lg = date.getTime(); // 日期 转 时间戳
    			pstmt.setDate(4, new java.sql.Date( lg ));
    			//5.执行SQL语句
    			int count=pstmt.executeUpdate();
    			//6.判断执行结果,返回值大于1则成功插入一条数据
    			if(count>0){
    				System.out.println("记录成功");
    			}else{
    				System.out.println("记录失败");
    			}
    			conn.close();
    			pstmt.close();
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    
    	}
    例2:
    
    public static void main(String[] args) {
    		try{
    			//1.注册驱动
    			//Class.forName("com.mysql.jdbc.Driver");
    			//2.获取数据库连接
    			Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
    			//3.准备insert SQL语句
    			String sql="insert into users(name,password,email,birthday) values('wm','123456','wer@.com','1984-05-17');";
    			PreparedStatement pstmt=conn.prepareStatement(sql);
    			SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );//设置日期格式
    			java.util.Date date = sdf.parse( "2002-5-6" );//设置日期参数
    			long lg = date.getTime(); // 日期 转 时间戳
    			pstmt.setDate(4, new java.sql.Date( lg ));
    			//4.执行SQL语句
    			int count=pstmt.executeUpdate();
    			//5.判断执行结果,返回值大于1则成功插入一条数据
    			if(count>0){
    				System.out.println("记录成功");
    			}else{
    				System.out.println("记录失败");
    			}
                //6.关闭接口
    			conn.close();
    			pstmt.close();
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    
    	}
    

    2.批量插入数据

    采用批量提交的方式,使用addBatch(String sql)方法添加批量操作SQL语句,然后用executeBath()方法对所提交的多个SQL语句进行批量操作。

    注:批量操作只适用于DML(增删改操作)

    Satement对象的executeBath()方法

    public int[] executeBatch() throws SQLException;//该语句不能执行具有返回结果集的SQL语句
    //例:
    public static void main(String[] args) throws Exception {
    				//1.加载驱动
    				//Class.forName("com.mysql.jdbc.Driver");
    				//2.获取数据库连接
    				Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
    				//3.准备3个插入SQL语句
    				String sql="INSERT INTO users(name,password,email)VALUES(?,?,?)";
    				//4.创建PreparedStatement对象
    				PreparedStatement pstmt=conn.prepareStatement(sql);
    				//5.设置参数
    				pstmt.setString(1, "jdh");
    				pstmt.setString(2, "3452");
    				pstmt.setString(3, "32438@.com");
    				//6.添加一次预定义参数
    				pstmt.addBatch();
    				//7.设置参数
    				pstmt.setString(1, "jdsh");
    				pstmt.setString(2, "34322");
    				pstmt.setString(3, "132438@.com");
    				//8.再添加一次预定义参数
    				pstmt.addBatch();
    				//9.批量执行预定义SQL
    				int []count=pstmt.executeBatch();
    				//10.判断执行结果,返回值大于1则成功插入一条数据
    				if(count[0]>0){
    					System.out.println("记录成功");
    				}else{
    					System.out.println("记录失败");
    				}
                    //11.关闭流    
    				conn.close();
    				pstmt.close();
    				
    	}

    删除数据

    例1:
    public static void main(String[] args) throws Exception {
    		//1.注册驱动
    		//Class.forName("com.mysql.jdbc.Driver");
    		//2.获取数据库连接
    		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345");
    		//3.准备DELETE SQL语句
    		String sql="DELETE FROM users WHERE id=?";
    		//4.使用Connection接口的prepareStatement方法创建PreparedStatement对象
    			//将SQL语句发送到数据库中
    		PreparedStatement ps=conn.prepareStatement(sql);
    		//5.设置参数
    		ps.setString(1,"1");
    		//6.//执行SQL语句
    		int ret=ps.executeUpdate();
    		//7.//判断执行结果
    		if(ret>0){
    			System.out.println("记录删除成功!!");
    		}else{
    			System.out.println("记录删除失败!!");
    		}
    		//8.关闭Connection和PreparedStatement对象
    		conn.close();
    		ps.close();
    	}
    例2:
    String sql="delete from users where name='tsa'";

    拓展

    JDBC中设置Date类型参数

    1.手动设置时间

    PreparedStatement 的 setDate 方法使用的是 java.sql.Date 类型的日期参数。

    设置这种参数的方法,例子:

    SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );//设置时间格式
    
    java.util.Date date = sdf.parse( "2015-5-6 10:30:00" );//设置时间
    
    long lg = date.getTime();    // 日期 转 时间戳
    
    PreparedStatement pst = conn.prepareStatement(sql);   // 创建 PreparedStatement 对象
    
    ps.setDate( 3, new java.sql.Date( lg ) );

    2.自动获取本地时间

    如果要在java代码中向数据库插入数据,可使用TimeStamp对象:创建java.util.Date对象,转换成TimeStamp对象(java.sql.Date对象不能保存时间,utils的可以)插入数据库(TimeStamp继承自java.sql.Date,数据库中自动转换成Date)

    (1)ps.setTimestamp(1, new java.sql.Timestamp(System.currentTimeMillis()));
    
    (2)java.sql.Date date = new java.sql.Date(System.currentTimeMillis());//获取当前时间
    
    java.util.Date date = new java.util.Date();    // 获取一个Date对象
    
    Timestamp timeStamp = new Timestamp(date.getTime()); 
    
       //   将日期时间转换为数据库中的timestamp类型
    
    pstmt.setTimestamp(2, timeStamp);

    注:本文参考:杨夏老师的《java核心技术》课程、王敏老师的《java高级开发》课程、Java 2 实用教程(耿祥义)、网络上的资料。

  • 相关阅读:
    Hadoop集群安装
    Oracle ORA01555(快照过旧)
    selenium+java+testng+ant环境搭建
    selenium ssl
    watir识别IE版本号
    ruby and watir中timeout类的用法
    使用TestNGxslt
    ruby system用法
    IE6下调用inetcpl.cpl清除COOKIE的方法
    Shell实例:字符串操作 逻辑判断
  • 原文地址:https://www.cnblogs.com/zhushen/p/14039552.html
Copyright © 2020-2023  润新知