JDBC(Java DataBase Connectivity)
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
java.sql包用于将sql语句传递给数据库,提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。
java.sql 包中包含用于以下方面的 API(应用程序编程接口):
通过 DriverManager 实用程序建立与数据库的连接
DriverManager 类:建立与驱动程序的连接
SQLPermission 类:代码在 Security Manager(比如 applet)中运行时提供权限,试图通过 DriverManager 设置一个记录流
Driver 接口:提供用来注册和连接基于 JDBC 技术("JDBC驱动程序")的驱动程序的 API,通常仅由 DriverManager 类使用
Statement接口:用于发送基本 SQL 语句(用于执行静态的sql语句)
PreparedStatement接口:用于发送准备好的语句或基本 SQL 语句,是Statement的子接口
Connection 接口:接口是获取数据库连接的接口
ResultSet 接口:获取和更新查询的结果
package com.wcl.Dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test1 {
//连接驱动
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver" ;
// 连接路径
private static final String URL = "jdbc:sqlserver://XXXX:1433;databaseName=XXX";
// 用户名
private static final String USERNAME = "XXX";
// 密码
private static final String PASSWORD = "XXX";
public static Connection conn = null;
public static Statement stmt = null;
public static ResultSet rs = null;
static {
try {Class.forName(DRIVER);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
conn = getConnection();
stmt = conn.createStatement();
String sql = "select * from table ";
rs = stmt.executeQuery(sql);
while (rs.next()) {
String s1 = rs.getObject(2).toString();
Double s2 = (Double)rs.getDouble(4);
System.out.println(s1);
System.out.println(s2);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(rs, stmt, conn);
}
}
//获取数据库连接
public static Connection getConnection() throws Exception {
try{
conn=DriverManager.getConnection( URL, USERNAME, PASSWORD);
}catch(SQLException e){
e.printStackTrace();
}
return conn;
}
//关闭数据库连接,注意关闭顺序
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if(rs!=null){
try{
rs.close();
rs=null;
}catch(SQLException e){
e.printStackTrace();
}
}
if(stmt!=null){
try{
stmt.close();
stmt=null;
}catch(SQLException e){
e.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
conn=null;
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
由于上面涉及到静态sql和动态sql,这里补充说明下
----静态SQL与动态SQL
静态SQL,在编译阶段就可以确定数据库要做什么事情。在某种高级语言中,如果嵌入了SQL语句,而这个SQL语句的主体结构已经明确,
例如在Java的一段代码中有一个待执行的SQL“select * from t1 where c1>5”,在Java编译阶段,就可以将这段SQL交给数据库管理系统去分析,数据库软件可以对这段SQL进行语法解析,生成数据库方面的可执行代码,这样的SQL称为静态SQL。
动态SQL,而如果嵌入的SQL没有明确给出,如在Java中定义了一个字符串类型的变量sql:String sql;,然后采用preparedStatement对象的execute方法去执行这个sql,该sql的值可能等于从文本框中读取的一个SQL或者从键盘输入的SQL,但具体是什么,在编译时无法确定,只有等到程序运行起来,在执行的过程中才能确定,这种SQL叫做动态SQL。
例如每一种数据库软件都有能够执行SQL语句的界面,那个界面接收的SQL就是动态SQL,因为数据库厂商在做这个界面时,并不知道用户会输入哪些SQL,只有在该界面执行后,接收了用户的实际输入,才知道SQL是什么。
另外还要注意一点,在SQL中如果某些参数没有确定,如"select * from t1 where c1>? and c2<?",这种语句是静态SQL,不是动态SQL,虽然个别参数的值不知道,但整个SQL的结构已经确定,数据库是可以将它编译的,在执行阶段只需将个别参数的值补充进来即可。

浙公网安备 33010602011771号