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


 

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


首先我们在MySQL数据库中创建一个table,以供测试使用。


建表语句如下:



1. CREATE TABLE student(  
2. VARCHAR(5),  
3. name VARCHAR(20),  
4. int(3),  
5. VARCHAR(1),  
6. PRIMARY KEY(ID)  
7. )


建表结果如下图所示:




java代码中执行sql java执行数据库的语句_java代码中执行sql


 


数据库建好之后,我们就可以开始编程连接并操作数据库了。步骤如下:
1、 加载JDBC驱动程序


在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。  示例代码如下:


 


1. try{              
2. "com.mysql.jdbc.Driver");  
3. }catch(ClassNotFoundException e){  
4. "No jdbc driver");  
5.     e.printStackTrace();  
6. }

成功加载之后,会将Driver类的实例注册到DriverManager类中。


2、提供JDBC连接的URL


连接URL定义了连接数据库时的协议、子协议、数据源标识,


其 书写格式:协议:子协议:数据源标识   
    协议:在JDBC中总是以jdbc开始   


     子协议:是桥连接的驱动程序或是数据库管理系统名称   


     数据源标识:标记找到数据库来源的地址与连接端口  


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 )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。 




1. try{  
2.     Connection con = DriverManager.getConnection(url,username,password);              
3. }catch(SQLException e){  
4. "Database connect failure!");  
5.     e.printStackTrace();  
6. }


4、创建一个Statement


要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:   


(1)、执行静态SQL语句。通常通过Statement实例实现


(2)、执行动态SQL语句。通常通过PreparedStatement实例实现


(3)、执行数据库存储过程。通常通过CallableStatement实例实现  


具体实现方式:


1. try{  
2.     Statement stmt = con.createStatement();  
3. }catch(SQLException e){  
4. "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):用于执行返回多个结果集、多个更新计数或二者组合的语句。 


 实现方式示例:




    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对象的访问方法访问数据实例:


    1. while(rs.next()){  
    2. "name");  
    3. 3);  //此种方法比较高效,列是从左向右编号的,编号从1开始  
    4. " " + qage);  
    5. }

    7、关闭JDBC对象


    操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:   


    (1)、关闭记录集   


    (2)、关闭声明   


    (3)、关闭连接对象 


    实现范例


    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,这个比较讨厌。将整个流程衔接起来如下面示例程序所示:


    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. "2008", "2009", "2008", "2012", "2015","2015" };  
    13. "Wang", "Hui", "Wan", "Yuan", "Yuan", "Yang"};  
    14. int[] age = { 16, 18, 20, 18, 22, 21 };  
    15. "F", "F", "M", "M", "M", "F"};  
    16. "jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf-8";  
    17. "root";  
    18. "snow";  
    19.           
    20. "INSERT INTO class.student(ID,name,age,FM)VALUES(?,?,?,?)";  
    21. "SELECT * FROM class.student WHERE name LIKE 'Yuan';";  
    22.           
    23. try{  
    24. "com.mysql.jdbc.Driver");  
    25. catch(ClassNotFoundException e)  
    26.         {  
    27. "JDBC驱动加载失败");  
    28.             e.printStackTrace();  
    29.         }  
    30.           
    31. try{              
    32. //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. 1, ID[i]);  
    37. 2, name[i]);  
    38. 3, age[i]);  
    39. 4,FM[i]);  
    40.                 prest.addBatch();  
    41.             }  
    42.               
    43.             prest.executeBatch();  
    44.             ResultSet rs = stmt.executeQuery(querysql);  
    45. while(rs.next()){  
    46. "name");  
    47. 3);  
    48. " " + 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


    1. <dependency>  
    2. <groupId>mysql</groupId>  
    3. <artifactId>mysql-connector-java</artifactId>  
    4. <version>5.1.35</version>  
    5. </dependency>