Java MySQL 连接

本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库。

Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件。

你可以下载本站提供的 jar 包:mysql-connector-java-5.1.39-bin.jar

本实例使用的是 Eclipse,导入 jar 包:

MySQL 8.0 以上版本的数据库连接有所不同:

  • 1、MySQL 8.0 以上版本驱动包版本 mysql-connector-java-8.0.16.jar。

  • 2、com.mysql.jdbc.Driver 更换为 com.mysql.cj.jdbc.Driver。

  • MySQL 8.0 以上版本不需要建立 SSL 连接的,需要显示关闭。

  • 最后还需要设置 CST。

加载驱动与连接数据库方式如下:

Class.forName("com.mysql.cj.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_demo?useSSL=false&serverTimezone=UTC","root","password");

数据库数据

连接数据库

以下实例使用了 JDBC 连接 MySQL 数据库,注意一些数据如用户名,密码需要根据你的开发环境来配置:

package rjcs;
import java.sql.*;
public class lianjmysql
{// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  static final String DB_URL = "jdbc:mysql://localhost:3306/see";// MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL//static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  //static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&serverTimezone=UTC";// 数据库的用户名与密码,需要根据自己的设置static final String USER = "root";static final String PASS = "123";public static void main(String[] args) {Connection conn = null;Statement stmt = null;try{Class.forName(JDBC_DRIVER);                               // 注册 JDBC 驱动System.out.println("连接数据库...");                       // 打开链接conn = DriverManager.getConnection(DB_URL,USER,PASS);System.out.println(" 实例化Statement对象...");       // 执行查询stmt = conn.createStatement();            String sql;sql = "SELECT sx, mz, bz FROM cr01";ResultSet rs = stmt.executeQuery(sql);// 展开结果集数据库while(rs.next()){// 通过字段检索int sx  = rs.getInt("sx");String mz = rs.getString("mz");String bz = rs.getString("bz");// 输出数据System.out.print("ID: " + sx);System.out.print("  ,  名字: " + mz);System.out.print("  , 不知: " + bz);System.out.print("\n");}// 完成后关闭rs.close();stmt.close();conn.close();}catch(SQLException se)        {// 处理 JDBC 错误se.printStackTrace();}catch(Exception e)        {// 处理 Class.forName 错误e.printStackTrace();}finally

