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

一、JDBC简介


Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。它JDBC是面向关系型数据库的。

1、JDBC架构
JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成:

JDBC API: 提供了应用程序对JDBC的管理连接;

JDBC Driver API: 支持JDBC管理到驱动器连接;

JDBC API的使用驱动程序管理器和数据库特定的驱动程序提供透明的连接到异构数据库;

JDBC驱动程序管理器可确保正确的驱动程序来访问每个数据源,该驱动程序管理器能够支持连接到多个异构数据库的多个并发的驱动程序;

以下是结构图,它显示了驱动程序管理器方面的JDBC驱动程序和Java应用程序的位置:


2、常见的JDBC组件:
JDBC API提供了以下接口和类:

DriverManager: 这个类管理数据库驱动程序的列表,内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求,识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接;

Driver: 此接口处理与数据库服务器通信,很少直接与驱动程序对象,相反,使用DriverManager中的对象,它管理此类型的对象,它也抽象与驱动程序对象工作相关的详细信息;

Connection : 此接口与接触数据库的所有方法,连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象

Statement : 可以使用这个接口创建的对象的SQL语句提交到数据库,一些派生的接口接受除执行存储过程的参数;

ResultSet: 这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据,它作为一个迭代器,让您可以通过移动它的数据;

SQLException: 这个类处理发生在一个数据库应用程序的任何错误.


二、连接JDBC需要掌握的基本知识


1、数据库的基本操作,

eg:MySQL的安装和基本操作(insert,delete,update,query)

2、java开发工具的使用,

eg:Eclipse/MyEclipse (包括mysql-connector-java-5.0.3-bin.jar的导入)

三、JDBC的连接及代码演示

1、JDBC连接工具类

1)、Configuration.java:可以从.xml文件中连接数据库的配置信息,需要引入dom4j-1.6.1.jar包

[java]  view plain  copy
  1. package cn.java.jdbc;  
  2.   
  3. import java.io.InputStream;  
  4.   
  5. import org.dom4j.Document;  
  6. import org.dom4j.DocumentException;  
  7. import org.dom4j.Element;  
  8. import org.dom4j.io.SAXReader;  
  9.   
  10. public class Configuration {  
  11.       
  12.     private String url;  
  13.     private String driver;  
  14.     private String username;  
  15.     private String password;  
  16.   
  17.     public Configuration() {  
  18.     }  
  19.       
  20.     public Configuration(String url, String driver, String username,  
  21.             String password) {  
  22.         super();  
  23.         this.url = url;  
  24.         this.driver = driver;  
  25.         this.username = username;  
  26.         this.password = password;  
  27.     }  
  28.       
  29.     public static Configuration getConfigure()  
  30.     {  
  31.           
  32.         try {  
  33.             InputStream in = Configuration.class.getResourceAsStream("/db.xml");  
  34.             if (null!=in) {  
  35.                 return load(in);  
  36.             }  
  37.             return null;  
  38.         } catch (DocumentException e) {  
  39.             e.printStackTrace();  
  40.             return null;  
  41.         }  
  42.           
  43.     }  
  44.   
  45.     private static Configuration load(InputStream in) throws DocumentException {  
  46.         SAXReader reader = new SAXReader();  
  47.         Document doc = reader.read(in);  
  48.         Element jdbc = doc.getRootElement();  
  49.         String url = jdbc.element("url").getText();  
  50.         String driver = jdbc.element("driver").getText();  
  51.         String username = jdbc.element("username").getText();  
  52.         String password = jdbc.element("password").getText();  
  53.         Configuration cfg = new Configuration(url, driver, username, password);  
  54.         return cfg;  
  55.     }  
  56.   
  57.     public String getUrl() {  
  58.         return url;  
  59.     }  
  60.   
  61.     public void setUrl(String url) {  
  62.         this.url = url;  
  63.     }  
  64.   
  65.     public String getDriver() {  
  66.         return driver;  
  67.     }  
  68.   
  69.     public void setDriver(String driver) {  
  70.         this.driver = driver;  
  71.     }  
  72.   
  73.     public String getUsername() {  
  74.         return username;  
  75.     }  
  76.   
  77.     public void setUsername(String username) {  
  78.         this.username = username;  
  79.     }  
  80.   
  81.     public String getPassword() {  
  82.         return password;  
  83.     }  
  84.   
  85.     public void setPassword(String password) {  
  86.         this.password = password;  
  87.     }  
  88.   
  89.   
  90. }  


2)、db.xml:保存数据库的配置信息

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <jdbc>  
  3. <url>jdbc:mysql://localhost:3306/test</url>  
  4. <driver>com.mysql.jdbc.Driver</driver>  
  5. <username>root</username>  
  6. <password></password>  
  7. </jdbc>  


