jdbc代码

1.jdbcutiul的代码,

  1 package gz.itcast.util;
  2
  3 import java.io.InputStream;
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.ResultSet;
  7 import java.sql.SQLException;
  8 import java.sql.Statement;
  9 import java.util.Properties;
 10
 11 /**
 12  * jdbc工具类
 13  * @author APPle
 14  *
 15  */
 16 public class JdbcUtil {
 17     private static String url = null;
 18     private static String user = null;
 19     private static String password = null;
 20     private static String driverClass = null;
 21
 22     /**
 23      * 静态代码块中(只加载一次)
 24      */
 25     static{
 26         try {
 27             //读取db.properties文件
 28             Properties props = new Properties();
 29             /**
 30              *  . 代表java命令运行的目录
 31              *  在java项目下,. java命令的运行目录从项目的根目录开始
 32              *  在web项目下,  . java命令的而运行目录从tomcat/bin目录开始
 33              *  所以不能使用点.
 34              */
 35             //FileInputStream in = new FileInputStream("./src/db.properties");
 36
 37             /**
 38              * 使用类路径的读取方式
 39              *  / : 斜杠表示classpath的根目录
 40              *     在java项目下,classpath的根目录从bin目录开始
 41              *     在web项目下,classpath的根目录从WEB-INF/classes目录开始
 42              */
 43             InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
 44
 45             //加载文件
 46             props.load(in);
 47             //读取信息
 48             url = props.getProperty("url");
 49             user = props.getProperty("user");
 50             password = props.getProperty("password");
 51             driverClass = props.getProperty("driverClass");
 52
 53
 54             //注册驱动程序
 55             Class.forName(driverClass);
 56         } catch (Exception e) {
 57             e.printStackTrace();
 58             System.out.println("驱程程序注册出错");
 59         }
 60     }
 61
 62     /**
 63      * 抽取获取连接对象的方法
 64      */
 65     public static Connection getConnection(){
 66         try {
 67             Connection conn = DriverManager.getConnection(url, user, password);
 68             return conn;
 69         } catch (SQLException e) {
 70             e.printStackTrace();
 71             throw new RuntimeException(e);
 72         }
 73     }
 74
 75
 76     /**
 77      * 释放资源的方法
 78      */
 79     public static void close(Connection conn,Statement stmt){
 80         if(stmt!=null){
 81             try {
 82                 stmt.close();
 83             } catch (SQLException e) {
 84                 e.printStackTrace();
 85                 throw new RuntimeException(e);
 86             }
 87         }
 88         if(conn!=null){
 89             try {
 90                 conn.close();
 91             } catch (SQLException e) {
 92                 e.printStackTrace();
 93                 throw new RuntimeException(e);
 94             }
 95         }
 96     }
 97
 98     public static void close(Connection conn,Statement stmt,ResultSet rs){
 99         if(rs!=null)
100             try {
101                 rs.close();
102             } catch (SQLException e1) {
103                 e1.printStackTrace();
104                 throw new RuntimeException(e1);
105             }
106         if(stmt!=null){
107             try {
108                 stmt.close();
109             } catch (SQLException e) {
110                 e.printStackTrace();
111                 throw new RuntimeException(e);
112             }
113         }
114         if(conn!=null){
115             try {
116                 conn.close();
117             } catch (SQLException e) {
118                 e.printStackTrace();
119                 throw new RuntimeException(e);
120             }
121         }
122     }
123 }

2.静态sql查询

