MySQL——Java 访问 MySQL 数据库

一.   下载与安装 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's
 identity 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 explicit
 option 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 for
 server 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()方法返回TRUE
		if(rst==true) {
		    ResultSet result = mystatement. getResultSet();       //将查询结果传递给result
			while(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()方法返回FALSE
		else {
		     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版

猜你喜欢

转载自blog.csdn.net/qq_41573234/article/details/80618303