转自: http://blog.csdn.net/tobetheender/article/details/52772157

Java通过JDBC 进行MySQL数据库操作

原创 2016年10月10日 16:46:41
  • 4407

一:前言

在测试工作中难免会和数据库打交道,可能大家对数据库语句都比较熟,比如常见的增删改查等,但是当我们在做自动化测试时,比如接口测试,大部分请求参数,可能都是从数据库中取值,并且接口返回值最后都会记录在数据库中,这样前提就需要和数据库建立连接,才能进行读写操作。


二:JDBC是什么

java提供了一个API也就是JDBC(Java Data Base Connectivity),可以为多种关系数据库提供统一访问和操作,它由一组用Java语言编写的类和接口组成。

  • 没有jdbc之前 
    java开发人员需要维护不同的数据库的驱动程序,如果数据库的底层实现改变,驱动程序可能会随之改变!!

  • 有了jdbc之后: 
    java开发人员只需维护java应用和一套规范,也就是jdbc接口。数据库厂商提供具体的java驱动程序,数据库厂商的底层实现改变,厂商随之更新驱动程序,而不影响java应用程序!!


三:实现步骤

  1. 导入数据包 
    需要包括含有需要进行数据库编程的JDBC类的包。大多数情况下,使用 import java.sql.* 就可以了.

  2. 添加JDBC驱动程序包 
    添加jar程序驱动包http://www.mysql.com/downloads/connector/j,初始化驱动程序,可以与数据库打开一个通信通道。

  3. 打开数据库连接 
    需要使用DriverManager.getConnection() 方法创建一个Connection对象,它代表与数据库的物理连接。

  4. 执行数据库操作 
    需要使用类型声明的对象建立并提交一个SQL语句到数据库。

  5. 从结果集中提取数据 
    要求使用适当的关于ResultSet.getXXX()方法来检索结果集的数据。

  6. 清理环境 
    需要明确地关闭所有的数据库资源相对依靠JVM的垃圾收集。

JDBCUtil类

  • 主程序
  

 package com.jdbc;

 //导入数据包
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; /**
* @author Charlie.chen
*
*/ public class JDBCUtil{ // 驱动包名和数据库url
private static String url = null;
private static String driverClass = null;
// 数据库用户名和密码
private static String userName = null;
private static String password = null; /**
* 初始化驱动程序
* 静态代码块中(只加载一次)
*/
static{
try {
//读取db.properties文件
Properties prop = new Properties(); /**
* 使用类路径的读取方式
* / : 斜杠表示classpath的根目录
* 在java项目下,classpath的根目录从bin目录开始
* 在web项目下,classpath的根目录从WEB-INF/classes目录开始
*/
InputStream in = JDBCUtil.class.getResourceAsStream("/db.properties"); //加载文件
prop.load(in);
//读取信息
url = prop.getProperty("url");
driverClass = prop.getProperty("driverClass");
userName = prop.getProperty("user");
password = prop.getProperty("password"); //注册驱动程序
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
System.out.println("驱程程序注册出错");
}
} /**
* 打开数据库驱动连接
*/
public static Connection getConnection(){
try {
Connection conn = DriverManager.getConnection(url, userName, password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
} /**
* 清理环境,关闭连接(顺序:后打开的先关闭)
*/
public static void close(Connection conn,Statement stmt,ResultSet rs){
if(rs!=null)
try {
rs.close();
} catch (SQLException e1) {
e1.printStackTrace();
throw new RuntimeException(e1);
}
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);
}
}
} public static void main(String[] args) { Connection conn = null;
Statement stmt = null;
ResultSet rs = null; conn=JDBCUtil.getConnection();
try {
stmt=conn.createStatement();
//准备sql操作语句
String sql= "SELECT id, first, last, age FROM YourDBName";
rs = stmt.executeQuery(sql); //从结果集中提取数据
while(rs.next()){
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last"); System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCUtil.close(conn, stmt, rs);
}
}
}
  • JDBC配置文件db.properties
  •  url=jdbc:mysql://localhost/yourDBName
    user=root
    password=root
    driverClass=com.mysql.jdbc.Driver

    四:JDBC核心API

    JDBC接口核心的API

    • java.sql.*
    • javax.sql.*

    •  |- Driver接口: 表示java驱动程序接口。所有的具体的数据库厂商要来实现此接口。
      |- connect(url, properties): 连接数据库的方法。
      url: 连接数据库的URL
      URL语法: jdbc协议:数据库子协议://主机:端口/数据库
      user: 数据库的用户名
      password: 数据库用户密码
      |- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序
      |-registerDriver(driver) : 注册驱动类对象
      |-Connection getConnection(url,user,password); 获取连接对象 |- Connection接口: 表示java程序和数据库的连接对象。
      |- Statement createStatement() : 创建Statement对象
      |- PreparedStatement prepareStatement(String sql) 创建PreparedStatement对象
      |- CallableStatement prepareCall(String sql) 创建CallableStatement对象 |- Statement接口: 用于执行静态的sql语句
      |- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML)
      |- ResultSet executeQuery(String sql) :执行的静态的查询sql语句(DQL) |-PreparedStatement接口:用于执行预编译sql语句
      |- int executeUpdate() : 执行预编译的更新sql语句(DDL,DML)
      |-ResultSet executeQuery() : 执行预编译的查询sql语句(DQL) |-CallableStatement接口:用于执行存储过程的sql语句(call xxx)
      |-ResultSet executeQuery() : 调用存储过程的方法 |- ResultSet接口:用于封装查询出来的数据
      |- boolean next() : 将光标移动到下一行
      |-getXX() : 获取列的值

      五:常见的SQL执行语句

    •  String sql = "CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender VARCHAR(2))";
      //发送sql语句,执行sql语句,得到返回结果
      int count = stmt.executeUpdate(sql); String sql = "SELECT * FROM student";
      //执行sql
      ResultSet rs = stmt.executeQuery(sql); String sql = "INSERT INTO student(NAME,gender) VALUES('李四','女')";
      int count = stmt.executeUpdate(sql); String sql = "UPDATE student SET NAME='"+name+"' WHERE id="+id+""; String sql = "DELETE FROM student WHERE id="+id+"";

      六:补充

      数据库url制定

      当加载的驱动程序,可以建立程序中使用DriverManager.getConnection()方法的连接。为方便参考,让列出了三个重载DriverManager.getConnection()方法:

      getConnection(String url)

      getConnection(String url, Properties prop)

      getConnection(String url, String user, String password)

      在这里,每个表单需要一个数据库URL。数据库的URL是指向数据库地址。

      制定一个数据库URL是大多数用在建立连接相关。 
      如图列出了下来流行的JDBC驱动程序名和数据库的URL。 

      参考资料

      http://www.yiibai.com/jdbc/jdbc-sample-code.html#

