一、什么是JDBC
JDBC(Java Database Connection)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准APl。 JDBC API使得开发人员可以使用纯 java 的方式来连接数据库,并执行操作。
sun公司由于不知道各个主流商用数据库的程序代码,因此无法自己写代码连接各个数据库。因此,sun公司决定自己提供一套api,凡是数据库想与Java进行连接的,数据库厂商自己必须实现JDBC这套接口。而数据库厂商的JDBC实现,我们就叫它此数据库的数据库驱动。

二、使用JDBC访问数据库流程

三、JDBC常用接口

1、Driver接口
Driver接口由数据库厂家提供,对于java开发者而言,只需要使用Driver接口就可以了。
在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装载方法。
驱动就是各个数据库厂商实现的sun公司提出的JDBC接口,即对Connection等接口的实现类的jar文件。

装载Mysql驱动
Class.forName("com.mysql.jdbc.Driver");
装载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver");

2、DriverManage接口
一DriverManager是JDBC的管理层,作用于用户和驱动程序之间。
一DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。

3、Connection接口
Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。
DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上。

连接MYSQL数据库:
Connection connection = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");

连接ORACLE数据库:
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database","user","password");

4、Statement接口
用于执行静态SQL语句并返回它所生成结果的对象。

三种Statement类:
Statement:
由createStatement创建,用于发送简单的SQL语句。(不带参数的)

PreparedStatement:**
继承自Statement接口,由prepareStatement创建,用于发送含有一个或多个输入参数的sql语句。PreparedStatement对象,会进行预编译,比Statement对象的效率更高,并且可以防止SQL注入。我们一般都使用PreparedStatement。

CallableStatement:
继承自PreparedStatement,由方法prePareCall创建,用于调用存储过程

常用的Statement方法:
execute():运行语句,返回是否有结果集。
executeQuery():运行select语句,返回ResultSet结果集。
executeUpdate():运行insert/update/delete操作,返回更新的行数

5、ResultSet接口
Statement执行SQL语句时,返回ResultSet结果集。

ResultSet提供的检索不同类型字段的方法,常用的有:
getString():获得在数据库里varchar、char等数据类型的对象。
getFloat():获得在数据库里Float类型的对象。
getDate():获得在数据库里Date类型的数据。
getBoolean():获得在数据库里面Boolean类型的数据。

依序关闭使用的对象及连接:
ResultSet–>Statement–>Connection