3)、ConnectionFactory.java:JDBC连接工厂方法之一

[java]  view plain  copy
  1. package cn.java.jdbc;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.SQLException;  
  6.   
  7. public class ConnectionFactory {  
  8.       
  9.     private static ConnectionFactory connectionFactory=null;  
  10.     private static Configuration config=Configuration.getConfigure();  
  11.       
  12.     private ConnectionFactory()  
  13.     {  
  14.         try {  
  15.         Class.forName(config.getDriver());  
  16.     } catch (ClassNotFoundException e) {  
  17.     }  
  18.     }  
  19.       
  20.     public Connection getConnection() throws SQLException  
  21.     {  
  22.           
  23.         Connection con=null;  
  24.         try {  
  25.             con=DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword());  
  26.               
  27.             return con;  
  28.         }finally{  
  29.               
  30. //          if (null != con) {  
  31. //              con.close();  
  32. //          }  
  33.         }  
  34.           
  35.     }  
  36.       
  37.     public static ConnectionFactory getInstance()  
  38.     {    
  39.         if (null==connectionFactory) {  
  40.             connectionFactory=new ConnectionFactory();  
  41.         }  
  42.           
  43.         return connectionFactory;  
  44.           
  45.     }  
  46.   
  47. }  

4)、ConnectionFactory2.java:JDBC连接工厂方法之二

[java]  view plain  copy
  1. package cn.java.jdbc;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.SQLException;  
  5.   
  6. import javax.sql.DataSource;  
  7.   
  8. import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;  
  9.   
  10. public class ConnectionFactory2 {  
  11.   
  12.   
  13.     private DataSource ds ;  
  14.   
  15.     private static ConnectionFactory2 connectionFactory2 = null;  
  16.   
  17.     private ConnectionFactory2() {  
  18.           
  19.         MysqlDataSource myDS = new MysqlDataSource() ;  
  20.         myDS.setServerName("localhost");  
  21.         myDS.setDatabaseName("test");  
  22.         myDS.setPort(3306) ;  
  23.         myDS.setUser("root");  
  24.         myDS.setCharacterEncoding("utf-8");  
  25.         myDS.setPassword("");  
  26.         this.ds = myDS ;  
  27.     }  
  28.   
  29.     public Connection getConnection() throws SQLException {  
  30.   
  31.         Connection conn = null;  
  32.         try {  
  33.             conn = ds.getConnection() ;  
  34.             conn.setAutoCommit(false);  
  35.             return conn;  
  36.         } catch (SQLException e) {  
  37.             if (null != conn) {  
  38.                 conn.close();  
  39.             }  
  40.             throw e;  
  41.         }  
  42.     }  
  43.   
  44.     public static ConnectionFactory2 getInstance() {  
  45.   
  46.         if (null == connectionFactory2) {  
  47.             connectionFactory2 = new ConnectionFactory2();  
  48.         }  
  49.         return connectionFactory2;  
  50.   
  51.     }  
  52.   
  53. }  

5)、User.java:定义数据库表user中的id和name的bean类,其中id是自动增长的

[java]  view plain  copy
  1. package cn.java.jdbc;  
  2.   
  3. public class User {  
  4.     private int id;  
  5.     private String name;  
  6.       
  7.     public User() {  
  8.     }  
  9.     public User(int id, String name) {  
  10.         this.id = id;  
  11.         this.name = name;  
  12.     }  
  13.   
  14.     public int getId() {  
  15.         return id;  
  16.     }  
  17.   
  18.     public void setId(int id) {  
  19.         this.id = id;  
  20.     }  
  21.   
  22.     public String getName() {  
  23.         return name;  
  24.     }  
  25.   
  26.     public void setName(String name) {  
  27.         this.name = name;  
  28.     }  
  29.       
  30.   
  31. }  

6)、UserDao.java:user表的操作类,实现了insert、delete、update、query等方法