Java通过JDBC 进行MySQL数据库操作的更多相关文章

  1. ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库

    1.MySQL存储过程   1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if  while)等等 的sql语句   1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...

  2. java用JDBC连接MySQL数据库的详细知识点

    想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...

  3. Java使用JDBC连接MySQL数据库

    1.引用 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写 ...

  4. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  5. 【转】Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  6. Java 通过JDBC连接Mysql数据库的方法和实例

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  7. Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  8. Java:jdbc连接mysql数据库

    安装eclipse和mysql的步骤这里不赘述了. 1.一定要下jar包 要想实现连接数据库,要先下载mysql-connector-java-5.1.47(或者其他版本)的jar包.低版本的jar包 ...

  9. JDBC连接mysql数据库操作详解

    1.什么是JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...

随机推荐

  1. obj-c编程15[Cocoa实例01]:一个会发声的随机数生成器

    哇!终于到了obj-c编程系列的第15篇喽,一路走过来满不容易的哦!(怎么个意思,这才哪到哪啊!),为了能够更好的练习obj-c在Cocoa框架上的编程,接下来会以N篇Cocoa实例的博文来巩固和记忆 ...

  2. 如何用Python网络爬虫爬取网易云音乐歌曲

    今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将网易云歌词抓取下来已经不再话下了,在抓取歌词的时候在函数中传入了歌手ID和歌曲名两 ...

  3. wamp 服务监控和启动

    近日我的 wamp 莫名其妙的崩溃重启,apache 能自动起来, mysql 却悲剧了. 于是有了下面的wamp服务监控和启动的批处理文件 @echo off rem define loop tim ...

  4. GitHub上整理的一些资料

    技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 ...

  5. 动态规划:给出两个字符串s1和s2,返回其中最大的公共子串

    求公共子字符串问题(连续的) 这个题目是当时远景能源公司现场笔试的一道题目,当时根本就不知道动态规划是什么鬼,直接上来就暴力求解,面试官很谄媚的问我,你这能求出来吗?当时很年轻的说,能啊!现在想,当时 ...

  6. Linux/Windows 文件交互读取转义字符变换

  7. 使用ASP.NET SignalR实现一个简单的聊天室

    前言 距离我写上一篇博客已经又过了一年半载了,时间过得很快,一眨眼,就把人变得沧桑了许多.青春是短暂的,知识是无限的.要用短暂的青春,去学无穷无尽的知识,及时当勉励,岁月不待人.今天写个随笔小结记录一 ...

  8. 在基于debian的deepin或者Ubuntu上双等号“==”和双中括号“[[]]”不能使用的真相

    使用的deepin-linux,今天写shell脚本的时候,忽然发现 sh test.sh 会报错[[: not found ,双等号和双中括号都不能使用了,很郁闷,后来探索发现,sh其实是dash的 ...

  9. jQuery匿名函数$(function(){ }

    搬运原地址:https://zhidao.baidu.com/question/473318430.html $(function(){ }实际上是匿名函数.这是JQuery的语法,$表示JQuery ...

  10. [Java算法分析与设计]--单向链表(List)的实现和应用

    单向链表与顺序表的区别在于单向链表的底层数据结构是节点块,而顺序表的底层数据结构是数组.节点块中除了保存该节点对应的数据之外,还保存这下一个节点的对象地址.这样整个结构就像一条链子,称之为" ...