JAVA通过JDBC连接并操作MySQL数据库

时间:2021-07-19 13:02:19
JAVA通过JDBC连接并操作MySQL数据库
 
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
首先我们在MySQL数据库中创建一个table,以供测试使用。
建表语句如下:
[sql]  view plain  copy
  1. CREATE TABLE student(  
  2.     ID VARCHAR(5),  
  3.     name VARCHAR(20),  
  4.     age int(3),  
  5.     FM VARCHAR(1),  
  6.     PRIMARY KEY(ID)  
  7. )  
建表结果如下图所示:
JAVA通过JDBC连接并操作MySQL数据库
 
数据库建好之后,我们就可以开始编程连接并操作数据库了。步骤如下:
1、 加载JDBC驱动程序
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。  示例代码如下:
 
[java]  view plain  copy
  1. try{              
  2.     Class.forName("com.mysql.jdbc.Driver");  
  3. }catch(ClassNotFoundException e){  
  4.     System.out.println("No jdbc driver");  
  5.     e.printStackTrace();  
  6. }  
成功加载之后,会将Driver类的实例注册到DriverManager类中。
2、提供JDBC连接的URL
连接URL定义了连接数据库时的协议、子协议、数据源标识,
书写格式:协议:子协议:数据源标识   
    协议:在JDBC中总是以jdbc开始   
     子协议:是桥连接的驱动程序或是数据库管理系统名称   
     数据源标识:标记找到数据库来源的地址与连接端口  
[java]  view plain  copy
  1. String url="jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8";  
  2. String username = "root";  
  3. String password = "snow";  
useUnicode=tru e 表示使用Unicode字符集
characterEncoding=utf-8 表示使用utf-8字符编码方式
3、 创建数据库的连接
(1)、要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。   
(2)、使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。 
[java]  view plain  copy
  1. try{  
  2.     Connection con = DriverManager.getConnection(url,username,password);              
  3. }catch(SQLException e){  
  4.     System.out.println("Database connect failure!");  
  5.     e.printStackTrace();  
  6. }  
4、创建一个Statement
要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:   
(1)、执行静态SQL语句。通常通过Statement实例实现
(2)、执行动态SQL语句。通常通过PreparedStatement实例实现
(3)、执行数据库存储过程。通常通过CallableStatement实例实现  
具体实现方式:
[java]  view plain  copy
  1. try{  
  2.     Statement stmt = con.createStatement();  
  3. }catch(SQLException e){  
  4.     System.out.println("Statement create failure!");  
  5.     e.printStackTrace();  
  6. }  
5、执行SQL语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute   
(1)、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。   
(2)、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等   
(3)、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。 
 实现方式示例:
[java]  view plain  copy
  1. ResultSet rs = stmt.executeQuery("SELECT * FROM ...");     
  2. int rows = stmt.executeUpdate("INSERT INTO ...");     
  3. boolean flag = stmt.execute(String sql);    
6、处理结果
此处分为两种情况:
(1)、执行更新返回的是本次操作影响到的记录数
(2)、执行查询返回的结果是一个ResultSet对象
         ResultSet包含符合SQL查询语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。
         使用结果集ResultSet对象的访问方法访问数据实例:
[java]  view plain  copy
  1. while(rs.next()){  
  2.     String qname = rs.getString("name");  
  3.     String qage = rs.getString(3);  //此种方法比较高效,列是从左向右编号的,编号从1开始  
  4.     System.out.println(qname + " " + qage);  
  5. }  
7、关闭JDBC对象
操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:   
(1)、关闭记录集   
(2)、关闭声明   
(3)、关闭连接对象 
实现范例
[java]  view plain  copy
  1. try{  
  2.     if(rs != null){  
  3.         rs.close();  
  4.     }  
  5.     if(stmt != null){  
  6.         stmt.close();  
  7.     }  
  8.     if(con != null){  
  9.         con.close();  
  10.     }             
  11. }catch(SQLException e){  
  12.     e.printStackTrace();  
  13. }     
总结,注意上面每一个操作都需要捕获SQLException,这个比较讨厌。将整个流程衔接起来如下面示例程序所示:
[java]  view plain  copy
  1. import java.lang.Class;  
  2. import java.sql.Connection;  
  3. import java.sql.DriverManager;  
  4. import java.sql.ResultSet;  
  5. import java.sql.Statement;  
  6. import java.sql.PreparedStatement;  
  7. import java.sql.ResultSet;  
  8. import java.sql.SQLException;  
  9. public class MySQLtest{  
  10.     public static void main(String [] args){          
  11.       
  12.         String[] ID = { "2008""2009""2008""2012""2015","2015" };  
  13.         String[] name = { "Wang""Hui""Wan""Yuan""Yuan""Yang"};  
  14.         int[] age = { 161820182221 };  
  15.         String[] FM = {"F""F""M""M""M""F"};  
  16.         String url="jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8";  
  17.         String username = "root";  
  18.         String password = "snow";  
  19.           
  20.         String sql = "INSERT INTO class.student(ID,name,age,FM)VALUES(?,?,?,?)";  
  21.         String querysql = "SELECT * FROM class.student WHERE name LIKE 'Yuan';";  
  22.           
  23.         try{  
  24.             Class.forName("com.mysql.jdbc.Driver");  
  25.         }catch(ClassNotFoundException e)  
  26.         {  
  27.             System.out.println("JDBC驱动加载失败");  
  28.             e.printStackTrace();  
  29.         }  
  30.           
  31.         try{              
  32.             Connection con = DriverManager.getConnection(url,username,password); //MySQL连接对象          
  33.             Statement stmt = con.createStatement();  
  34.             PreparedStatement prest = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);  
  35.             for(int i=0; i<ID.length; i++){  
  36.                 prest.setString(1, ID[i]);  
  37.                 prest.setString(2, name[i]);  
  38.                 prest.setInt(3, age[i]);  
  39.                 prest.setString(4,FM[i]);  
  40.                 prest.addBatch();  
  41.             }  
  42.               
  43.             prest.executeBatch();  
  44.             ResultSet rs = stmt.executeQuery(querysql);  
  45.             while(rs.next()){  
  46.                 String qname = rs.getString("name");  
  47.                 String qage = rs.getString(3);  
  48.                 System.out.println(qname + " " + qage);  
  49.             }  
  50.               
  51.             int rows = stmt.executeUpdate("DELETE FROM class.student;");  
  52.             System.out.println(rows);  
  53.             if(rs != null){  
  54.                 rs.close();  
  55.             }  
  56.             if(stmt != null){  
  57.                 stmt.close();  
  58.             }  
  59.             if(con != null){  
  60.                 con.close();  
  61.             }             
  62.         }catch(SQLException e){  
  63.             e.printStackTrace();  
  64.         }         
  65.     }     
  66. }  
 
我是创建的maven项目,需要添加mysql-connector-java-5.1.35.jar包,以下为maven中添加的dependency
[html]  view plain  copy
  1. <dependency>  
  2.     <groupId>mysql</groupId>  
  3.     <artifactId>mysql-connector-java</artifactId>  
  4.     <version>5.1.35</version>  
  5. </dependency>  

本文参考博客链接:http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html

转载自:https://blog.csdn.net/wanghuiqi2008/article/details/46238457#0-qzone-1-67024-d020d2d2a4e8d1a374a433f596ad1440