概述

JDBC:java Data Base Connectivity ,java数据库连接,它是一种用于执行sql语句的java API,为多种关系数据库提供统一访问。

其实就是一组用java编写的类和接口。

JDBC API 提供两类主要接口:

1)面向开发人员的java.sql程序包,使得Java程序员能够进行数据库连接,执行SQL查询,并得到结果集合。

2)面向底层数据库厂商的JDBC Drivers。

程序员只需要写一个程序,就可以访问所有的数据库。

提供者:sun公司

内容:

集成在java.sql和javax.sql包下,比如:

DriverManager类:管理各种驱动

Connection接口:数据库连接

Statement接口:发送命令得到结果

等等。。。

JDBC访问数据库步骤

1.加载数据库的驱动程序–

------------Class.forName(“driverName”);

2.建立数据库连接

------------Connection conn=DriverManager.getConnection(String url, String user, String password )

------------url的格式:"jdbc:<JDBC驱动程序名:端口号>:数据源"

------------例子:"jdbc:mysql://localhost:3306/myuser"

3.执行数据库操作SQL

------------Statement stmt = conn.createStatement();

------------ResultSet rs = stmt.executeQuery(sql);

4.得到ResultSet进行结果处理

•5.关闭数据库连接

PreparedStatement类

:是Statement的子接口

•用PreparedStatement类效率会更高。使用PreparedStatement有很多优势,总结如下:

–防止SQL注入攻击(使用占位符“?”)。

–提高SQL的执行性能(在执行之前有预处理)。

–避免使用SQL方言提高JDBC中有关SQL代码的可读性。

简单的写一个例子熟悉大体流程:

花卉类:

package pojo;
/*** 花卉实体类* @author fan**/
public class Flower {private int id;//编号private String name;//名称private double price;//价格private String prodution;//产地public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getProdution() {return prodution;}public void setProdution(String prodution) {this.prodution = prodution;}
}

对应的mysql:

