一.   下载与安装 MySQL   Connector/J

MySOL  驱动  MySQL Connector/J  下载网站 https://dev.mysql.com/downloads/connector/j/5.1.html

Source and Binaries(zip) 用于 Windows 操作系统,Source and Binaries(tar,gz)   用于 Linux 操作系统。

二.  Java 连接 MySQL 数据库

在  java.sql  包中存在  DriverManager  类、Connection  接口、Statement  接口和  ResultSet  接口。这些类和接口的含义和作用如下:

  • DriverManager  类:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)
  • Connection  接口:数据库连接,负责进行数据库间通讯,SQL 执行以及事务处理都在某个特定  Connection 环境中进行。主要用于管理建立好的数据库连接。
  • Statement  接口:主要用以执行 SQL 语句。
  • ResultSet  接口:主要用于存储数据库返回的记录。

1.  指定  MySQL  驱动程序

使用  java.lang.Class  类中的  forName()  方法指定  JDBC  驱动的类型,语句如下:

Class.froName("com.mysql.jdbc.Driver");

2.  使用  getConnection ()   方法连接数据库

指定  MySQL 驱动程序以后,就可以使用  DriverManager  类和  Connection 接口来连接数据库了。这里使用DriverManager 类中的 getConnection ()方法。 getConnection()  方法返回一个 JDBC  Connection 对象,应该把它存储在程序中,以便以后引用。

调用  getConnection ()  方法的语法如下:

   DriverManager.getConnection( URL, username, password);

其中,URL 是程序要连接的数据库和要使用的  JDBC  驱动程序; usename 是程序连接时所用的数据库用户名; password 是该用户名的密码。

【例】连接本地计算机  MySQL  数据库,MySQL  使用默认端口号  3306, 连接的数据库为  test_db,使用用户  root  连接,密码为  zth1530738736  。连接  MySQL  的语句如下:

Connection  myConnection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test",
"root",
"zth1530738736"
);

也可为:

String   url="jdbc:mysql://localhost:3306/test_db";    //获取协议、 IP  和端口等信息
String   user="root";                                  //获取数据库用户名
String   password="zth1530738736";                     //取数据库用户密码
Connection   myConnection = DriverManager.getConnection ( url ,  user , password);//创建 Connection 对象

三.   Java 操作 MySQL  数据库

Statement  接口主要用来执行 SQL 语句,执行后返回的结果由  ResultSet  接口管理。

1.  创建  Statement  对象

Connection  对象调用  createStatement()  方法来创建  Statement  对象,该方法的语法格式如下:

Statement   mystatement = connection.createStatement();

其中,mystatement  是  Statement  对象;connection  是  Connection  对象;createStatement() 方法返回  Statement对象。Statement 对象创建成功后,可以调用其中的方法来执行 SQL 语句。

2.  使用  SELECT  语句查询数据

Statement  对象创建完成后,可以调用  executeQuery()  方法执行 SELECT  语句,查询结果会返回给  ResultSet  对象。

调用  executeQuery ()  方法的语法格式如下:

 ResultSet   rs = statement.executeQuery ("SELECT 语句");

通过该语句可以将查询结果存储到  rs  中。如果查询包含多条记录,可以使用循环语句来读取所有的记录,其代码如下:

while ( rs.next ( ) ){

            String ss = rs.getString("字段名");

            System.out.print (ss );

        }

其中“字段名”参数表示查询出来的记录的字段名称。使用  getString  函数可以将指定字段的值取出来。

