心得5--JDBC回顾-主讲将驱动配置方法抽离成单独类

2024-04-06 16:58

本文主要是介绍心得5--JDBC回顾-主讲将驱动配置方法抽离成单独类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.  基础知识回顾

(1)JDBC全称为:Java DataBase Connectivity(java数据库连接),它主要由接口组成。

(2)组成JDBC的2个包: java.sql、javax.sql开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。

(3编写程序,在程序中加载数据库驱动

   Class.forName(“com.mysql.jdbc.Driver”);//大部分用这个

   DriverManager. registerDriver(Driver driver)

DriverManager.registerDriver(newDriver()),注意:在实际开发中,并不推荐采用这个方法注册驱动。查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。推荐方式:Class.forName(“com.mysql.jdbc.Driver”);采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要import驱动的API,这样可使程序不依赖具体的驱动,使程序的灵活性更高。

建立连接(Connection)Connection conn =DriverManager.getConnection(url,user,pass);创建用于向数据库发送SQL的Statement对象,并发送sql:Statement st =conn.createStatement();ResultSet rs = st.excuteQuery(sql);

从代表结果集的ResultSet中取出数据,打印到命令行窗口;断开与数据库的连接,并释放相关资源

(4)常用数据库URL地址的写法:

Oracle写法:jdbc:oracle:thin:@localhost:1521:sid

SqlServer-jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid

MySql-jdbc:mysql://localhost:3306/sid

l     Mysql的url地址的简写形式: jdbc:mysql:///sid

l    常用属性:useUnicode=true&characterEncoding=UTF-8

2.  具体案例分析

案例一

package com.code;

 

import java.sql.Connection;

importjava.sql.DriverManager;

import java.sql.ResultSet;

importjava.sql.SQLException;

import java.sql.Statement;

 

public class Demo1 {

static Connection con = null;

static Statement st = null;

static ResultSet rs = null;

public static void main(String[] args) {

    try {

       //1.加载驱动

       Class.forName("com.mysql.jdbc.Driver");

       //2.创建连接

       String url = "jdbc:mysql://Localhost:3306/jdbcdb";

       con = DriverManager.getConnection(url, "root","root");

       //3.创建对象

       st = con.createStatement();

       String sql = "select id,name,password,email,birthday fromusers";

       ResultSet rs = st.executeQuery(sql);

       while(rs.next()){ //就算不用循环遍历也要用一句next()方法代码,因为ResultSet结果集中的对象指针默认的指示在第一行代码的上面

             System.out.println(rs.getInt("id"));

             System.out.println(rs.getString("name"));

         System.out.println(rs.getString("password"));

             System.out.println(rs.getString("email"));

        System.out.println(rs.getString("birthday"));

       }

    } catch (ClassNotFoundException e) {

       // TODO Auto-generatedcatch block

       e.printStackTrace();

    }catch(SQLException e){

       e.printStackTrace();

    }finally{

       if(rs!=null)

       try {

          rs.close();

       } catch (SQLException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

       }

       if(st!=null)

       try {

          st.close();

       } catch (SQLException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

       }

       if(con!=null)

       try {

          con.close();

       } catch (SQLException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

       }

    }    

}

}

案例二:

Demo2.class

packagecom.code;

 

importjava.sql.Connection;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importcom.Db.DbManager;

publicclass Demo2 {

   publicvoid insert(){

      Connection con = DbManager.getConnection();

      Statement st = null;

      try {      

           st = con.createStatement();  //创建对象

           String sql = "insert into users values(5,'杨凯','123','ghjhj','1991-01-01')";

           int i =st.executeUpdate(sql);  //executeUpdate()方法返回的是int

           if(i>0){

               System.out.println("插入成功!!");

           }

         } catch (SQLException e) {

         // TODO Auto-generated catch block

           e.printStackTrace();

      }finally{

         DbManager.closeDB(con, st, null);

      }

  

   publicvoid update(){

      Connection con = DbManager.getConnection();

      Statement st = null;

      try {      

           st = con.createStatement();

           String sql = "update users set name = '洋洋' where id=1";

           int i = st.executeUpdate(sql);

           if(i>0){

               System.out.println("修改成功!!");

           }

         } catch (SQLException e) {

         // TODO Auto-generated catch block

           e.printStackTrace();

      }finally{

         DbManager.closeDB(con, st, null);

      }

   }

   publicvoid delete(){

      Connection con = DbManager.getConnection();

      Statement st = null;

      try {      

           st = con.createStatement();

           String sql = "delete from users whereid=5";

           int i = st.executeUpdate(sql);

           if(i>0){

               System.out.println("删除成功!!");

           }

         } catch (SQLException e) {

         // TODO Auto-generated catch block

           e.printStackTrace();

      }finally{

         DbManager.closeDB(con, st, null);

      }

   }

   publicvoid query(){

      Connection con = DbManager.getConnection();

      Statement st = null;

      ResultSet rs = null;

      try {      

           st = con.createStatement();

           String sql = "selectid,name,password,email,birthday from users";

           rs = st.executeQuery(sql);

           while(rs.next()){

               System.out.println(rs.getInt("id"));

               System.out.println(rs.getString("name"));

               System.out.println(rs.getString("email"));

               System.out.println(rs.getString("birthday"));    

           }

         } catch (SQLException e) {

         // TODO Auto-generated catch block

           e.printStackTrace();

      }finally{

         DbManager.closeDB(con, st, rs);

      }

   }

   publicstaticvoid main(String[] args) {

      Demo2 d = new Demo2();

      d.delete();

 

   }

 

}

DbManager.class  //驱动配置类

packagecom.Db;

 

importjava.io.IOException;

importjava.io.InputStream;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importjava.util.Properties;

 

publicclass DbManager {

   static Stringdriver;

   static Stringurl;

   static Stringusername;

   static Stringpassword;

 

   static{

      InputStreamin=DbManager.class.getClassLoader().getResourceAsStream("db.properties");

      //getClassLoader()方法是个类加载器,来获取类源输入流

      Properties pro=new Properties(); //properties表示一个持久的属性集,可保存在流中或从流中加载。属性列表中每一个键及其值都是一个字符串

      try {

         pro.load(in);  // 从输入流中读取属性列表(键和元素对)

      } catch (IOException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

     

      driver = pro.getProperty("driver"); //用指定键在属性列表中搜索属性。

      url = pro.getProperty("url");    

      username = pro.getProperty("username");    

      password = pro.getProperty("password");

      try {

         Class.forName(driver);

      } catch (ClassNotFoundException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      }

     

   }

   publicstatic Connection getConnection(){

      Connection con=null;    

      try {

      con=DriverManager.getConnection(url,username,password);

         System.out.println("成功了");

      } catch (SQLException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      }

      return con;

   }

   publicstaticvoid closeDB(Connection con,Statementst,ResultSet rs){

      if(rs!=null){ //要先判断改属性是否为空,省的执行不必要的代码,浪费系统资源

         try {

           rs.close();

         } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

         }

      }

      if(st!=null){

         try {

           st.close();

         } catch (SQLException e) {

            // TODO Auto-generated catch block

           e.printStackTrace();

         }

      }

      if(con!=null){

         try {

           con.close();

         } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

         }

      }    

  

   publicstaticvoid main(String[] args) {

      getConnection();   //调用方法

   }

}

 

这篇关于心得5--JDBC回顾-主讲将驱动配置方法抽离成单独类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/880365

相关文章

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示