Java連接並操作SQLServer數據庫


首先我們需要往所用的軟件中添加相對應的sqljdbc.jar。

大體流程


 

1、加載JDBC驅動程序:

  在連接數據庫之前,首先要加載想要連接的數據庫的驅動到JVM(Java虛擬機),這通過java.lang.Class類的靜態方法forName(String  className)實現。

2、提供JDBC連接的URL。

3、創建數據庫的連接:

  •要連接數據庫,需要向java.sql.DriverManager請求並獲得Connection對象, 該對象就代表一個數據庫的連接。  

  •使用DriverManager的getConnectin(String url , String username , String password )方法傳入指定的欲連接的數據庫的路徑、數據庫的用戶名和密碼來獲得。 

4、創建一個Statement:

  •要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3種類型:   
      (1)執行靜態SQL語句。通常通過Statement實例實現。   Statement stmt = con.createStatement() ;
      (2)執行動態SQL語句。通常通過PreparedStatement實例實現。 PreparedStatement pstmt = con.prepareStatement(sql) ;   
      (3)執行數據庫存儲過程。通常通過CallableStatement實例實現。   CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;  

5、執行SQL語句:

  Statement接口提供了三種執行SQL語句的方法:executeQuery 、executeUpdate和execute   
    (1)ResultSet executeQuery(String sqlString):執行查詢數據庫的SQL語句,返回一個結果集(ResultSet)對象。   
    (2)int executeUpdate(String sqlString):用於執行INSERT、UPDATE或DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等   
    (3)execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。  
     ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   
     int rows = stmt.executeUpdate("INSERT INTO ...") ;   
     boolean flag = stmt.execute(String sql) ;  

6、處理結果:

  兩種情況:   
     (1)執行更新返回的是本次操作影響到的記錄數。   
     (2)執行查詢返回的結果是一個ResultSet對象。   
      • ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些行中數據的訪問。   
      • 使用結果集(ResultSet)對象的訪問方法獲取數據:

     //(列是從左到右編號的,並且從列1開始)   
     while(rs.next()){   
         String name = rs.getString("name") ;   
        int id= rs.getInt("id") ;
     }

7、關閉JDBC對象    
     操作完成以后要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:   
     1、關閉記錄集   
     2、關閉聲明   
     3、關閉連接對象            

if(rs != null){   // 關閉記錄集   
        try{   
            rs.close() ;   
        }catch(SQLException e){   
            e.printStackTrace() ;   
        }   
          }   
          if(stmt != null){   // 關閉聲明   
        try{   
            stmt.close() ;   
        }catch(SQLException e){   
            e.printStackTrace() ;   
        }   
          }   
          if(conn != null){  // 關閉連接對象   
         try{   
            conn.close() ;   
         }catch(SQLException e){   
            e.printStackTrace() ;   
         }   
          }

一、編寫DBUtil.java


 

package Database;
import java.sql.*;

public class DBUtil {

    //這里可以設置數據庫名稱
    private final static String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=People";
    private static final String USER="sa";
    private static final String PASSWORD="123456";
    