[java]  view plain  copy
  1. package cn.java.jdbc;  
  2.   
  3. import java.io.IOException;  
  4. import java.sql.Connection;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8. import java.util.ArrayList;  
  9. import java.util.List;  
  10.   
  11. public class UserDao {  
  12.     private PreparedStatement st = null;  
  13.     private ResultSet rs = null;  
  14.       
  15.     public UserDao() {  
  16.     }  
  17.       
  18.     public void insert( Connection con,String name) throws SQLException,IOException {  
  19.         String sql="insert into user(name) values(?) ";  
  20.         try{  
  21.             st=con.prepareStatement(sql);  
  22.             st.setString(1, name);  
  23.             st.executeUpdate();  
  24.         }finally{  
  25.             if (null!=st) {  
  26.                 st.close();  
  27.             }  
  28.               
  29.         }  
  30.           
  31.     }  
  32.       
  33.     public void delete(Connection con,int id) throws SQLException,IOException {  
  34.         String sql="delete from user where id=?";  
  35.         try{  
  36.             st=con.prepareStatement(sql);  
  37.             st.setInt(1, id);  
  38.             st.executeUpdate();  
  39.         }finally{  
  40.             if (null!=st) {  
  41.                 st.close();  
  42.             }  
  43.               
  44.         }  
  45.     }  
  46.       
  47.     public void update( Connection con,int id,String name) throws SQLException,IOException {  
  48.         String sql="update user set name=? where id=?";  
  49.           
  50.         try{  
  51.             st=con.prepareStatement(sql);  
  52.             st.setString(1, name);  
  53.             st.setInt(2, id);  
  54.             st.executeUpdate();  
  55.         }finally{  
  56.             if (null!=st) {  
  57.                 st.close();  
  58.             }  
  59.         }  
  60.   
  61.     }  
  62.       
  63.     public User query(Connection con,int index) throws SQLException,IOException{  
  64.         User user=new User();  
  65.         String sql="select * from user where id=?";  
  66.         try{  
  67.             st=con.prepareStatement(sql);  
  68.             st.setInt(1, index);  
  69.             rs=st.executeQuery();  
  70.             while (rs.next()) {  
  71.                 user.setId(rs.getInt(1));  
  72.                 user.setName(rs.getString(2));  
  73.                 break;  
  74.             }  
  75.               
  76.         }finally{  
  77.             if (null!=rs) {  
  78.                 rs.close();  
  79.             }  
  80.               
  81.             if (null!=st) {  
  82.                 st.close();  
  83.             }  
  84.         }  
  85.           
  86.         return user;  
  87.           
  88.   
  89.     }  
  90.       
  91.     public List<User> queryAll(Connection con) throws SQLException,IOException {  
  92.         List<User> list=new ArrayList<>();  
  93.         String sql="select * from user";  
  94.         try {  
  95.             st=con.prepareStatement(sql);  
  96.             rs=st.executeQuery();  
  97.             while (rs.next()) {  
  98.                 User user=new User();  
  99.                 user.setId(rs.getInt(1));  
  100.                 user.setName(rs.getString(2));  
  101.                 list.add(user);  
  102.             }  
  103.               
  104.         }finally{  
  105.             if (null!=rs) {  
  106.                 rs.close();  
  107.             }  
  108.               
  109.             if (null!=st) {  
  110.                 st.close();  
  111.             }  
  112.         }  
  113.           
  114.         return list;  
  115.           
  116.   
  117.     }  
  118.       
  119. }  

2、JDBC连接的测试类

1)、TestJdbc.java:数据库测试

[java]  view plain  copy
  1. package cn.java.jdbc;  
  2.   
  3. import java.io.IOException;  
  4. import java.sql.Connection;  
  5. import java.sql.SQLException;  
  6. import java.util.List;  
  7.   
  8.   
  9. public class TestJdbc {  
  10.       
  11.     public static void main(String[] args) {  
  12.         Connection con=null;  
  13.         try {         
  14.             con=(Connection) ConnectionFactory.getInstance().getConnection();  
  15.             UserDao userDao=new UserDao();  
  16.             //con=(Connection) ConnectionFactory2.getInstance().getConnection();  
  17.             if (null!=con) {  
  18.                 System.out.println("Link JDBC SUCESS");  
  19.                 //userDao.insert(con, "zhangsir");  
  20.                 //userDao.delete(con, 4);  
  21.                 //userDao.update(con, 1, "david");  
  22.                 List<User> list=userDao.queryAll(con);  
  23.                 for (User user : list) {  
  24.                     System.out.println("id="+user.getId()+" name="+user.getName());  
  25.                 }  
  26.             }  
  27.               
  28.         } catch (SQLException e) {  
  29.             e.printStackTrace();  
  30.         } catch (IOException e) {  
  31.         e.printStackTrace();  
  32.         }finally{  
  33.             if (null!=con) {  
  34.                 try {  
  35.                     con.close();  
  36.                 } catch (SQLException e) {  
  37.                 }  
  38.             }  
  39.         }  
  40.           
  41.     }  
  42.   
  43. }  

三、JDBC连接总结

JDBC操作的基本步骤是:

1、创建Connection对象,传入SQL查询命令字符串;

2、获取PreparedStatement对象:通过Connection对象传入SQL查询命令获取;

3、获取ResultSet:对PreparedStatement执行executeUpdate()或者executeQurey()获取;

4、依次关闭打开的对象:先后关闭ResultSet、PreparedStatement和Connection对象.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值