zoukankan      html  css  js  c++  java
  • JavaWeb学习(六) : JDBC 访问数据库 (MySql,Oracle,SQLserver)

    JDBC 是什么?

    Java DateBase Connection(看这个英文八九不离十是起到一个连接的作用)
    看下面这张图,JDBC 处于 Java 程序和 数据库中间,我们需要通过JDBC作为一个桥梁,使得两者之间存在联系。
    怎么使得两者之间建立联系呢?
    我们可以通过 Java 的一些 API 进行建立连接。   
    什么是 API 呢?
    简单来说就是 Java 中的一些 接口、方法、类。
    通过这些来建立与数据库之间的关系。
    

    JDBC 操作数据库的各个环节:

    1、JDBC API: 提供各种操作访问接口
       Connection、Statement、PreparedStatement、ResultSet
    2、JDBC DriverManager: 
       管理不同的数据库驱动,统一管理访问更加方便。
    3、各种数据库驱动:
       相应的数据库厂商提供的(第三方公司提供)
       连接(直接操作数据库)
    

    JDBC访问数据库的具体步骤(基本上是模板):

    a、导入驱动,加载具体的驱动类
    b、与数据库建立连接
    c、发送Sql,执行
    d、处理结果集 
    

    API 的功能及操作:

    API 的主要功能:

    a、与数据库建立连接
    b、发送Sql语句1
    c、返回处理结果  
    

    API的主要操作:

    a、DriverManager: 管理JDBC驱动
    b、Connection   : 连接 
    c、Statement    : 运行 Sql 语句(增删改查)
    d、CallableStatement : 调用数据库中的存储过程 / 存储函数
    e、Result       : 返回结果集
    

    各个数据库所用到的连接字符串(数据库的一些信息):

    不同的数据库对应的连接字符串不同,(形式不同,内容类似-------哪种类型的数据库、IP地址、端口号、数据库名)
    Oracle : jdbc:oracle:thin:@localhost:1521:数据库实例名 (你创建的数据库的名字)
    MySql  : jdbc:mysql://localhost:3306/数据库实例名
    SQLServer : jdbc:microsoft:sqlserver:localhost:1433;databasename = 数据库实例名
    

    数据库对应的 jar 包 及 对应的 导入驱动:

    驱动在每个数据库各自对应的 jar包中,所以需要先把各个数据库对应的包进行导入
                   
    驱 动jar:(可以在这个链接中进行查找:https://mvnrepository.com/)
    Oracle:ojdbc-x.jar
    MySql:mysql-connector-java-x.jar
    SqlServer:sqljdbc-x.jar   
                    
    导入驱动(不同的数据库对应的驱动不同)
    Oracle : oracle.jdbc.OracleDriver
    MySql  : com.mysql.jdbc.Driver
    SqlServer : com.mircrosoft.sqlserver.jdbc.SQLServerDriver
    

    实现对 MySQL 数据库的增、删、改操作:

    增、删、改 都属于对数据库的更新操作,处理结果会返回一个数表示
    几行受影响。
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class JDBPMySqlDemo {
        private static final String URL = "jdbc:mysql://localhost:3306/sqltest";
        private static final String USER = "root";
        private static final String PWD = "root";
    
        public static void update() { // 静态方法要求其内部用到的变量也应该是静态的(所以上述变量也应该设置为静态变量)
            // 因为要进行两次异常处理,所以需要将变量设置成相对于 try..catch..语句的外部变量
            Statement stam = null;         // 会抛出SQLException异常
            Connection connection = null;  // 会抛出ClassNotFoundException异常
            try {
                
                // 导入驱动(加载具体的驱动类,如果本地没有就需要从官网进行下载,然后复制到该项目中,之后 Build Path)
                Class.forName("com.mysql.jdbc.Driver");
                // 连接(通过DriverManager.getConnection(连接字符串,用户名,密码))方法进行连接
                connection = DriverManager.getConnection(URL, USER, PWD);
                // 运行SQL语句(想要运行SQL语句要先创建一个Statement对象,用这个实例对象进行操作)
                stam = connection.createStatement();
                
                // 将sql语句作为字符串进行执行
    //          String sql = "delete from student where stuno = 2";
                String sql = "insert into S values('1001','zs',23)";
                // 通过stam的方法进行执行SQL语句进行更新数据库(返回值是影响的行数 (int) )
                int count = stam.executeUpdate(sql);
                if (count > 0) {
                    System.out.println("操作成功!");
                }
            } catch (ClassNotFoundException e) {   // 出现异常时最好一个一个处理(更加安全)
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {     // 无论操作成功与否,我们都要进行关闭操作(放在Finally必定对执行)
                try {
                    // 如果还没有执行到给 stam 变量赋值就已经异常处理了,那么stam还是 null,就会null.close(),从而出现空指针的问题
                    if(stam != null) stam.close();   // 避免出现空指针
                    if(connection != null)connection.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        
        public static void main(String[] args) {
            // 将update() 设置为静态方法,便于调用
            update();
        }
    
    }
    
    

    效果展示:

    未插入数据之前:

    插入数据之后,刷新数据库:

    实现对数据库的 查询操作:

    代码:

    // 查询操作返回的是结果集 :ResultSet(需要遍历进行操作)
    package controlSql;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class SqlQuery {
    	private static final String URL = "jdbc:mysql://localhost:3306/sqltest";
    	private static final String User = "root";
    	private static final String Pwd = "root";
    
    	public static void query() {
    		Connection connection = null;
    		Statement stamt = null;
    		ResultSet rs = null;
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    
    			connection = DriverManager.getConnection(URL, User, Pwd);
    			stamt = connection.createStatement();
    			String sql = "select sno,sname from s";
    			// 查询操作 : 返回结果集
    			rs = stamt.executeQuery(sql);
    			// 指针不为空一直向下走(也可以向上走 -- rs.previous())
    			while (rs.next()) {
    				// 通过  getXxx 方法获得 数据库中每个字段的信息 
    				String sno = rs.getString("sno");
    				String sname = rs.getString("sname");
    				System.out.println(sno +"--" + sname);
    			}
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				// 用完后记得关闭,最后开的先关闭,最先开的最后关闭
    				rs.close();
    				stamt.close();
    				connection.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	public static void main(String[] args) {
    		query();
    	}
    }
    
    

    效果:

    数据库内容:

    查询结果如下:

    后记:

    其他数据库都是类似的操作,只需要加载不同的驱动即可。
  • 相关阅读:
    Mysql常见索引介绍
    Mysql字段修饰符(约束)
    使用select和show命令查看mysql数据库系统信息
    Mysql5.7数据库介绍
    对Mysql数据表本身进行操作
    各种修改Mysql字符集
    Mysql的安全配置向导命令mysql_secure_installation
    firewalld介绍
    CentOS7使用yum安装mysql5.7
    利用ASP.NET一般处理程序动态生成Web图像(转)
  • 原文地址:https://www.cnblogs.com/prjruckyone/p/12461096.html
Copyright © 2011-2022 走看看