         {// 关闭资源try{if(stmt!=null) stmt.close();}catch(SQLException se2){}// 什么都不做try{if(conn!=null) conn.close();}catch(SQLException se){se.printStackTrace();}}System.out.println("Goodbye!");}}

执行结果:

连接数据库...
实例化Statement对象...
ID: 1 , 名字: sss , 不知: sww01
ID: 2 , 名字: aww , 不知: aww02
ID: 3 , 名字: qww , 不知: qww03
ID: 4 , 名字: eww , 不知: eww04
ID: 5 , 名字: rww , 不知: rww05
ID: 6 , 名字: yww , 不知: yww06
ID: 7 , 名字: uww , 不知: uww07
Goodbye!

package rjcs;
import java.sql.*;
public class lianjmysql
{// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  static final String DB_URL = "jdbc:mysql://localhost:3306/see";// MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL//static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  //static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&serverTimezone=UTC";// 数据库的用户名与密码,需要根据自己的设置static final String USER = "root";static final String PASS = "123";public static void main(String[] args) {Connection conn = null;Statement stmt = null;try{Class.forName(JDBC_DRIVER);                               // 注册 JDBC 驱动System.out.println("连接数据库...");                       // 打开链接conn = DriverManager.getConnection(DB_URL,USER,PASS);System.out.println(" 实例化Statement对象...");       // 执行查询stmt = conn.createStatement();String sql;sql = "SELECT sx, mz, bz FROM cr01";ResultSet rs = stmt.executeQuery(sql);// 展开结果集数据库while(rs.next()){// 通过字段检索int sx  = rs.getInt("sx");String mz = rs.getString("mz");String bz = rs.getString("bz");// 输出数据System.out.print("ID: " + sx);System.out.print("  ,  名字: " + mz);System.out.print("  , 不知: " + bz);System.out.print("\n");}// 完成后关闭rs.close();stmt.close();conn.close();}catch(SQLException se){// 处理 JDBC 错误se.printStackTrace();}catch(Exception e){// 处理 Class.forName 错误e.printStackTrace();}finally{// 关闭资源try{if(stmt!=null) stmt.close();}catch(SQLException se2){}// 什么都不做try{if(conn!=null) conn.close();}catch(SQLException se){se.printStackTrace();}}System.out.println("Goodbye!");}}

================================================

SQL 语句是诸如update,insert的更新语句,应该用statement的execute()方法。

package rjcs;
import java.sql.*;
public class lianjmysql
{// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  static final String DB_URL = "jdbc:mysql://localhost:3306/see";// MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URL//static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  //static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&serverTimezone=UTC";// 数据库的用户名与密码,需要根据自己的设置static final String USER = "root";static final String PASS = "123";public static void main(String[] args) {Connection conn = null;Statement stmt = null;try{Class.forName(JDBC_DRIVER);                               // 注册 JDBC 驱动System.out.println("连接数据库...");                       // 打开链接conn = DriverManager.getConnection(DB_URL,USER,PASS);System.out.println(" 实例化Statement对象...");       // 执行查询stmt = conn.createStatement();String sqlxg;sqlxg = "update cr01 set mz = 'xxxxxx' where sx = 1";stmt.execute(sqlxg);String sql;sql = "SELECT sx, mz, bz FROM cr01";ResultSet rs = stmt.executeQuery(sql);// 展开结果集数据库while(rs.next()){// 通过字段检索int sx  = rs.getInt("sx");String mz = rs.getString("mz");String bz = rs.getString("bz");// 输出数据System.out.print("ID: " + sx);System.out.print("  ,  名字: " + mz);System.out.print("  , 不知: " + bz);System.out.print("\n");}// 完成后关闭rs.close();stmt.close();conn.close();}catch(SQLException se){// 处理 JDBC 错误se.printStackTrace();}catch(Exception e){// 处理 Class.forName 错误e.printStackTrace();}finally{// 关闭资源try{if(stmt!=null) stmt.close();}catch(SQLException se2){}// 什么都不做try{if(conn!=null) conn.close();}catch(SQLException se){se.printStackTrace();}}System.out.println("Goodbye!");}}

执行结果:

连接数据库...
实例化Statement对象...
ID: 1 , 名字: xxxxxx , 不知: sww01
ID: 2 , 名字: aww , 不知: aww02
ID: 3 , 名字: qww , 不知: qww03
ID: 4 , 名字: eww , 不知: eww04
ID: 5 , 名字: rww , 不知: rww05
ID: 6 , 名字: yww , 不知: yww06
ID: 7 , 名字: uww , 不知: uww07
Goodbye!

============================================

JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。

执行流程:

  • 连接数据源,如:数据库。

  • 为数据库传递查询和更新指令。

  • 处理数据库响应并返回的结果。

JDBC 架构

分为双层架构和三层架构。

双层

作用:此架构中,Java Applet 或应用直接访问数据源。

条件:要求 Driver 能与访问的数据库交互。

机制:用户命令传给数据库或其他数据源,随之结果被返回。

部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网)。

三层

侧架构特殊之处在于,引入中间层服务。

流程:命令和结构都会经过该层。

吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。

历史趋势: 以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,JDBC随之被重视。

JDBC 编程步骤

加载驱动程序:

Class.forName(driverClass) //加载MySql驱动 Class.forName("com.mysql.jdbc.Driver") //加载Oracle驱动 Class.forName("oracle.jdbc.driver.OracleDriver")

获得数据库连接:

DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");

创建Statement\PreparedStatement对象:

conn.createStatement(); conn.prepareStatement(sql);

完整实例

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class DbUtil { public static final String URL = "jdbc:mysql://localhost:3306/imooc"; public static final String USER = "liulx"; public static final String PASSWORD = "123456"; public static void main(String[] args) throws Exception { //1.加载驱动程序 Class.forName("com.mysql.jdbc.Driver");

 //2. 获得数据库连接 Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);

 //3.操作数据库,实现增删改查 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");

 //如果有数据,rs.next()返回true while(rs.next()){ System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age")); } } }

增删改查

public class DbUtil { public static final String URL = "jdbc:mysql://localhost:3306/imooc"; public static final String USER = "liulx"; public static final String PASSWORD = "123456"; private static Connection conn = null; static{ try { //1.加载驱动程序 Class.forName("com.mysql.jdbc.Driver"); //2. 获得数据库连接 conn = DriverManager.getConnection(URL, USER, PASSWORD); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public static Connection getConnection(){ return conn; } } //模型 package liulx.model; import java.util.Date; public class Goddess { private Integer id; private String user_name; private Integer sex; private Integer age; private Date birthday; //注意用的是java.util.Date private String email; private String mobile; private String create_user; private String update_user; private Date create_date; private Date update_date; private Integer isDel; //getter setter方法。。。 } //---------dao层-------------- package liulx

测试开发进阶——常用中间件概念——JDBC——连接数据库理解相关推荐

  1. 测试开发进阶——常用中间件概念——JMX监听器理解

    JMX的简介 JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架 ,从Java5.0开始引入到标准Java技术平台中. JMX是一套标准的代理和服务,实际 ...

  2. 测试开发 | 这些常用测试平台,你们公司在用的是哪些呢?

    测试管理平台是贯穿测试整个生命周期的工具集合,它主要解决的是测试过程中团队协作的问题.在整个测试过程中,需要对测试用例.Bug.代码.持续集成等等进行管理.下面分别从这四个方面介绍现在比较流行的管理平 ...

  3. web开发中常用的概念

    Tomcat服务器 Web开发中的常见概念 B/S系统和C/S系统 Brower/Server:浏览器 服务器 系统 ----- 网站 Client/Server:客户端 服务器 系统 ----- Q ...

  4. 高级测试开发进阶知识详解

    一.软件测试工程师任职要求 1.技能要求 1)熟悉软件研发流程,即软件生命周期: 2)相关软件业务知识: 3)软件开发模型.测试模型: 4)常见测试方法:黑盒测试.白盒测试: 5)常见测试工具:LD. ...

  5. 测试开发进阶(四十四)

    运行一个页面 index.html <html lang="en"> <head><meta charset="UTF-8"> ...

  6. 霍格沃兹测试开发进阶班16期

    内容不重要,[看我名字]你明白我的意思最重要! 先抛出我的结论: 之所以很多人会认为自动化测试很厉害,原因在于国内IT行业对于coding的崇拜,更是源于国内测试人员自身coding能力普遍不足导致的 ...

  7. 测试开发进阶——APP性能监测工具——itest

  8. python自动化测试看什么书-《自动化平台测试开发-Python测试开发实战》新书出版了...

    首先 第一本书,当初在百度阅读初步写了个电子版,刚一上线不久即收到了数百位读者朋友阅读收藏购买,于是顺利成章就出版了纸质书. <软件自动化测试开发>认真看过的读者应该都知道,介绍的主要是自 ...

  9. 软件测试 | 测试开发 | 双非院校,从外包到外企涨薪85%,他的涨薪秘籍全公开

    本文为霍格沃兹测试开发学社优秀学员跳槽笔记,测试开发进阶学习文末加群. 本身是一所不入流的院校毕业的一名建工类专业的瓜娃子,至今记得当初是因为找工作被培训公司忽悠才加入到这个行业的,抱着做着试试的想法 ...

最新文章

  1. zerodivisionerror什么意思python-【转】为什么 Python 中的 True 等于 1
  2. [SOJ] connect components in undirected graph
  3. 打开页面默认弹出软键盘,同时兼容iOS和Android
  4. python 图像处理与识别书籍_Python图像处理之识别图像中的文字(实例讲解)
  5. 索尼MOTO等压榨国内代工厂:员工宿舍像监狱
  6. java中paint方法和paintComponent方法的不同
  7. tableView的用法具体解释
  8. 系统学习机器学习之弱监督学习(三)--Adversarial Autoencoders
  9. 初步熟悉RHEL 8
  10. 苹果iPad守江山,安卓平板搅江湖】
  11. C# MessageBox 确定|取消
  12. win10 外接显示器后出现input signal out of range
  13. day46 html
  14. SpringMVC中的拦截器介绍
  15. Jmeter性能测试报告导出
  16. windows找不到文件cmd解决方法
  17. 关于c语言坦克大战的
  18. 使用Qt绘制一个简约美观的界面 【使用QSS简单美化】(笔记)
  19. 研究人员成功从地面入侵飞行中的飞机
  20. 云梦四时歌服务器维护,云梦四时歌 - 服务退换中心 - 腾讯游戏

热门文章

  1. DB2使用db2advis工具调优SQL
  2. (Python)确定文件名的后缀名(扩展名)
  3. 使用 Pubchempy 一行命令从 Pubchem 数据库中批量下载化合物 3D 构象的 sdf 文件
  4. 【2019.06.22】12306官网模拟登陆之验证码生成与验证初探
  5. 中富金石股票投资靠谱吗?如何收取服务费
  6. CSDN日报20170615 ——《11 年高考结束到 17 年日本修士的心路历程》
  7. npm重要基础知识总结
  8. 微软100题(91)智力题
  9. 在windows上安装Postgresql,安装空间数据库postgis引擎,创建可以存储空间点线面的数据库,解决could not open extension control file问题
  10. FTP暴力破解-Hydra