2.1建表

  1 package gz.itcast.util;
  2
  3 import java.io.InputStream;
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.ResultSet;
  7 import java.sql.SQLException;
  8 import java.sql.Statement;
  9 import java.util.Properties;
 10
 11 /**
 12  * jdbc工具类
 13  * @author APPle
 14  *
 15  */
 16 public class JdbcUtil {
 17     private static String url = null;
 18     private static String user = null;
 19     private static String password = null;
 20     private static String driverClass = null;
 21
 22     /**
 23      * 静态代码块中(只加载一次)
 24      */
 25     static{
 26         try {
 27             //读取db.properties文件
 28             Properties props = new Properties();
 29             /**
 30              *  . 代表java命令运行的目录
 31              *  在java项目下,. java命令的运行目录从项目的根目录开始
 32              *  在web项目下,  . java命令的而运行目录从tomcat/bin目录开始
 33              *  所以不能使用点.
 34              */
 35             //FileInputStream in = new FileInputStream("./src/db.properties");
 36
 37             /**
 38              * 使用类路径的读取方式
 39              *  / : 斜杠表示classpath的根目录
 40              *     在java项目下,classpath的根目录从bin目录开始
 41              *     在web项目下,classpath的根目录从WEB-INF/classes目录开始
 42              */
 43             InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
 44
 45             //加载文件
 46             props.load(in);
 47             //读取信息
 48             url = props.getProperty("url");
 49             user = props.getProperty("user");
 50             password = props.getProperty("password");
 51             driverClass = props.getProperty("driverClass");
 52
 53
 54             //注册驱动程序
 55             Class.forName(driverClass);
 56         } catch (Exception e) {
 57             e.printStackTrace();
 58             System.out.println("驱程程序注册出错");
 59         }
 60     }
 61
 62     /**
 63      * 抽取获取连接对象的方法
 64      */
 65     public static Connection getConnection(){
 66         try {
 67             Connection conn = DriverManager.getConnection(url, user, password);
 68             return conn;
 69         } catch (SQLException e) {
 70             e.printStackTrace();
 71             throw new RuntimeException(e);
 72         }
 73     }
 74
 75
 76     /**
 77      * 释放资源的方法
 78      */
 79     public static void close(Connection conn,Statement stmt){
 80         if(stmt!=null){
 81             try {
 82                 stmt.close();
 83             } catch (SQLException e) {
 84                 e.printStackTrace();
 85                 throw new RuntimeException(e);
 86             }
 87         }
 88         if(conn!=null){
 89             try {
 90                 conn.close();
 91             } catch (SQLException e) {
 92                 e.printStackTrace();
 93                 throw new RuntimeException(e);
 94             }
 95         }
 96     }
 97
 98     public static void close(Connection conn,Statement stmt,ResultSet rs){
 99         if(rs!=null)
100             try {
101                 rs.close();
102             } catch (SQLException e1) {
103                 e1.printStackTrace();
104                 throw new RuntimeException(e1);
105             }
106         if(stmt!=null){
107             try {
108                 stmt.close();
109             } catch (SQLException e) {
110                 e.printStackTrace();
111                 throw new RuntimeException(e);
112             }
113         }
114         if(conn!=null){
115             try {
116                 conn.close();
117             } catch (SQLException e) {
118                 e.printStackTrace();
119                 throw new RuntimeException(e);
120             }
121         }
122     }
123 }

2.2插入数据

package gz.itcast.b_statement;

import gz.itcast.util.JdbcUtil;

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

import org.junit.Test;

/**
 * 使用Statement执行DML语句
 * @author APPle
 *
 */
public class Demo2 {
    private String url = "jdbc:mysql://localhost:3306/day17";
    private String user = "root";
    private String password = "root";

