首先我們需要往所用的軟件中添加相對應的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