package com.lgd.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class Demo01 {public static void main(String[] args) {Connection connection = null;Statement statement = null;try {//1、加载驱动类Class.forName("com.mysql.jdbc.Driver");//2、建立与数据库的连接//连接对象内部其实包含了Socket对象,是一个远程的连接。比较耗时间,这是Connection对象管理的一个要点!//真正开发中,为了提高效率,都会使用连接池来管理连接对象。connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","liguodong");System.out.println(connection);//3、测试指定SQL语句以及SQL注入问题//实际应用中比较少//1.处理参数不方便//2.容易发生SQL注入的危险statement = connection.createStatement();/*String sqlone = "insert into user(username,pwd,regTime) values ('苏三',54423,NOW())";statement.execute(sqlone);*//*String nameString = "宋八";String sqltwo = "insert into user(username,pwd,regTime) values('"+nameString+"',54ds23,NOW())";statement.execute(sqltwo);*///测试SQL注入String idString = "5 or 1=1";String sql1 = "delete from user where id="+idString;statement.execute(sql1);//这样会删除所有元素} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally{if(statement!=null){try {statement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(connection!=null){try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}
package com.lgd.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;public class Demo03 {public static void main(String[] args) {Connection connection = null;PreparedStatement statement = null;try {//1、加载驱动类Class.forName("com.mysql.jdbc.Driver");//2、建立与数据库的连接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","liguodong");//3、测试PreparedStatement的基本用法String sql1 = "insert into user(username,pwd,regTime) values (?,?,?)";statement = connection.prepareStatement(sql1);/*statement.setString(1, "周杰伦");//参数索引是从1开始计算,而不是0statement.setString(2, "fdsf323");                      statement.execute();*//*//也可以使用setObject方法处理参数statement.setObject(1, "詹姆斯");statement.setObject(2, "fdf323");                       statement.execute();*/statement.setString(1, "德玛西亚");statement.setString(2, "fdsfds3");                              statement.setDate(3, new java.sql.Date(System.currentTimeMillis()));statement.execute();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally{if(statement!=null){try {statement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(connection!=null){try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}
package com.lgd.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class Demo04 {public static void main(String[] args) {Connection connection = null;PreparedStatement  statement = null;ResultSet rs1 = null;try {//1、加载驱动类Class.forName("com.mysql.jdbc.Driver");//2、建立与数据库的连接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","liguodong");//3、测试PreparedStatement的基本用法   ?占位符String sql1 = "select * from user where id>?";statement = connection.prepareStatement(sql1);statement.setObject(1, 2);//把大于2的记录都取出来rs1 = statement.executeQuery();while(rs1.next()){System.out.println(rs1.getInt(1)+"---"+rs1.getString(2)+"---"+rs1.getString(3));}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally{//执行顺序resultset-->statement-->connection这样的关闭顺序!一定要将三个try-catch块分开写!if(rs1!=null){try {rs1.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(statement!=null){try {statement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(connection!=null){try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

JDBC(Java Data Base Connectivity)基本用法相关推荐

  1. JDBC(Java Data Base Connectivity)高级用法

    一.批处理 Batch 对于大量的批处理,建议使用statement,因为PreparedStatement的预编译空间有限,当数据量特别大时,会发生异常. 示例 package com.lgd.jd ...

  2. JDBC(Java Data Base Connectivity,java数据库连接)

    2019独角兽企业重金招聘Python工程师标准>>> JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成 ...

  3. Java Data Base Connection(JDBC)

    用于执行SQL语句的Java API,可为多种关系数据库提供统一访问. 它由一组用Java语言编写的类和接口组成,是Java访问数据库的标准规范. JDBC需连接驱动. 驱动:两个设备要进行通信时需满 ...

  4. mysql date_trunc_com.mysql.jdbc.MysqlDataTruncation: Data trunca...

    连接的是mysql数据库,插入数据时,控制台报: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for colu ...

  5. java中arraycopy的用法_[jdk源码阅读系列]Java中System.arraycopy()的用法

    本文转载,原文链接: 3分钟了解Java中System.arraycopy的用法 - 伊万夫斯基 - 博客园  https://www.cnblogs.com/benjieqiang/p/114288 ...

  6. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value:

    问题:ERROR JDBCExceptionReporter:72 - Data truncation: Incorrect datetime value: '' for column 'create ...

  7. java data mining_“JDM”是“Java Data Mining”的缩写,意思是“Java数据挖掘”

    1. Based on CORBA specification, this paper concentrates on the development and research of Tianjin ...

  8. JDO(Java Data Object )

    JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API. JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要 ...

  9. java 枚举类型enum的用法详解

    Java Enum原理 public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 实际上,这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要 ...

最新文章

  1. cocos2d游戏jsc文件格式解密,SpideMonkey大冒险
  2. 基于Spark的大规模推荐系统特征工程
  3. RPM包制作之Spec文件详解
  4. 在panel中显示一个新的form
  5. .Net Core上用于代替System.Drawing的类库
  6. Zen Coding 系列教程一:入门
  7. 图床上传系统设计分析
  8. 2018年中国AI行业研究报告
  9. PHP设计模式——原型模式
  10. 4.Linux性能诊断 --- Linux工作流程内存管理
  11. beanutils.copyproperties属性值丢失_数据质量 | 脏数据?缺失值、异常值和一致性分析?...
  12. 第一章 SQL命令 ALTER TABLE(一)
  13. segy地震数据的读取python_SEGY地震数据格式分析与读写
  14. Merkle Tree(默克尔树)原理解析
  15. 今天开机发现,在光标左边多了一个长方形的带有箭头的,怎么去掉?
  16. 五子棋PVP项目总结
  17. 基于Matlab的交通限速标志的识别系统 数字图像处理大作业
  18. 开源软件发展的保障:分发协议
  19. 关于vue项目的seo问题
  20. 城乡投票源码php_PHP微信公众号投票活动系统源码 独立版

热门文章

  1. win10桌面计算机怎么显示器,win10电脑三分屏怎么设置_win10电脑怎么分屏3个显示器...
  2. 搞“两弹一星”也离不开计算尺
  3. 【机器学习】word2vec学习笔记(三):word2vec源码注释
  4. 03弱引用内存泄露和hash冲突-ThreadLocal详解-并发编程(Java)
  5. 数据结构与算法之排序(Java版)
  6. php小偷cookie,ptcms小说小偷程序 最新EXP漏洞
  7. 新浪财经沪深300指数期权和商品期权行情接口
  8. 手把手教你用 pyecharts 制作日历图
  9. 计算机网络基本知识(三):网络互联设备
  10. linux命令行python_干货:4 个绝佳的命令行终端程序