    /**
     * 增加
     */
    @Test
    public void testInsert(){
        Connection conn = null;
        Statement stmt = null;
        try {
            //通过工具类获取连接对象
            conn = JdbcUtil.getConnection();

            //3.创建Statement对象
            stmt = conn.createStatement();

            //4.sql语句
            String sql = "INSERT INTO student(NAME,gender) VALUES(‘李四‘,‘女‘)";

            //5.执行sql
            int count = stmt.executeUpdate(sql);

            System.out.println("影响了"+count+"行");

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally{
            //关闭资源
            /*if(stmt!=null)
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            if(conn!=null)
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }*/
            JdbcUtil.close(conn, stmt);
        }
    }

    /**
     * 修改
     */
    @Test
    public void testUpdate(){
        Connection conn = null;
        Statement stmt = null;
        //模拟用户输入
        String name = "陈六";
        int id = 3;
        try {
            /*//1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");

            //2.获取连接对象
            conn = DriverManager.getConnection(url, user, password);*/
            //通过工具类获取连接对象
            conn = JdbcUtil.getConnection();

            //3.创建Statement对象
            stmt = conn.createStatement();

            //4.sql语句
            String sql = "UPDATE student SET NAME=‘"+name+"‘ WHERE id="+id+"";

            System.out.println(sql);

            //5.执行sql
            int count = stmt.executeUpdate(sql);

            System.out.println("影响了"+count+"行");

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally{
            //关闭资源
            /*if(stmt!=null)
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            if(conn!=null)
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }*/
            JdbcUtil.close(conn, stmt);
        }
    }

    /**
     * 删除
     */
    @Test
    public void testDelete(){
        Connection conn = null;
        Statement stmt = null;
        //模拟用户输入
        int id = 3;
        try {
            /*//1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");

            //2.获取连接对象
            conn = DriverManager.getConnection(url, user, password);*/
            //通过工具类获取连接对象
            conn = JdbcUtil.getConnection();

            //3.创建Statement对象
            stmt = conn.createStatement();

            //4.sql语句
            String sql = "DELETE FROM student WHERE id="+id+"";

            System.out.println(sql);

            //5.执行sql
            int count = stmt.executeUpdate(sql);

            System.out.println("影响了"+count+"行");

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally{
            //关闭资源
            /*if(stmt!=null)
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            if(conn!=null)
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }*/
            JdbcUtil.close(conn, stmt);
        }
    }
}

2.3查询数据

package gz.itcast.b_statement;

import gz.itcast.util.JdbcUtil;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import org.junit.Test;

/**
 * 使用Statement执行DQL语句(查询操作)
 * @author APPle
 *
 */
public class Demo3 {

    @Test
    public void test1(){
        Connection conn = null;
        Statement stmt = null;
        try{
            //获取连接
            conn = JdbcUtil.getConnection();
            //创建Statement
            stmt = conn.createStatement();
            //准备sql
            String sql = "SELECT * FROM student";
            //执行sql
            ResultSet rs = stmt.executeQuery(sql);

            //移动光标
            /*boolean flag = rs.next();

            flag = rs.next();
            flag = rs.next();
            if(flag){
                //取出列值
                //索引
                int id = rs.getInt(1);
                String name = rs.getString(2);
                String gender = rs.getString(3);
                System.out.println(id+","+name+","+gender);

                //列名称
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String gender = rs.getString("gender");
                System.out.println(id+","+name+","+gender);
            }*/

            //遍历结果
            while(rs.next()){
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String gender = rs.getString("gender");
                System.out.println(id+","+name+","+gender);
            }

        }catch(Exception e){
            e.printStackTrace();
            throw new RuntimeException(e);
        }finally{
            JdbcUtil.close(conn, stmt);
        }
    }
}

3.动态SQL查询

3.1更新

package gz.itcast.c_prepared;

import gz.itcast.util.JdbcUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.junit.Test;
/**
 * PreparedStatement執行sql語句
 * @author APPle
 *
 */
public class Demo1 {

    /**
     * 增加
     */
    @Test
    public void testInsert() {
        Connection conn = null;
        PreparedStatement stmt = null;
        try {
            //1.获取连接
            conn = JdbcUtil.getConnection();

            //2.准备预编译的sql
            String sql = "INSERT INTO student(NAME,gender) VALUES(?,?)"; //?表示一个参数的占位符

            //3.执行预编译sql语句(检查语法)
            stmt = conn.prepareStatement(sql);

            //4.设置参数值
            /**
             * 参数一: 参数位置  从1开始
             */
            stmt.setString(1, "李四");
            stmt.setString(2, "男");

            //5.发送参数,执行sql
            int count = stmt.executeUpdate();

            System.out.println("影响了"+count+"行");

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            JdbcUtil.close(conn, stmt);
        }
    }

    /**
     * 修改
     */
    @Test
    public void testUpdate() {
        Connection conn = null;
        PreparedStatement stmt = null;
        try {
            //1.获取连接
            conn = JdbcUtil.getConnection();

            //2.准备预编译的sql
            String sql = "UPDATE student SET NAME=? WHERE id=?"; //?表示一个参数的占位符

            //3.执行预编译sql语句(检查语法)
            stmt = conn.prepareStatement(sql);

            //4.设置参数值
            /**
             * 参数一: 参数位置  从1开始
             */
            stmt.setString(1, "王五");
            stmt.setInt(2, 9);

            //5.发送参数,执行sql
            int count = stmt.executeUpdate();

            System.out.println("影响了"+count+"行");

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            JdbcUtil.close(conn, stmt);
        }
    }

    /**
     * 删除
     */
    @Test
    public void testDelete() {
        Connection conn = null;
        PreparedStatement stmt = null;
        try {
            //1.获取连接
            conn = JdbcUtil.getConnection();

            //2.准备预编译的sql
            String sql = "DELETE FROM student WHERE id=?"; //?表示一个参数的占位符

            //3.执行预编译sql语句(检查语法)
            stmt = conn.prepareStatement(sql);

            //4.设置参数值
            /**
             * 参数一: 参数位置  从1开始
             */
            stmt.setInt(1, 9);

            //5.发送参数,执行sql
            int count = stmt.executeUpdate();

            System.out.println("影响了"+count+"行");

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            JdbcUtil.close(conn, stmt);
        }
    }

    /**
     * 查询
     */
    @Test
    public void testQuery() {
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            //1.获取连接
            conn = JdbcUtil.getConnection();

            //2.准备预编译的sql
            String sql = "SELECT * FROM student"; 

            //3.预编译
            stmt = conn.prepareStatement(sql);

            //4.执行sql
            rs = stmt.executeQuery();

            //5.遍历rs
            while(rs.next()){
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String gender = rs.getString("gender");
                System.out.println(id+","+name+","+gender);
            }

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            //关闭资源
            JdbcUtil.close(conn,stmt,rs);
        }
    }
}

3.2查询

package gz.itcast.c_prepared;

import gz.itcast.util.JdbcUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

import org.junit.Test;

/**
 * 模拟用户登录效果
 * @author APPle
 *
 */
public class Demo2 {
    //模拟用户输入
    //private String name = "ericdfdfdfddfd‘ OR 1=1 -- ";
    private String name = "eric";
    //private String password = "123456dfdfddfdf";
    private String password = "123456";

    /**
     * Statment存在sql被注入的风险
     */
    @Test
    public void testByStatement(){
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //获取连接
            conn = JdbcUtil.getConnection();

            //创建Statment
            stmt = conn.createStatement();

            //准备sql
            String sql = "SELECT * FROM users WHERE NAME=‘"+name+"‘ AND PASSWORD=‘"+password+"‘";

            //执行sql
            rs = stmt.executeQuery(sql);

            if(rs.next()){
                //登录成功
                System.out.println("登录成功");
            }else{
                System.out.println("登录失败");
            }

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            JdbcUtil.close(conn, stmt ,rs);
        }

    }

    /**
     * PreparedStatement可以有效地防止sql被注入
     */
    @Test
    public void testByPreparedStatement(){
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            //获取连接
            conn = JdbcUtil.getConnection();

            String sql = "SELECT * FROM users WHERE NAME=? AND PASSWORD=?";

            //预编译
            stmt = conn.prepareStatement(sql);

            //设置参数
            stmt.setString(1, name);
            stmt.setString(2, password);

            //执行sql
            rs = stmt.executeQuery();

            if(rs.next()){
                //登录成功
                System.out.println("登录成功");
            }else{
                System.out.println("登录失败");
            }

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            JdbcUtil.close(conn, stmt ,rs);
        }

    }
}

