java数据库连接(一)--从最简单地jdbc连接说起

      JDBCJDBC全称"Java DataBase Connectivity",它是一套面向对象的应用程序接口(API),并且制定了统一的访问各类关系数据库的标准接口,为各个数据库厂商提供了标准的接口实现。通过使用JDBC技术,开发人员可以用纯Java语言和标准的SQL语句编写完整的数据库应用程序,真正地实现软件的跨平台。

       

            JDBC对多种关系型数据库的驱动和操作都进行了封装,因此,开发者不需要编写额外的程序来兼容不同的数据库连接,只需要通过加载不同的数据库驱动程序即可完成连接,我们首先简单地封装JDBC连接类:

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import oracle.jdbc.driver.OracleConnection;

/**
 * @Description: JDBC连接类(示例连接Oralce)
 * @CreateTime: 2014-1-19 下午9:46:44
 * @author: chenzw 
 * @version V1.0
 */
public class JdbcUtil {
    //驱动名  
    private static String DRIVER = "oracle.jdbc.driver.OracleDriver";  
    //获得url  
    private static String URL = "admin";  
    //获得连接数据库的用户名  
    private static String USER = "jdbc:oracle:thin:@localhost:7001:test";  
    //获得连接数据库的密码  
    private static String PASS = "";  

    static {  
        try {   
            //1.初始化JDBC驱动并让驱动加载到jvm中,加载JDBC驱动后,会将加载的驱动类注册给DriverManager类。
            Class.forName(DRIVER);  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace();  
        }  
    }  
	
     public static Connection getConnection(){  
        Connection conn = null;  
        try {   
            //2.取得连接数据库  
            conn = DriverManager.getConnection(URL,USER,PASS);  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
        return conn;  
     }  
	
     //关闭连接
     public static void close(Object o){  
        if (o == null){  
            return;  
        }  
        if (o instanceof ResultSet){  
            try {  
                ((ResultSet)o).close();  
            } catch (SQLException e) {  
                e.printStackTrace();  
            }  
        } else if(o instanceof Statement){  
            try {  
                ((Statement)o).close();  
            } catch (SQLException e) {  
                e.printStackTrace();  
            }  
        } else if (o instanceof Connection){  
            Connection c = (Connection)o;  
            try {  
                if (!c.isClosed()){  
                    c.close();  
                }  
            } catch (SQLException e) {  
                e.printStackTrace();  
            }  
        }    
    }  
    
    //重载关闭连接
    public static void close(ResultSet rs, Statement stmt,   
            Connection conn){  
    	close(rs);  
    	close(stmt);  
    	close(conn);  
    }  
    //重载关闭连接
    public static void close(ResultSet rs,   
            Connection conn){  
    	close(rs);   
    	close(conn);  
    }  
}

        JDBC数据库连接的查询主要通过Statement对象来执行各种SQL语句。Statement对象主要分为以下3种类型:

        1. Statement :执行静态SQL语句的对象。

             Statement接口常用的2个方法:

             (1) executeUpdate(String sql) :执行insert / update / delete 等SQL语句,成功返回影响数据库记录行数的int整数型。

             (2) executeQuery(String sql) : 执行查询语句,成功返回一个ResultSet类型的结果集对象。

ResultSet rs = null;
Statement stmt = null;
try {
	stmt = conn.createStatement();
	int num = stmt.executeUpdate("insert into company values(‘No.1‘,‘CSDN‘)");
	rs = stmt.executeQuery("select * from company");
} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

        2. PrepareStatement: 执行预编译SQL语句对象。

             PrepareStatement接口常用的2个方法:

             (1) executeUpdate(String sql) :执行insert / update / delete 等SQL语句,成功返回影响数据库记录行数的int整数型。

             (2) executeQuery(String sql) : 执行查询语句,成功返回一个ResultSet类型的结果集对象。

ResultSet rs = null;
PreparedStatement ps;
try {
	ps = conn.prepareStatement("insert into company values(?,?)");
	ps.setString(1, "No1.");
	ps.setString(2, "csdn");
	int num = ps.executeUpdate();
} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
		
try {
	ps = conn.prepareStatement("select * from company");
	ps.setString(1, "No1.");
	ps.setString(2, "csdn");
	rs = ps.executeQuery();
} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

             优点:(1)可以有效SQL注入式攻击,提高安全性。(2)使用预处理语句在性能上提升很多。

        3. CallableStatement接口常用的2个方法:

             (1) executeUpdate(String sql) :执行insert / update / delete 等SQL语句,成功返回影响数据库记录行数的int整数型。

             (2) executeQuery(String sql) : 执行查询语句,成功返回一个ResultSet类型的结果集对象。

ResultSet rs = null;
CallableStatement cs;
try {
	cs = conn.prepareCall("{call p_insert(?,?)}");
	cs.setString(1, "No1.");
	cs.setString(2, "csdn");
	int num = cs.executeUpdate();
} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

try {
	cs = conn.prepareCall("{call p_select(?)}");
	cs.setString(1,  "No1.");
	rs = cs.executeQuery();
} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。