JDBC的介绍与使用 原创 原生zzy 2019-01-20 11:12:53 博主文章分类:对接大数据的常用数据库 ©著作权 文章标签 JDBC 使用 文章分类 MySQL 数据库 ©著作权归作者所有:来自51CTO博客作者原生zzy的原创作品,请联系作者获取转载授权,否则将追究法律责任 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的预编译空间有限,当数据量特别大时,会发生异常。 例: @Test public 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的事务 @Test public 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 , headblob 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 head= 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(); } } } } 赞 收藏 评论 分享 举报 上一篇:MySQL的高级部分 下一篇:ElasticSearch的基本使用 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 JDBC 批量操作 in 的使用 我们经常会有这种业务需求,根据一个条件集合去查询一张表的数据,比如:select * from all_element t where t.task_id in (List <taskids>); 在java语言中,我们需要用到JDBC来和数据库打交道,那么在JDBC中该如何处理这种需求呢?我们可以有如下几种处理方式方案一:写一个函数把参数集合转换成一个or 条件 或 JDBC IN PreparedStatement JAVA 批量操作 纪念JDBC 技术总是在不断更新变化的,尤其是在IT编程领域。有时候我们理所当然的用着现成的框架,以至于用的太过于顺手,更要时不时的骂一句:什么垃圾框架?我家狗都不会用!如果那些被拍死在沙滩的“前浪”听到这话,怕是要顶开棺材板给你点个赞。为什么?因为太安逸了,安逸到一出生就开着拖拉机耕地,还嫌拖拉机费油。今天来看看不费油的,费人。现在MyBatis框架用的比较熟练了,但是有时候不明白原理,也不知道MyBatis 数据库 mysql Mybatis Java 【UVCAD】- 图块介绍,及与图层的区别 UVCAD是一款真正的手机二维CAD建模软件,该视频演示图块如何使用,及与图层的区别,真正能在手机上绘图的二维CAD建模软件。 二维 建模 图块 UVCAD 图层 jdbc篇第1课:jdbc的介绍和使用 我们已经学过mysql了,接下来我们要学学如何用java来操作mysql。 Java操作数据库所使用的技术叫JDBC,看百度百科: JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高... Java学习 JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】 1.什么是JDBCJDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API2.为什么我们要用JDBC市面上有非常多的数据库,本来我们是需要根据不同的数据库学习不同的API,sun公司为了简化这个操作,定义了JDBC API【接口】sun公司只是提供了JDBC API【接口】,数据库厂商负责实现。对于我们来说,操作数据库都... Java JDBC JavaWeb Java EE JDBC的API介绍 一、DriverManagerJdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个AP 数据库 sql 数据 ResultSet的介绍与使用 ResultSetResultSet是我们使用jdbc连接时,查询的一个返回结果集,ResultSet resultSet = stmt.executeQuery(sql),下面就使用例子介绍ResultSet的使用例子是通过jdbc连接查account表中的数据,然后用实体类Account封装起来,返回这个类的集合。 jdbc工具类代码package com.lingaolu.Utils ResultSet java mysql JDBC sql Axure的介绍与使用 在软件综合实践专题这门课上,王文娟老师要求我们每个人自学一款原型设计工具,并且介绍如何使用。在上个学期,我对于Axure有了一定程度的了解,所以我在这里介绍一下Axure。 一、概述 Axure RP是一款专业的快速原型设计工具。Axure的可视化工作环境可以让你轻松快捷的以鼠标的方式创建带有注释的 控件 拖拽 原型设计 JDBC API 介绍 清华大学计算机系 吕思飞 香港中文大学计算机系 姚剑 随着Java语言应用面的逐步拓宽,Sun Microsystems 公司开发了一个标准的SQL数据库访问界面———JDBC API。它可以使Java编程人员通过一个一致的界面,访问多种关系数据库。 JDBC API定义了一系列Java类,用来表示数据库连接、SQL语句、结果集、数据库元数据等,能够使J JDBC API queue的介绍与使用 queue队列是一种容器适配器,专门用于在FIFO上下文操作,其中从容器的一端插入元素,另一端提取元素。队列作为容器适配器的实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的 成员函数来访问其元素。元素从队尾入队列,从队头出队列。底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作: empty():检测队列是... 容器类 出队 成员函数 封装 实例化 Splashtop的介绍与使用 最近在学习的过程中,试用了一款远程控制软件,软件名字叫做Splashtop,感觉用起来还不错,接下来给大家介绍一下,感兴趣的小伙伴儿们可以尝试一波。 后端 Sharding-Jdbc源码分析与架构介绍 https://edu.51cto.com/course/20359.html适合人群:从事数据库等应用开发的JAVA开发人员、架构师。课程目标:通过本次课程能够对shardingjdbc的整体架构(核心组件、完整流程)有多面的了解课程简介:快速学习使用shardingjdbc框架,shardingjdbc是目前国内热门的分库分表框架,更是大型高并发网络公司的技术架构 JAVA Jdbc的使用 Jdbc1.什么时jdbcjdbc:Java database connectivity java数据库连接技术2.怎样使用jdbc技术?使用jdbc技术的话需要借助官方提供的jar包。jar包:是一种压缩包,包里放了各种工具类,类不是.Java 而是.class;java+Oracel:需要ojdbc14.jarJava+mysql:需要mysqlConnector.jar包。3.使用Ja bc mysql java 【JDBC与JPA】JDBC与JPA 一、简介:1. JDBC:英文全称:Java DataBase ConnectivityJDBC API是一个JavaAPI,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。JDBC代表Java数据库连接。JDBC库中所包含的API通常与数据库使用于:连接到数据库创建SQL或MySQL语句在数据库中执行SQL... 数据库 驱动程序 数据 java sql JDBC基础(2)_JDBC 接口、类介绍 JDBCJDBC接口、类介绍● JDBC中的主要类(接口)在JDBC中常用的类1、DriverManager – 类,用来获取 Connection;2、Connection – 接口;3、Statement – 接口;4、ResultSet – 接口。● DriverManager其实我们今后只需要会用 DriverManager 的 getConnection() 方... JDBC JDBC接口、类介绍 数据 sql oracle Jackson与Json的介绍与使用 目录1 JSON2 JSON转换工具的介绍3 JSON转换练习4 小结5 map对象套对象6 JSON时间类型按标准返回 1 JSON推荐一个小工具:CSDN插件可以将后端返回的json数据进行格式化,而且不容易失效毕竟是csdn维护。JSON: Javascript Object Notation(Javascript 对象表示法) JSON 是存储和交换文本信息的语法,类似 XML。 JSON json java Javascript json字符串 redis JWT的介绍与使用 JWT学习 JWT是什么 JWT简称JSON Web Token,也就是通过JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输。在数据传输过程中还可以完成数据加密、签名等相关处理。 认证流程 首先,前端通过Web表单将自己的用户名和发送到后端的接口。这一过程一般是 ... 字符串 java web应用 用户名 数据 MySQL - JDBC介绍 数据库驱动 应用程序需要通过“数据库驱动”,和数据库打交道。 JDBC介绍 需要的包 JDBC项目模板 加载驱动为何要用反射方法 老式写法:使用new方式,传入DriverManager来注册mysql的driver。然而 .mysql.jdbc.Driver类在静态代码块中,已经进行了注册工 mysql 数据库 加载 静态代码块 sql注入 Java jdbc介绍 mysql 新版本 Lombok的介绍与使用 Lombok通过简单注解来实现精简代码来达到消除冗长代码的目的。它能够提高编码效率、使代码更简洁、消除冗长代码、避免修改字段名时忘记修改方法名。 一、Lombok注解 Lombok主要常用的注解有: 1. @Data 注解在类上。在JavaBean或类JavaBean中使用,这个注解包含范围最广,它 java 构造方法 自动生成 打印流 打印日志