    private static Connection conn=null;
    //靜態代碼塊(將加載驅動、連接數據庫放入靜態塊中)
    static{
        try {
            //1.加載驅動程序
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //2.獲得數據庫的連接
            conn=(Connection)DriverManager.getConnection(URL,USER,PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    //對外提供一個方法來獲取數據庫連接
    public static Connection getConnection(){
        return conn;
    }
    
    
    //測試用例
    public static void main(String[] args) throws Exception{
        
        //3.通過數據庫的連接操作數據庫,實現增刪改查
        Statement stmt = conn.createStatement();
        //ResultSet executeQuery(String sqlString):執行查詢數據庫的SQL語句   ,返回一個結果集(ResultSet)對象。
        ResultSet rs = stmt.executeQuery("select id,name,age from BasicInfo");
        while(rs.next()){//如果對象中有數據,就會循環打印出來
            System.out.println(rs.getInt("id")+","+rs.getString("name")+","+rs.getInt("age"));
        }
    }

}

 

二、編寫一個示例的模型類Person


 

package Database;

public class Person {
    private int id;
    private String name;
    private int age;
    
    public int getId(){return this.id;}
    public void setId(int id){this.id = id;}
    
    public String getName(){return this.name;}
    public void setName(String name){this.name = name;}
    
    public int getAge(){return this.age;}
    public void setAge(int age){this.age = age;}
}

 

三、編寫PersonDao.java


 

package Database;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class PersonDao {

    //------------------------------------------add--------------------------------------------------------
    public void addPerson(Person person)throws SQLException{
        //首先拿到數據庫的連接
        Connection conn=DBUtil.getConnection();
        String sql="" + 
                "insert into BasicInfo"+
                "(id,name,age) "+
                "values(?,?,?)";//參數用?表示,相當於占位符;
        
        //預編譯sql語句
        PreparedStatement psmt = conn.prepareStatement(sql);
        
        //先對應SQL語句,給SQL語句傳遞參數
        psmt.setInt(1, person.getId());
        psmt.setString(2, person.getName());
        psmt.setInt(3, person.getAge());
        
        //執行SQL語句
        psmt.execute();
        /**
         * prepareStatement這個方法會將SQL語句加載到驅動程序conn集成程序中,但是並不直接執行
         * 而是當它調用execute()方法的時候才真正執行;
         * 
         * 上面SQL中的參數用?表示,相當於占位符,然后在對參數進行賦值。
         * 當真正執行時,這些參數會加載在SQL語句中,把SQL語句拼接完整才去執行。
         * 這樣就會減少對數據庫的操作
         */
    }
    //------------------------------------------add--------------------------------------------------------
    //------------------------------------------update--------------------------------------------------------
    
    public void updatePerson(Person person)throws SQLException{
        //首先拿到數據庫的連接
        Connection conn=DBUtil.getConnection();
        String sql="" + 
                "update BasicInfo set name = ?,age = ? where id = ?";//參數用?表示,相當於占位符
        
        //預編譯sql語句
        PreparedStatement psmt = conn.prepareStatement(sql);
        
        //先對應SQL語句,給SQL語句傳遞參數
        psmt.setString(1, person.getName());
        psmt.setInt(2, person.getAge());
        psmt.setInt(3, person.getId());
        
        //執行SQL語句
        psmt.execute();
    }
    //------------------------------------------update--------------------------------------------------------
    //------------------------------------------delete--------------------------------------------------------
    
    public void deletePerson(int id) throws SQLException{
        Connection conn=DBUtil.getConnection();
        String sql="" + 
                "delete from BasicInfo where id = ?";
        PreparedStatement psmt = conn.prepareStatement(sql);
        psmt.setInt(1,id);
        
        //執行SQL語句
        psmt.execute();
    }
    //------------------------------------------delete--------------------------------------------------------
    //------------------------------------------SearchOne--------------------------------------------------------
    
    public Person SearchOne(int id) throws SQLException{
        Person p = null;
        Connection conn=DBUtil.getConnection();
        String sql="" + 
                "select * from BasicInfo where id = ?";
        PreparedStatement psmt = conn.prepareStatement(sql);
        psmt.setInt(1,id);
        
        //執行SQL語句
        ResultSet rs = psmt.executeQuery();
        while(rs.next()){
            p = new Person();
            p.setId(rs.getInt("id"));
            p.setName(rs.getString("name"));
            p.setAge(rs.getInt("age"));
        }
        return p;
    }
    //------------------------------------------SearchOne--------------------------------------------------------
    //------------------------------------------Search--------------------------------------------------------
    
    public List<Person> Search() throws SQLException{
        Connection conn = DBUtil.getConnection();
        Statement stmt = conn.createStatement();
        ResultSet rs =  stmt.executeQuery("select id,name,age from BasicInfo");
        List<Person> people = new ArrayList<Person>();
        Person p = null;
        while(rs.next()){//如果對象中有數據,就會循環打印出來
            p = new Person();
            p.setId(rs.getInt("id"));
            p.setName(rs.getString("name"));
            p.setAge(rs.getInt("age"));
            people.add(p);
        }
        return people;
        
    }
    //------------------------------------------Search--------------------------------------------------------
    
}

 

四、編寫Test


 

package Database;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) throws SQLException {
        // TODO Auto-generated method stub
        PersonDao p = new PersonDao();
        
        //add
        Person person0 = new Person();
        person0.setId(1);
        person0.setName("小明");
        person0.setAge(20);
        p.addPerson(person0);
        
        //update
        Person person1 = new Person();
        person1.setId(1);
        person1.setName("陳偉霆");
        person1.setAge(35);
        p.updatePerson(person1);
        
        //delete
        int id = 1;
        System.out.println(p.SearchOne(id).getName());
        
        
        //search
        List<Person> people = new ArrayList<Person>();
        people = p.Search();
        for(Person person : people){
            String str = person.getId()+","+person.getName()+","+person.getAge();
            System.out.println(str);
        }
        
        
        
    }

}

 

 

參考博客:http://www.cnblogs.com/Qian123/p/5339164.html


免責聲明!

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



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