JDBC连接数据库的代码及步骤

  • JDBC连接数据库  


  •      JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。

  •  1、加载JDBC驱动程序:   

  •     在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),   
  •     这通过java.lang.Class类的静态方法forName(String  className)实现。   
  •     例如:   
  •     try{   
  •     //加载MySql的驱动类   
  •     Class.forName("com.mysql.jdbc.Driver") ;   
  •     }catch(ClassNotFoundException e){   
  •     System.out.println("找不到驱动程序类 ,加载驱动失败!");   
  •     e.printStackTrace() ;   
  •     }   
  •    成功加载后,会将Driver类的实例注册到DriverManager类中。  

  •  2、提供JDBC连接的URL   

  •    •连接URL定义了连接数据库时的协议、子协议、数据源标识。   
  •     •书写形式:协议:子协议:数据源标识   
  •     协议:在JDBC中总是以jdbc开始   
  •     子协议:是桥连接的驱动程序或是数据库管理系统名称。   
  •     数据源标识:标记找到数据库来源的地址与连接端口。   
  •     例如:(MySql的连接URL)   
  •     jdbc:mysql:   
  •         //localhost:3306/test?useUnicode=true&characterEncoding=gbk ;   
  •    useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为   
  •    gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。  

  •  3、创建数据库的连接   

  •     •要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,   
  •      该对象就代表一个数据库的连接。   
  •     •使用DriverManager的getConnectin(String url , String username ,    
  •     String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和   
  •      密码来获得。   
  •      例如:   
  •      //连接MySql数据库,用户名和密码作为参数
  •    static final String DB_URL = "jdbc:mysql://localhost/samp_db";
       //  Database credentials -- 数据库名和密码根据自己数据库修改
       static final String USER = "root";
       static final String PASS = "jsw3097308829";

  •      try{   
  •     Connection con =    
  •              DriverManager.getConnection(DB_URL,USER,PASS);
  •      }catch(SQLException se){   
  •     System.out.println("数据库连接失败!");   
  •     se.printStackTrace() ;   
  •      }  

  •  4、创建一个Statement   

  •     •要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3  
  •      种类型:   
  •       1、执行静态SQL语句。通常通过Statement实例实现。   
  •       2、执行动态SQL语句。通常通过PreparedStatement实例实现。   
  •       3、执行数据库存储过程。通常通过CallableStatement实例实现。   
  •     具体的实现方式:   
  •         Statement stmt = con.createStatement() ;   
  •        PreparedStatement pstmt = con.prepareStatement(sql) ;   
  •        CallableStatement cstmt =    
  •                             con.prepareCall("{CALL demoSp(? , ?)}") ;  

  •  5、执行SQL语句   

  •     Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate   
  •    和execute   
  •     1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句   
  •         ,返回一个结果集(ResultSet)对象。   
  •      2int 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)对象的访问方法获取数据:   
  •      while(rs.next()){   
  •          String name = rs.getString("name") ;   
  •     String pass = rs.getString(1) ; // 此方法比较高效   
  •      }   
  •     (列是从左到右编号的,并且从列1开始)  

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


    JDBC源码:

    import java.sql.*;
    
    public class JDBCExample {
       // JDBC driver name and database URL
       static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
       static final String DB_URL = "jdbc:mysql://localhost/samp_db";
    
       //  Database credentials -- 数据库名和密码自己修改
       static final String USER = "root";
       static final String PASS = "jsw3097308829";
    
       public static void main(String[] args) {
       Connection conn = null;
       Statement stmt = null;
       ResultSet rs = null;
       try{
          //STEP 2: Register JDBC driver
          Class.forName("com.mysql.jdbc.Driver");
    
          //STEP 3: Open a connection
          System.out.println("Connecting to database...");
          conn = DriverManager.getConnection(DB_URL,USER,PASS);
    
          //STEP 4: Execute a query
          System.out.println("Creating statement...");
          stmt = conn.createStatement();
          String sql;
          sql = "SELECT id, name, sex, age, tel FROM students ";
          rs = stmt.executeQuery(sql);
    
          //STEP 5: Extract data from result set
          while(rs.next()){
             //Retrieve by column name
             int id  = rs.getInt("id");
             String name = rs.getString("name");
             String sex = rs.getString("sex");
             int age = rs.getInt("age");
             String tel = rs.getString("tel");
    
             //Display values
             System.out.print("ID: " + id);
             System.out.print(", NAME: " + name);
             System.out.print(", SEX: " + sex);
             System.out.print(", AGE: " + age);
             System.out.println(", TEL: " + tel);
          }
          //STEP 6: Clean-up environment
          rs.close();
          stmt.close();
          conn.close();
       }catch(SQLException se){
          //Handle errors for JDBC
          se.printStackTrace();
       }catch(Exception e){
          //Handle errors for Class.forName
          e.printStackTrace();
       }finally{
          //finally block used to close resources
    	  try{
    		  if(rs != null)
    			  rs.close();
    		  	  rs = null;
    	  }catch(SQLException se){
    		  se.printStackTrace();
    	  }
          try{
             if(stmt != null)
                stmt.close();
                stmt = null;
          }catch(SQLException se2){
          }// nothing we can do
          try{
             if(conn != null)
                conn.close();
                conn = null;
          }catch(SQLException se){
             se.printStackTrace();
          }//end finally try
       }//end try
       System.out.println("Goodbye!");
    }
    }

  • TestDML源码:

  • import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class TestDML {
    
    	public static void main(String[] args) {
    		Statement stmt = null;
    		Connection conn = null;
    		try {
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			//new oracle.jdbc.driver.OracleDriver();
    			conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT", "scott", "tiger");
    			stmt = conn.createStatement();
    			String sql = "insert into dept2 values (98, 'GAME', 'BJ')";
    			stmt.executeUpdate(sql);
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if(stmt != null) {
    					stmt.close();
    					stmt = null;
    				}
    				if(conn != null) {
    					conn.close();
    					conn = null;
    				}
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    }
    

    TestPrepStmt源码:

  • import java.sql.*;
    
    
    public class TestPrepStmt {
    
    	public static void main(String[] args) {
    		if(args.length != 3) {
    			System.out.println("Parameter Error! Please Input Again!");
    			System.exit(-1);
    		}
    		
    		int deptno = 0;
    		
    		try {
    			deptno = Integer.parseInt(args[0]);
    		} catch (NumberFormatException e) {
    			System.out.println("Parameter Error! Deptno should be Number Format!");
    			System.exit(-1);
    		}
    		
    		String dname = args[1];
    		String loc = args[2];
    		
    		PreparedStatement pstmt = null;
    		Connection conn = null;
    		try {
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			//new oracle.jdbc.driver.OracleDriver();
    			conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT", "scott", "tiger");
    			pstmt = conn.prepareStatement("insert into dept2 values (?, ?, ?)");
    			pstmt.setInt(1, deptno);
    			pstmt.setString(2, dname);
    			pstmt.setString(3, loc);
    			pstmt.executeUpdate();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if(pstmt != null) {
    					pstmt.close();
    					pstmt = null;
    				}
    				if(conn != null) {
    					conn.close();
    					conn = null;
    				}
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    }
    

  • TestTransaction源码:

  • import java.sql.*;
    public class TestTransaction {
    
    
    	public static void main(String[] args) {
    		
    		Connection conn = null;
    		Statement stmt = null;
    		
    		try {
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:SXT", "scott", "tiger");
    			
    			conn.setAutoCommit(false);
    			stmt = conn.createStatement();
    			stmt.addBatch("insert into dept2 values (51, '500', 'haha')");
    			stmt.addBatch("insert into dept2 values (52, '500', 'haha')");
    			stmt.addBatch("insert into dept2 values (53, '500', 'haha')");
    			stmt.executeBatch();
    			conn.commit();
    			conn.setAutoCommit(true);
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch(SQLException e) {
    			
    			e.printStackTrace();
    			
    			try {
    				if(conn != null)
    				{
    					conn.rollback();
    					conn.setAutoCommit(true);
    				}
    			} catch (SQLException e1) {
    				e1.printStackTrace();
    			}
    		}finally {
    			try {
    				if(stmt != null)
    					stmt.close();
    				if(conn != null)
    					conn.close();
    			} catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    		
    
    	}
    
    }
    


你可能感兴趣的:(jdbc,jdbc)