4.执行存储过程

package gz.itcast.d_callable;

import gz.itcast.util.JdbcUtil;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;

import org.junit.Test;

/**
 * 使用CablleStatement调用存储过程
 * @author APPle
 *
 */
public class Demo1 {

    /**
     * 调用带有输入参数的存储过程
     * CALL pro_findById(4);
     */
    @Test
    public void test1(){
        Connection conn = null;
        CallableStatement stmt = null;
        ResultSet rs = null;
        try {
            //获取连接
            conn = JdbcUtil.getConnection();

            //准备sql
            String sql = "CALL pro_findById(?)"; //可以执行预编译的sql

            //预编译
            stmt = conn.prepareCall(sql);

            //设置输入参数
            stmt.setInt(1, 6);

            //发送参数
            rs = stmt.executeQuery(); //注意: 所有调用存储过程的sql语句都是使用executeQuery方法执行!!!

            //遍历结果
            while(rs.next()){
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String gender = rs.getString("gender");
                System.out.println(id+","+name+","+gender);
            }

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            JdbcUtil.close(conn, stmt ,rs);
        }
    }

    /**
     * 执行带有输出参数的存储过程
     * CALL pro_findById2(5,@NAME);
     */
    @Test
    public void test2(){
        Connection conn = null;
        CallableStatement stmt = null;
        ResultSet rs = null;
        try {
            //获取连接
            conn = JdbcUtil.getConnection();
            //准备sql
            String sql = "CALL pro_findById2(?,?)"; //第一个?是输入参数,第二个?是输出参数

            //预编译
            stmt = conn.prepareCall(sql);

            //设置输入参数
            stmt.setInt(1, 6);
            //设置输出参数(注册输出参数)
            /**
             * 参数一: 参数位置
             * 参数二: 存储过程中的输出参数的jdbc类型    VARCHAR(20)
             */
            stmt.registerOutParameter(2, java.sql.Types.VARCHAR);

            //发送参数,执行
            stmt.executeQuery(); //结果不是返回到结果集中,而是返回到输出参数中

            //得到输出参数的值
            /**
             * 索引值: 预编译sql中的输出参数的位置
             */
            String result = stmt.getString(2); //getXX方法专门用于获取存储过程中的输出参数

            System.out.println(result);

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            JdbcUtil.close(conn, stmt ,rs);
        }
    }
}
时间: 2024-11-10 01:01:48

