对于JDBC的认识(一)

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。 [1]

有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势,其次它增进了访问数据的效率和快捷程度。

Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。

Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是 Java应用程序与各种不同数据库之间进行对话的方法。而 JDBC 正是作为此种用途的机制。

JDBC 扩展了 Java 的功能。例如,用 Java 和 JDBC API 可以发布含有 applet 的网页,而该 applet 使用的信息可能来自远程数据库。企业也可以用 JDBC 通过 Intranet 将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有 Windows、 Macintosh 和UNIX 等各种不同的操作系统)。随着越来越多的程序员开始使用Java 编程语言,对从 Java 中便捷地访问数据库的要求也在日益增加。


简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。下列代码段给出了以上三步的基本示例:

Connection conn = null;
Statement str = null;
ResultSet s = null;
String result=null;
String name = null;



try{
String sql = "select * from user";

conn = JdbcUtils.getConnection();
str = conn.createStatement();
s = str.executeQuery(sql);

while(s.next()){
name = s.getString(2);
}
} catch (Exception e) {
e.printStackTrace();
}


这是一个简单的查询SQL,对于老司机来说这是非常简单的,但是对于新手来说这就是比较复杂,所以我简单的说一下,


   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数据库,用户名和密码都是root   
  •      String url = "jdbc:mysql://localhost:3306/test" ;    
  •      String username = "root" ;   
  •      String password = "root" ;   
  •      try{   
  •     Connection con =    
  •              DriverManager.getConnection(url , username , password ) ;   
  •      }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() ;            }             }

第二种:直接是调取方法

先写一个配置文件,配置文件名db.properties

文件内容为


driver=com.mysql.jdbc.Driver   //加载驱动(如果是Orecle,就是Orecle连接驱动)
       url=jdbc:mysql://localhost:3306/bookd   //连接数据库
       username=root   // 数据库用户名
       password=root    //数据库密码

 


获取文件db.properties,并且连接数据库,关闭数据库资源,。

创建 JdbcUtils .java类



import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;


public class JdbcUtils {


private static String driver = null;
private static String url = null;
private static String username = null;
private static String password = null;

static {
try{
// 读取bd.properties文件中的数据库连接信息
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
Properties prop = new Properties();
//加载properties文件中的信息
prop.load(in);


// 获取数据库连接驱动
driver = prop.getProperty("driver");
// 获取数据库连接URL地址
url = prop.getProperty("url");
username = prop.getProperty("username");
password = prop.getProperty("password");


// 加载数据库驱动

Class.forName(driver);



}catch (Exception e){
System.out.println("数据库连接出现异常");
}
}
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url,username,password);
}
/**
* 释放资源。
* 释放的资源包括Connection数据库连接对象
*/
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs !=null){
try{
// 关闭存储查询结果ResultSet对象
rs.close();
}catch (Exception e){
e.printStackTrace();
}
rs = null;
}
if(st != null){
try{
// 关闭负责执行SQL命令的Statement
st.close();
}catch (Exception e){
e.printStackTrace();
}
}
if(conn != null){
try{
// 关闭Connection连接对象
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
}


这是连接外部的数据库驱动,配置文件。

然后在java类中调取该配置文件。然后后在进行数据库的操作,在这里我介绍的内容很少,主要要让你们能看出效果来,记住千万别忘记导入数据库架包,如果没有数据库架包,可以在此链接下载http://download.csdn.net/download/qq_35449428/9910424。

猜你喜欢

转载自blog.csdn.net/qq_35449428/article/details/77893023