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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM