千家信息网

JDBC的介绍与使用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,1. JDBC的介绍  jdbc为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。  访问数据库的流程  在连接这一过程中,一般初学者是MySQL和java在同一个电脑上,
千家信息网最后更新 2026年11月02日JDBC的介绍与使用

1. JDBC的介绍

  jdbc为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。
  访问数据库的流程

  在连接这一过程中,一般初学者是MySQL和java在同一个电脑上,建立socket连接。
  常用接口:- 一般针对java开发使用 Driver接口就行 ,- 在连接数据库时,需要装载特定厂商的数据驱动程序:
   MySQL:Class.forname('com.mysql.jdbc.Driver');
   Oracle:Class.forname('oracle.jdbc.driver.OracleDriver');

2.JDBC重要的API(以MySQL为例)

建立连接:

 @Test    public void getConnect(){        try {            //加载驱动            Class.forName("com.mysql.jdbc.Driver");            //获取连接            String url="jdbc:mysql://localhost:3306/library";            String user="root";            String password="123456";            Connection connection = DriverManager.getConnection(url, user, password);        } catch (Exception e) {            e.printStackTrace();        }    }

Statement
注意:这里Statement- 用于执行静态SQL语句并返回它所生成的结果对象,这里的Statement有三个类:
  - Statement由createStatement创建,用于发送简单的SQL语句。(不带参)
  - PreparedStatement:继承自Statement父类,由preparedStatement创建,用于发送含有一个或多个输入参数的SQL语句。PreparedStatement对象比Statement对象效率更高,并且可以防止SQL注入。
  - CallableStatement:继承自PreparedStatement。由方法prePareCall创建,用于调用存储。
常用的Statement的方法有:
  - execute():运行语句,返回是否有结果集
  - executeQuery():运行select语句,返回ResultSet结果集
  - executeUpdate():运行insert/update/delete操作,返回影响的行数
相关代码:

@Test    public void testStatement() throws SQLException {        //创建Statement        Statement statement = connection.createStatement();        String sql="select * from book";        boolean  isNull= statement.execute(sql);        //创建PreparedStatement        sql="select * from book";        PreparedStatement preparedStatement1 = connection.prepareStatement(sql);        ResultSet resultSet = preparedStatement1.executeQuery();        //PreparedStatement防止SQL注入,这里的?表示占位符        sql="select * from book where bid = ?";        PreparedStatement preparedStatement2 = connection.prepareStatement(sql);        preparedStatement2.setObject(1,2);        preparedStatement2.executeQuery();    }

ResultSet
描述:ResultSet 主要是由executeQuery()方法执行返回
读取数据的流程图:

例:

    @Test    public void testStatement() throws SQLException {        //创建PreparedStatement        String sql = "select * from book";        PreparedStatement preparedStatement1 = connection.prepareStatement(sql);        ResultSet resultSet = preparedStatement1.executeQuery();        while(resultSet.next()){ //表示是否还有下一个            System.out.println("bid"+resultSet.getInt(1));            System.out.println("bname"+resultSet.getString(2));            System.out.println("author"+resultSet.getString(3));        }    }

jdbc的批处理

  • 注意:如果使用大量的批处理时,建议使用statement,因为preparedstatement的预编译空间有限,当数据量特别大时,会发生异常。
    例:

    @Testpublic void testStatement() throws SQLException {    //创建Statement    Statement statement = connection.createStatement();    for (int i = 0; i < 50; i++) {        //获得当前的系统时间        long timestamp = System.currentTimeMillis();        String sql = "insert into t_date(t_time,t_id) values(" + timestamp + "," + i + ")";        //为批处理添加执行的SQL语句        statement.addBatch(sql);    }    //执行批处理    statement.executeBatch();    //提交事务    connection.commit();}

    jdbc的事务

    @Testpublic void testTransaction() {    //取消自动提交    try {        connection.setAutoCommit(false);        //插入一条DML语句        PreparedStatement stetm1 = connection.prepareStatement("insert into book values(1001,'朝花夕拾','鲁迅')");        stetm1.execute();        //插入另条DML语句        PreparedStatement stetm2 = connection.prepareStatement("insert into book values(1001,'海贼王','尾田一郎')");        stetm2.execute();        //提交        connection.commit();    } catch (SQLException e) {        try {            //失败后自动回滚            connection.rollback();        } catch (SQLException e1) {            e1.printStackTrace();        }        e.printStackTrace();    }}

    CLOB操作:
    用于存储大量的文本数据,大字段的操作常常以流的方式处理。而非一般的字段一次读取即可。

//代码实现:public class ReadAndWriteClob {    public static void main(String[] args) {        //获取数据库连接        try {            Class.forName("com.mysql.jdbc.Driver");            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/library",                    "root",                    "123456");            //clob字段插入            //表:user_info            //字段:name varchar , introduce  clob            String sql = "insert into user_info values(?,?)";            PreparedStatement prepared1 = conn.prepareStatement(sql);            //插入数据            prepared1.setObject(1, "user1");            //设置插入文本对象,第二个参数是一个输入流,直接读取文件            prepared1.setClob(2,new BufferedReader(                    new InputStreamReader(                            new FileInputStream("src/a.txt"))));            prepared1.execute();            //clob字段读取            sql="select * from user_info";            PreparedStatement prepared2 =conn.prepareStatement(sql);            ResultSet resultSet = prepared2.executeQuery();            while(resultSet.next()){                Clob introduce = resultSet.getClob("introduce");                Reader characterStream = introduce.getCharacterStream();                int temp=0;                while((temp=characterStream.read())!=-1){                    System.out.print((char)temp);                }            }        } catch (Exception e) {            e.printStackTrace();        }    }}

BLOB操作:
用于存储大量的二进制数据,二进制可以存入任何类型的文件(音频、视频等等..)。

//代码实现public class ReadAndWriteClob {    public static void main(String[] args) {        //获取数据库连接        try {            Class.forName("com.mysql.jdbc.Driver");            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/library",                    "root",                    "123456");            //clob字段插入            //表:user_info            //字段:name varchar , headImg  blob            String sql = "insert into user_info values(?,?)";            PreparedStatement prepared1 = conn.prepareStatement(sql);            //插入数据            prepared1.setObject(1, "user1");            //设置插入图片对象,第二个参数是一个基本输入流            prepared1.setBlob(2,new FileInputStream("src/a.jpg"));            prepared1.execute();            //clob字段读取            sql="select * from user_info";            PreparedStatement prepared2 =conn.prepareStatement(sql);            ResultSet resultSet = prepared2.executeQuery();            while(resultSet.next()){                Blob headImg = resultSet.getBlob("headImg");                //获取的是基本的流,                InputStream binaryStream = headImg.getBinaryStream();                int len=0;                byte flush []=new byte [1025];                OutputStream os=new FileOutputStream(new File("d:\\c.jpg"));               while((len=binaryStream.read(flush))!=-1){                   os.write(flush,0,len);                   os.flush();               }                os.close();                binaryStream.close();            }        } catch (Exception e) {            e.printStackTrace();        }    }}

对jdbc的封装
这里需要加载配置文件:

代码实现:

public class jdbcUtils {    private static Properties pro;    static {        try {            pro = new Properties();            InputStream in = jdbcUtils.class.getClassLoader().getResourceAsStream("dbproperties.properties");            pro.load(in);            Class.forName(pro.getProperty("driver"));        } catch (Exception e) {            e.printStackTrace();        }    }    //建立与数据库的连接    public static Connection getMySQLConn(){        try {            return DriverManager.getConnection(pro.getProperty("url"),                    pro.getProperty("user"),                    pro.getProperty("password"));        } catch (SQLException e) {            e.printStackTrace();        }        return null;    }    /**     * 关闭顺序:resultSet --preparStatement -- Connection     * 在关闭时,不能讲这三者的close()写在同一个try{}catch{}中     */    public static void close(Statement stem,ResultSet rs,Connection conn){        if(rs!=null){            try {                rs.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(stem!=null){            try {                stem.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(conn!=null){            try {                conn.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }}
数据 字段 语句 数据库 对象 代码 接口 参数 文件 方法 结果 存储 输入 运行 事务 二进制 常用 文本 流程 开发 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技 广州为想互联网科技有限公司 互联网科技媒体 凡科互联网科技 亿人帮互联网科技 互联网科技公司名称 盛创互联网科技有限公司 哈尔滨新华互联网科技 海南科技产业互联网平台 互联网科技公司需要的职位 互联网之后的科技是什么 互联网5g黑科技有哪些 苏州铭阳互联网科技有限公司 国大互联网教育科技有限公司工作 恒生互联网科技业指数调整周期 互联网科技实习生岗位 互联网领先科技宣传片 工业互联网科技成果转化 科技互联网专业务虚会材料 利用互联网等科技手段 互联网科技公司简介 碳银互联网科技有限公司 互联网科技公司有哪些 阿里巴巴算科技企业还是互联网 重庆威客帮互联网科技 和信科技工业互联网 中国互联网十大科技股排名 唐山双旺合互联网科技产业园 广西泛欧互联网科技有限公司 安徽九吞吴互联网科技有限公司
0