zoukankan      html  css  js  c++  java
  • JDBC的增删改写成一个方法,调用一个工具类

    package com.hx.jdbc.connection;
    
    import java.sql.Connection;
    import java.sql.Statement;
    
    import com.mysql.jdbc.UpdatableResultSet;
    
    import junit.framework.TestCase;
    
    
    public class JDBCText extends TestCase {
        /**
         * 创建一个insert,update,delete通用的方法
         * @param sql
         */
        public void upDate(String sql){
            Connection conn=null;
            Statement statement=null;        
            try {
                conn=JDBCTools.getConnection2();//调用工具类中的getConnection2()方法完成数据库连接
                statement=conn.createStatement();
                statement.executeUpdate(sql);//执行sql语句
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                JDBCTools.guanbi(statement, conn);//调用工具类中的guanbi()方法来完成关闭statement和conn
                }
                
            }

    以上是一个JDBC访问数据库的增加,修改,删除通用的方法。其中完成数据库连接和关闭数据库的***重复且通用***的操作写在了工具类JDBCTools.java中,如下:

    package com.hx.jdbc.connection;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class JDBCTools {
    
        /**
         * 这是连接数据库的方法,放到此工具类中
         * @return
         * @throws Exception
         */
        public static Connection getConnection2() throws Exception{
            //1.创建数据库的4个字符串
            
            //2.创建Properties对象
            Properties properties=new Properties();
            //3.获取jdbc.pro对应的输入流
            InputStream in=
                    JDBCTools.class.getClassLoader().getResourceAsStream("com/hx/jdbc/connection/jdbc.properties");
    //******此处重点关注******
    //**********************
    //******因为我出错了******
    //**********************
    System.out.println(in);//当时我报错上面一行代码空指针异常,此处打印in,输出null,
                      //知道上面一句代码并没访问到jdbc.properties配置文件,开始我直接写的jdbc.properties
                      //应该写根目录下的jdbc.properties
    //4.加载输入流 properties.load(in); //5.具体决定4个字符串的值 String driver=properties.getProperty("driver"); String jdbcUrl=properties.getProperty("jdbcUrl"); String user=properties.getProperty("user"); String password=properties.getProperty("password"); //6.加载数据库驱动程序 Class.forName(driver); //7.通过DriverManager的getConnection()方法获取数据库连接 Connection conn=DriverManager.getConnection(jdbcUrl, user, password); return conn; }
      /**
      *这是关闭数据库的工具方法,因为曾删改都需要用,所以写在此工具方法中
      */
    public static void guanbi(Statement statement,Connection conn){ if(statement!=null){ try { statement.close(); } catch (Exception e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (Exception e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } } }

    以上的工具代码中我出错了,出错的原因如下:

    首先用类加载资源文件的方式可以有以下三种: (包结构图) 

    1)InputStreaminStream=DaoFactory.class.getResourceAsStream("dao.properties"); 

    ​2)inStream=DaoFactory.class.getResourceAsStream("/com/jdbc/dao/dao.properties") 

    3)inStream=DaoFactory.class.getClassLoader().getResourceAsStream("com/jdbc/dao/dao.properties"); 

    第一种和第二种方式是采用Class对象去加载,第三种采用ClassLoader对象去加载资源文件,之所以Class对象也可以加载资源文件是因为Class类封装的ClassLoader的getResourceAsStream方法。从Class类中的源码中可以看出: 

    ​​之所以这样做无疑还是方便客户端的调用,省的每次获取ClassLoader才能加载资源文件的麻烦。

    路径问题:

    1. 第三种是最本质的做法,前两种也是基于第三种去实现的。JVM会使BootstrapLoader去加载资源文件。所以路径还是这种相对于工程的根目录即"com/jdbc/dao/dao.properties"(不需要“/”)。 

    2. 第一种是采用的相对路径,资源文件相对于当前这个类即(DaoFactory类)的位置,这种方式Class对象做了一些处理。即resloveName(name)这个方法。最终name还是会转换成适合第三方式的name参数 

    3. 第二种是采用绝对路径,绝对路径是相对于classpath根目录的路径(工程里src目录对应bin目录(存放.class文件的目录))。 

    然后下面是我的jdbc.properties配置文件

    driver=com.mysql.jdbc.Driver
    jdbcUrl=jdbc:mysql://localhost:3306/students
    user=root
    password=5678

    下面是调用upDate()方法进行增删改操作:

    package com.hx.jdbc.connection;
    
    public class Test {
        public static void main(String[] args) {
            String sql="INSERT INTO t_student(NAME,age,email) VALUES('78878','22','999999999')";
            //String sql="DELETE FROM t_student where id=3";
            //String sql="UPDATE t_student set name='66666',age='100',email='000' where id=3";
            JDBCText j=new JDBCText();
            j.upDate(sql);
        }
    }
  • 相关阅读:
    Java map双括号初始化方式的问题
    Koa 中间件的执行
    JavaScript 实现页面中录音功能
    Koa 中实现 chunked 数据传输
    WebAssembly 上手
    TypeScript `infer` 关键字
    Vim 插件的安装
    MySQL EXPLAIN 语句
    面向切面编程(AOP)
    CSS 类名的问题
  • 原文地址:https://www.cnblogs.com/yunqing/p/6136896.html
Copyright © 2011-2022 走看看