【例】从fruits表中查询水果的名称和价格。

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import com.mysql.jdbc.Connection;public class test {public static void main(String[] args) throws ClassNotFoundException, SQLException {Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/test_db";String user = "root";String password = "zth1530738736";java.sql.Connection myConnection = DriverManager.getConnection(url,user,password);Statement mystatement = myConnection.createStatement();ResultSet  rs = mystatement.executeQuery("  SELECT f_name,f_price FROM  test_db.fruits");while(rs.next()) {String fn = rs.getString("f_name");String fp = rs.getString("f_price");System.out.println(fn+"  "+fp);}if(mystatement != null) {mystatement.close();mystatement=null;}if(myConnection !=null) {myConnection.close();myConnection=null;}}}

执行结果:

警告信息:

Fri Jun 08 15:07:11 CST 2018 WARN: Establishing SSL connection without server'sidentity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+
and 5.7.6+ requirements SSL connection must be established by default if explicitoption isn't set. For compliance with existing applications not using SSL the
verifyServerCertificate property is set to 'false'. You need either to explicitly
disable SSL by setting useSSL=false, or set useSSL=true and provide truststore forserver certificate verification.

谷歌翻译:

警告:建议不建立服务器身份验证的SSL连接。 根据MySQL 5.5.45+,5.6.26+和5.7.6+
的要求,如果未设置显式选项,则必须默认建立SSL连接。 为了符合不使用SSL的现有应
用程序,verifyServerCertificate属性设置为'false'。 您需要通过设置useSSL = false显
式禁用SSL,或者设置useSSL = true并为服务器证书验证提供信任库。

解决办法:

在URL加入useSSL=true或者false即可,如下所示://原先报错程序
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db,"root", "123456");
//更改后正确程序
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db?useSSL=false", "root", "123456");
//也可以使用如下
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf-8&useSSL=false", "root", "123456");

3.   插入、更新和删除数据

如果需要插入、更新和删除数据,需要用  Statement 对象调用  executeUpdate()  方法来实现,该方法执行后,返回影响表的行数。

使用  executeUpdate()  方法的语法格式如下:

 int   result  =  statement.executeUpdate(sql);

其中,sql 参数可以是  INSERT  语句,也可以是  UPDATE 语句或者  DELECT  语句。该语句的结果为数字。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

【例】向  fruits  表中插入一条新记录。部分代码如下:

Statement mystatement= myConnection.createStatement();           //创建Statement对象
String sql=" INSERT  INTO  fruits   VALUES  ('h1',166 ,'biueberry',20.2)";
int  result = mystatement.executeUpdate(sql);                    //执行INSERT语句,返回插入的记录数
System.out.println( result );                                    //输出插入的记录数

控制台返回结果:

数据库查询结果:

mysql> SELECt *  FROM  fruits  WHERE  f_id='h1';
+------+------+-----------+---------+
| f_id | s_id | f_name    | f_price |
+------+------+-----------+---------+
| h1   |  166 | biueberry |   20.20 |
+------+------+-----------+---------+
1 row in set (0.00 sec)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

【例】更新  fruits  表中  f_id  为‘h1’的记录,将该记录的  f_price  改为  33.5。部分代码如下:

Statement mystatement= myConnection.createStatement();           //创建Statement对象
String sql=" UPDATE  fruits  SET  f_price = 33.5  WHERE  f_id = 'h1'";
int  result = mystatement.executeUpdate(sql);                    //执行  UPDATE 语句,返回更新的记录数
System.out.println( result );                                    //输出更新的记录数

控制台返回结果:

数据库查询结果:

mysql> SELECt *  FROM  fruits  WHERE  f_id='h1';
+------+------+-----------+---------+
| f_id | s_id | f_name    | f_price |
+------+------+-----------+---------+
| h1   |  166 | biueberry |   33.50 |
+------+------+-----------+---------+
1 row in set (0.00 sec)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

【例】删除  fruits  表中  f_id  为‘h1’的记录。部分代码如下:

Statement mystatement=myConnection.createStatement();            //创建Statement对象
String sql=" DELETE  FROM fruits  WHERE  f_id='h1'";             //获取DELECT语句
int result = mystatement.executeUpdate(sql);                     //执行DELECT语句,返回删除的记录数
System.out.print(result);                                        //输出删除的记录数

控制台返回结果:

数据库查询结果:

mysql> SELECt *  FROM  fruits  WHERE  f_id='h1';
Empty set (0.00 sec)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

4.    执行任意  SQL  语句

如果无法确定  SQL  语句是查询还是更新时,可以使用  execute()  函数。 该函数的返回结果是  boolean  类型的值,返回值为 true  表示执行查询语句,返回  false 表示执行更新语句。

调用  execute()  方法的代码:

  boolean  result  =  statement.execute(sql) ;

如果要获取  SELECT  语句的查询结果,需要调用  getResultSet() 方法。要获取  INSERT  语句、UPDATE  语句或者DELETE语句影响表的行数,需要调用  getUpdateCount()  方法。

   ResultSet   result1 = statement. getResultSet();

    int   result2  =  mystatement.getUpdateCount();  

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

【例】使用  execute()  函数执行 SQL 语句。部分代码如下:

Statement mystatement=myConnection.createStatement();         //创建Statement对象String sql=("SELECT f_name,f_price FROM fruits");               //定义sql变量,获取SELECT语句boolean rst = mystatement.execute(sql);                        //执行SELECT语句//如果执行SELECT语句,则execute()方法返回TRUEif(rst==true) {ResultSet result = mystatement. getResultSet();       //将查询结果传递给resultwhile(result.next()){                          //判断是否还有记录String fn = result.getString("f_name");            //获取f_name字段的值String fp=result.getString("f_price");           //获取f_name字段的值System.out.println(fn+"  "+ fp);                //输出字段的值}}//如果执行UPDATE语句、INSERT语句或者DELECT语句,则execute()方法返回FALSEelse {int ss=mystatement.getUpdateCount();                       //获取发生变化的记录数System.out.println(ss);                            //输出记录数}

控制台返回结果:

5.  关闭创建的对象

当所有的语句执行完毕后,需要关闭创建的对象,包括  Connection  对象、Statement  对象和  ResultSet   对象。关闭对象的顺序是先关闭  ResultSet  对象, 然后关闭  Statement  对象, 最后关闭  Connection  对象,这个和创建对象的顺序正好相反。关闭对象使用的是 close()  方法,将对象的值设为空。

关闭对象的部分代码如下:

if( result != null) {                             //判断  ResultSet  对象是否为空
result.close();                            //调用  close()  方法关闭  ResultSet  对象
result=null;
}

if(  statement != null) {                   //判断  Statement  对象是否为空
statement.close();                    //调用  close()  方法关闭 Statement 对象
statement=null;
}
if(  Connection !=null ) {                //判断  Connection  对象是否为空
Connection.close();                //调用  close()  方法关闭  Connection  对象
Connection=null;
}

四.   Java  备份和还原  MySQL  数据库

1.  备份  MySQL 数据库

Java  语言中的  Runtime  类的  exec()  方法可以运行外部的命令。调用  exec()  方法的代码如下:
Runtime   rr  =  Runtime.getRuntime();
    rr.exec("外部命令语句");

    【例】在  Windows  操作系统下用  Java  备份  MySQL  数据库。部分代码如下:
String str = "mysqldump  -u root  -pzth1530738736    -pot  booksDB  > G:/booksDB.sql ";//将  mysqldump  命令的语句赋值给str
Runtime rr = Runtime.getRuntime();                  //创建  Runtime  对象
rr.exec("cmd /c"+str);                              //调用  exec()  函数
上面的例子将  booksdb  数据库备份到   G:  目录下的  booksDB.sql   文件中。使用  -pot  选项可以提高备份的速度;   cmd  表示要使用  cmd  命令来打开  DOS  窗口;/C  表示执行完毕后关闭  DOS  窗口。

2.  还原  MySQL  数据库

用  Java  还原  MySQL  数据库时,使用  exec ()  方法来执行  mysq|  命令。

【例】在  windows  操作系统下    Java  还原  MySQL  数据库。部分代码如下:
String   str  =  "mysql  -u   root    -pzth1530738736   booksDB   <  G:\\booksDB.sql";//将  mysql  命令的语句赋值给str
Runtime   rr  =  Runtime.getRuntime();                  //创建R  untime 对象
rr.exec("cmd /c" + str);                                //调用exec()函数

将  G:\目录下的  booksDB.sql   文件还原到数据库 booksDB  中。

【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版

MySQL——Java 访问 MySQL 数据库相关推荐

  1. MySql数据库记录相差14小时排错,使用Java访问Mysql数据库时出现时区异常的解决方案

    最近遇到1个大坑,A系统迁移到B系统,2边系统 同1个字段 createTime 看到的不一致. 表象: A系统: 2019-6-10 17:34 B系统: 2019-6-11 .... 再次尝试: ...

  2. Java 访问MySQL的小例子

    Java访问Mysql,需要有mysql.jar包,这个需要提前准备好.在java中引入mysql.jar有两种方法,下面将详细介绍. (一)新建项目时,通过导入外部jar的方法: (1)打开myec ...

  3. Linux系统下授权MySQL账户访问指定数据库和数据库操作

    Linux系统下授权MySQL账户访问指定数据库 需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全 ...

  4. 授权MySQL账户访问指定数据库

    需求: 1.在MySQL中创建数据库mydata 2.新建MySQL账户admin密码123456 3.赋予账户admin对数据库mydata具有完全操作权限 操作如下: 1.登录MySQL数据库 m ...

  5. Java 访问PI 数据库:(1)安装必要软件

    Java 访问PI 数据库 需求 使用java 去访问PI 数据库 前提环境 已经在远程安装了PI 数据库. windows 系列 jre 8 及以上 资料收集 PI 官网 https://techs ...

  6. 使用Java访问Mysql数据库时出现时区异常的解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 问题来源:将Mysql5.6版本升级到8.0.12版本后,Java在访问Mysql数据库时出现如下异常: java.sql.S ...

  7. JAVA 访问MySQL数据库(使用方法及测试)

    最近我们的JAVA课程讲到数据库,老师一直强调搭建数据库环境(JDBC)的重要性,刚好我的电脑前段时间重装过,也可以趁着这个机会再来回顾一遍JDBC的搭建. 说明:本文使用的JDBC框架是基于JAVA ...

  8. mysql入门很简单.java_MySQL入门很简单: 15 java访问MySQL数据库

    1. 连接数据库 1.1 下载安装驱动 java通过JDBC(Java Database Connectivity,Java数据库连接)来访问MySQL数据库.JDBC的编程接口提供的接口和类与MyS ...

  9. 最新springboot选题推荐-商品物品产品众筹平台(mysql)-JAVA.VUE【数据库设计、论文、毕设源码、开题报告】

    摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以 ...

最新文章

  1. ajax 12301 原因小结
  2. cp文件服务器,docker容器与物理机的文件传输—docker cp命令
  3. 268. 缺失数字 golang
  4. SpringBoot-07:SpringBoot整合PageHelper做多条件分页查询
  5. 程序员6年换了8份工作,工资从4.5K涨到40K,网友问:谁敢要你?
  6. 原生js实现ajax
  7. Cannot forward after response has been committed问题解决及分析
  8. jqGrid 使用案例及笔记
  9. 让VS2008真正支持JQuery的智能感知
  10. echo 单引号和双引号
  11. 再谈 Formsville
  12. java json转excel_JSON转EXCEL代码( java)
  13. SECS/GEM Driver开发使用,带例子
  14. 完全开源:带OLED超级Mini的SWD离线烧写器!
  15. RadarNet: Efficient Gesture Recognition Technique Utilizing a Miniaturized Radar Sensor
  16. 数据分析的意义与必备技能
  17. C语言实现洗牌发牌程序,用C语言实现的扑克牌洗牌程序
  18. 全面认识数据指标体系
  19. 我们听过智商和情商,但你了解过财商吗?-民兴商学院
  20. 宇宙人工智能计算机程序,人工智能令整个宇宙变成一个玄计算机,宇宙是虚拟的...

热门文章

  1. 设计神经网络的基本原则,神经网络设计与实现
  2. 解决No EntityManager with actual transaction available for current thread
  3. Echarts仪表盘刻度线和标签配置
  4. 安装thinkphp 报错Could not find package topthink/think with stability stable.的解决方法
  5. 压力测试Jmeter+badboy
  6. 二代身份证读卡器网页读卡
  7. python nii 图像读取,转换成CT 值,设置窗宽窗位,保存成png 图像
  8. mysql类型转换及小数点保留问题(cast函数)
  9. Java中Map.Entry详解
  10. 【面经】美团算法二面