• Java通过JDBC访问数据库


    1.工作中难免会和数据库打交道,访问数据库前提就需要和数据库建立连接,才能进行读写操作。

    2.Java提供了一个API也就是JDBC(Java Data Base Connectivity),可以为多种关系数据库提供统一访问和操作,它由一组用Java语言编写的类和接口组成。

     

    • 没有jdbc之前
      java开发人员需要维护不同的数据库的驱动程序,如果数据库的底层实现改变,驱动程序可能会随之改变!!

    这里写图片描述

    • 有了jdbc之后:
      java开发人员只需维护java应用和一套规范,也就是jdbc接口。数据库厂商提供具体的java驱动程序,数据库厂商的底层实现改变,厂商随之更新驱动程序,而不影响java应用程序!!

    这里写图片描述

    3.具体步骤

      1. 导入数据包
        需要包括含有需要进行数据库编程的JDBC类的包。大多数情况下,使用 import java.sql.* 就可以了.

      2. 添加JDBC驱动程序包
        添加jar程序驱动包http://www.mysql.com/downloads/connector/j,初始化驱动程序,可以与数据库打开一个通信通道。

      3. 打开数据库连接
        需要使用DriverManager.getConnection() 方法创建一个Connection对象,它代表与数据库的物理连接。

      4. 执行数据库操作
        需要使用类型声明的对象建立并提交一个SQL语句到数据库。

      5. 从结果集中提取数据
        要求使用适当的关于ResultSet.getXXX()方法来检索结果集的数据。

      6. 清理环境
        需要明确地关闭所有的数据库资源相对依靠JVM的垃圾收集。

    <----------------------------------------------------------------------------------------------->

    编写JDBCUtil类

    package com.jdbc.util;

    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;

    public class JDBCUtil {
        
        // 驱动包,数据库url,用户名,密码
        private static String url = null;
        private static String driverClass = null;
        private static String user = null;
        private static String password = null;
        
        static{
            try {
                //读取db.properties文件
                Properties prop = new Properties();
                /**
                 * 使用类路径的读取方式
                 *  / : 斜杠表示classpath的根目录
                 *     在java项目下,classpath的根目录从bin目录开始
                 *     在web项目下,classpath的根目录从WEB-INF/classes目录开始
                 */
                InputStream in = JDBCUtil.class.getResourceAsStream("/db.properties");
                //加载文件
                prop.load(in);
                //读取信息
                url = prop.getProperty("jdbcUrl");
                driverClass = prop.getProperty("dirverclass");
                user = prop.getProperty("user");
                password = prop.getProperty("password");
                //注册驱动程序
                Class.forName(driverClass);
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("驱程程序注册出错");
            }

        }
        
        /**
         * 打开数据库驱动连接
         */
        public static Connection getConnection(){
            try {
                Connection conn = DriverManager.getConnection(url, user, password);
                return conn;
            } catch (SQLException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }

        /**
         * 清理环境,关闭连接(顺序:后打开的先关闭)
         */
        public static void close(Connection conn,Statement stmt,ResultSet rs){
            if(rs!=null)
                try {
                    rs.close();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                    throw new RuntimeException(e1);
                }
            if(stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
        }
        //测试
        public static void main(String[] args) {

            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;

            conn=JDBCUtil.getConnection();
            try {
                 stmt=conn.createStatement();
                 //sql语句
                 String sql= "SELECT id, name FROM temp";
                 rs = stmt.executeQuery(sql);

                 //从结果集中提取数据
                 while(rs.next()){
                      int id  = rs.getInt("id");
                      String name = rs.getString("name");

                      System.out.print("ID: " + id);
                      System.out.println(", Name: " + name);
                 }
               } catch (SQLException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
               }finally{
                   JDBCUtil.close(conn, stmt, rs);
               }
          }
    }

    <----------------------------------------------------------------------------------------------->

    配置文件db.properties

    user=root
    password=
    jdbcUrl=jdbc:mysql://localhost:3306/test
    dirverclass=com.mysql.jdbc.Driver

  • 相关阅读:
    专题1
    HDU-6968(DP,和DP)
    ios环境下H5 input 选择图片在函数回调中失效的问题
    vue自定义组件的坑:数组绑定与引号的使用
    关于布局的胡言乱语
    flex布局小结
    微信小程序中overflow:scroll失效的问题
    微信小程序图片的比例问题
    vue用多了反而疏忽了选择器的使用
    在vue项目中做一个类ctrl+f的搜索功能
  • 原文地址:https://www.cnblogs.com/DanielJing/p/6384615.html
Copyright © 2020-2023  润新知