CREATE TABLE `flower` (`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '编号',`name` varchar(100) NOT NULL COMMENT '名称',`price` double(10,2) NOT NULL COMMENT '价格',`production` varchar(100) NOT NULL COMMENT '产地',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

我们要JDBC完成对所有花卉的读取操作:

package dao.impl;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;import com.sun.crypto.provider.RSACipher;
import com.sun.java.util.jar.pack.Package.Class;
import com.sun.org.apache.regexp.internal.recompile;import dao.FlowerDao;
import pojo.Flower;public class FlowerDaoImpl implements FlowerDao{//查询所有花卉信息@Overridepublic List<Flower> getFlowerInfoDao() {//声明jdbc变量Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;//创建集合List<Flower> lf=null;try {//加载驱动Class.forName("com.mysql.jdbc.Driver");//创建连接对象conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "root", "ytywan1314");//sql命令String sql="select * from flower";//创建sql命令对象ps=conn.prepareStatement(sql);//给占位符赋值//执行rs=ps.executeQuery();lf=new ArrayList<>();//遍历,封装到对象中while(rs.next()) {Flower f=new Flower();f.setId(rs.getInt("id"));f.setName(rs.getString("name"));f.setPrice(rs.getDouble("price"));f.setProdution(rs.getString("production"));lf.add(f);}} catch (Exception e) {e.printStackTrace();}finally {//关闭资源rs.close();ps.close();conn.close();}//返回return lf;}}

util

我们发现,增删改其实都差不多,我们写的时候都是把其中一个的代码拿来改一改,并且打开啊关闭啊这些操作也类似,所以我们要把操作们都得封装到一个类里,需要时直接传入sql语句还有参数调用即可。

public class BaseDao {private static String driver = "com.mysql.jdbc.Driver";     //数据库驱动字符串private static String url ="jdbc:mysql://localhost:3306/jeep";private static String user ="sa";     //用户名private static String password =""; //密码protected Connection conn;protected PreparedStatement pstmt;protected java.sql.ResultSet rs;/*** * 获取数据库连接对象*/public  Connection getConnection(){Connection conn = null;       //数据库连接对象//获取连接并捕捉异常try {Class.forName(driver);conn = DriverManager.getConnection(url,user,password);} catch (Exception e) {e.printStackTrace();   }return conn;   //返回连接对象}/*** * 关闭数据库连接*/public void closeAll(Connection conn, Statement stmt, java.sql.ResultSet rs){//若结果集对象不为空,则关闭if (rs !=null){try {rs.close();} catch (Exception e){e.printStackTrace();}}//若Statement对象不为空,则关闭if (stmt !=null){try {stmt.close();} catch (Exception e){e.printStackTrace();}}//若数据库连接对象不为空,则关闭if (conn !=null){try {conn.close();} catch (Exception e){e.printStackTrace();}}}/*** 增删改*/public int exceuteUpdate(String sql,Object...prams){int result = 0;//获取连接conn = this.getConnection();try {pstmt = conn.prepareStatement(sql);for (int i=0;i<prams.length;i++){pstmt.setObject(i+1, prams[i]);}result = pstmt.executeUpdate();} catch (SQLException e){e.printStackTrace();} finally {//关闭资源closeAll(conn,pstmt,rs);}return result;}
}

properties

对于常量信息,如果每次都修改代码无疑是痛苦的事,所以我们可以提取出相应的配置文件。

比如:dbinfo.properties文件内容:

db.driver=com.mysql.jdbc.Driver
db.connectUrl=jdbc:mysql://127.0.0.1:3306/myqq_db?useUnicode=true&characterEncoding=UTF-8
db.user=root
db.pwd=

java:

private static Properties dbProps = new Properties();
InputStream is = DBUtil.class.getResourceAsStream("/dbinfo.properties");
dbProps.load(is);
Class.forName(dbProps.getProperty("db.driver"));

之后我们连接时就可以根据文件的记录来取值了。

 public static Connection getCon() {try {return DriverManager.getConnection(dbProps.getProperty("db.connectUrl"), dbProps.getProperty("db.user"),dbProps.getProperty("db.pwd"));}catch(Exception e) {e.printStackTrace();return null;}}

JDBC知识积累

1、数据连接池的工作机制?

考察点:连接池

参考回答:

J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

mysql——JDBC相关推荐

  1. 架构周报| 浅析MySQL JDBC连接配置上的两个误区

    经典案例 \\ 浅析MySQL JDBC连接配置上的两个误区:相信使用MySQL的同学都配置过它的JDBC驱动,多数人会直接从哪里贴一段URL过来,然后稍作修改就上去了,对应的连接池配置也是一样的,很 ...

  2. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 数据库报错

    -- 查询mysql 数据库链接空闲时间持有最大空闲时间,单位为秒 SHOW VARIABLES WHERE VAriable_name = 'interactive_timeout'; -- 会出现 ...

  3. logstash mysql eror_Logstash安装记录(报错com.mysql.jdbc.Driver not loaded的解决)

    Logstash是es官方标配的ELK中的"L",它们三者的关系是这样:"E"指elasticsearch,用来提供核心的搜索服务:"L"指 ...

  4. weblogic 配置mysql数据源Cannot load driver class: com.mysql.jdbc.Driver的问题

    这两天在学习weblogic,因为我本身用mysql较多,所以在weblogic配置数据源时,就 选择了mysql,但是你在测试时会发现报一个错误: Cannot load driver class: ...

  5. MySql JDBC

    1.什么是数据库? 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库中的数据进行增加.修改.删除.及查询操作. 数据库系统类型(历史发展): ...

  6. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法 java.lang.ClassNotFoundException: com.

    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法 java.lang.ClassNotFoundException: com.m ...

  7. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    昨天数据库做了一些改动,早上再打开的项目的时候就出现了这样的问题 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communicat ...

  8. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'rtjhyt' in 'field list'

    今天向数据库中插入语句遇到了这样的异常: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'rtjh ...

  9. mysql jdbc tomcat_Tomcat+MySql+jdbc

    Tomcat+MySql+jdbc Linux下安装配置 Jdk+Tomcat+MySql+jdbc 1.安装JDK 下载 jdk-7-linux-i586.rpm http://java.sun.c ...

  10. Loading class `com.mysql.jdbc.Driver'. This is dep

    异常信息: Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj. ...

最新文章

  1. CSS 居中完全指南
  2. MongoDB学习笔记(2)
  3. 在macOS X中gdb的codesigned问题解决
  4. HALCON示例程序texture.hdev检测树木
  5. html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例
  6. MySQL性能优化(二)
  7. Android系统 (190)---Android:JSON 简介 amp; 解析方式 讲解(Gson、AS自带org.json、Jackson)
  8. PMBOK - 项目管理知识体系 - 学习系列(1) -
  9. linux的ssh漏洞,Debian GNU/Linux Rssh安全绕过漏洞
  10. android版本升级功能,手机安卓系统怎么升级 安卓系统更新升级的三种方法介绍...
  11. edius隐藏快捷键_Edius常用快捷键
  12. 什么是软件安全性测试?安全测试有哪些测试方法和手段
  13. 什么是CIF/4CIF/QCIF/D1
  14. php三极管导通条件,关于NPN三极管的导通条件分析
  15. Android 13运行时权限变更一览
  16. 无锡室内设计培训——ps难学吗?
  17. m4s格式转换mp3_mp4怎么转换成mp3格式?mp4转mp3的傻瓜式方法
  18. 找不到设备 将计算机连接到USB打印机,打印机连接电脑没反应怎么办
  19. 计算机连接不上蓝牙鼠标,如果蓝牙鼠标无法连接到计算机该怎么办?
  20. 如何利用Photoshop进行快速切图

热门文章

  1. php搭建的网站空白,使用phpstudy搭建dedecms网站后台页面空白解决方法
  2. 移除集合效率高还是add高_List、set集合接口分析
  3. CMake find_package
  4. Linux批量删除文件
  5. RGB与YUV格式简介
  6. Asterisk队列(Queue)振铃方式(ring strategy)
  7. java情书_Java情书已写好,就差妹子了!
  8. mac java版本 不一致_mac实现不同版本的jdk切换
  9. 【转】WPF XAML X名称空间详解
  10. 【转】__declspec用法详解