jdbc代码的相关文章

SparkSQL使用之JDBC代码访问Thrift JDBC Server

启动ThriftJDBCServer: cd $SPARK_HOME/sbin start-thriftserver.sh & 使用jdbc访问ThriftJDBCServer代码段: package com.luogankun.spark.sql import java.sql.DriverManager import java.sql.Connection import java.sql.PreparedStatement /** * JDBC代码访问Thrift JDBC Server *

以面向对象的思想实现数据表的添加和查询,JDBC代码超详细

以面向对象的思想编写JDBC程序,实现使用java程序向数据表中添加学生信息,并且可以实现给定×××号查询学生信息或给定准考证号查询学生信息. 创建的数据表如下: CREATE TABLE EXAMSTUDENT(FlowID INTEGER,Type INTEGER,IDCard VARCHAR(18),ExamCard VARCHAR(15),StudentName VARCHAR(20),Location VARCHAR(20),Grade INTEGER);1.首先实现通过java程序在

JDBC代码库-sqlhelper

package com.hsp.utils;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;impor

JDBC 代码简写版案列

简述JDBC:[链接ttps://www.yiibai.com/jdbc/] JDBC代表Java与数据库的连接,可以为多种关系型数据库DBMS提供统一的访问方式,简单来说,JDBC是一种规范,它所提供的接口是一套完整的,可移植的访问底层数据库的程序. JDBC架构: 1.JDBC API:提供了应用程序对JDBC的管理连接: 2.JDBC Driver API:支持JDBC管理到驱动器的连接. 常用的JDBC组件: JDBC API 提供了以下接口和类: 1.DriverManager :这个

配置druid监控spring jdbc代码

<bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"> </bean> <bean id="druid-stat-pointcut"                                       class="org.springframework

Oracle 12c JDBC方式连接PDB数据库

1.配置监听 这里假定CDB数据库名为ORCL,PDB在CDB下面名称为PDBORCLlistener.ora添加(#后面为注释,不要添加进去) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ORCL) (SID_NAME = ORCL) #这里是SID名 ) (SID_DESC = (GLOBAL_DBNAME = PDBORCL)#这里是PDB数据库名 (SID_NAME = ORCL) #这里是SID名 ) ) t

jdbc中的Statement对象和Preparedstatement对象的区别,以及通过jdbc操作调用存储过程

一. java.sql.*   和  javax.sql.*的包的类结构 |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, properties):  连接数据库的方法. url: 连接数据库的URL URL语法: jdbc协议:数据库子协议://主机:端口/数据库 user: 数据库的用户名 password: 数据库用户密码 |- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序 |-regis

开源JDBC工具类DbUtils

本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUtils,而在这过程中很多都是借鉴和参考了DbUtils的代码,因此通过上一篇的学习,会让我们在对DbUtils进行更快速简单的认识. 俗话说学习一个开源的工具最好的方法就是看其官方文档,是的,在Apache官网中对DbUtils进行了详细的介绍:http://commons.apache.org/pr

2015-09-24 JDBC(一)

1.JDBC简介 JDBC ( Java DataBase Connectivity) JDBC 是由 Java 语言编写 , 使得 JDBC 代码可以在所有 Java 平台运行 , 确保了可植性 . JDBC是为Java提供的一个平台无关的数据库标准 API,它提供了一个通用的 SQL 数据库存取机制,该机制为多数关系型DBMS提供统一接口. 对数据库厂商透明, 不同的数据库制造商提供各自的驱动程序. 其中包含了访问数据库所必须的类.接口和各种访问数据库异常类. 2.JDBC基础 Sun提供的