JDBC

1.简介

        JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序。

2.用途

        简单地说,JDBC 可做三件事:与数据库建立连接、发送操作数据库的语句并处理结果。

3.发送SQL语句

        JDBC提供了三个类,用于向数据库发送SQL语句。Connection接口中的三个方法可用于创建这些类的实例。下面列出这些类及其创建方法:   

        (1)Statement:由方法createStatement所创建。Statement对象用于发送简单的SQL语句。   

        (2)PreparedStatement:由方法prepareStatement所创建。PreparedStatement对象用于发送带有一个或多个输入参数(IN参数)的SQL语句。PreparedStatement拥有一组方法,用于设置IN参数的值。执行语句时,这些IN参数将被送到数据库中。PreparedStatement的实例扩展了Statement,因此它们都包括了Statement的方法。PreparedStatement对象有可能比Statement对象的效率更高,因为它已被预编译过并存放在那以供将来使用。   

        (3)CallableStatement:由方法prepareCall所创建。CallableStatement对象用于执行SQL储存程序─一组可通过名称来调用(就象函数的调用那样)的SQL语句。CallableStatement对象从PreparedStatement中继承了用于处理IN参数的方法,而且还增加了用于处理OUT参数和INOUT参数的方法。   

        不过通常来说createStatement方法用于简单的SQL语句(不带参数)、prepareStatement方法用于带一个或多个IN参数的SQL语句或经常被执行的简单SQL语句,而prepareCall方法用于调用已储存过程。

4.简单应用(用户登录部分程序清单,供参考,可以此为模板进行改写,达到自己想要的效果)

4.1 DataBaseUtil.java程序清单

[java]  view plain  copy
  1. import java.sql.Connection;  
  2. import java.sql.DriverManager;  
  3. import java.sql.SQLException;  
  4. /** 
  5.  * 数据库连接工具类 
  6.  * @author xqh 
  7.  */  
  8. public class DataBaseUtil {  
  9.     /** 
  10.      * 获取数据库连接 
  11.      * @return Connection对象 
  12.      */  
  13.     public static Connection getConnection(){  
  14.         Connection conn = null;  
  15.         try {  
  16.             // 加载驱动  
  17.             Class.forName("com.mysql.jdbc.Driver");  
  18.             // 数据库连接url  
  19.             String url = "jdbc:mysql://localhost:3306/db_database";  
  20.             // 获取数据库连接  
  21.             conn = DriverManager.getConnection(url, "root""123");  
  22.         } catch (Exception e) {  
  23.             e.printStackTrace();  
  24.         }  
  25.         return conn;  
  26.     }  
  27.     /** 
  28.      * 关闭数据库连接 
  29.      * @param conn Connection对象 
  30.      */  
  31.     public static void closeConnection(Connection conn){  
  32.         // 判断conn是否为空  
  33.         if(conn != null){  
  34.             try {  
  35.                 conn.close();   // 关闭数据库连接  
  36.             } catch (SQLException e) {  
  37.                 e.printStackTrace();  
  38.             }  
  39.         }  
  40.     }  
  41. }  

4.2 UserDao.java程序清单

[java]  view plain  copy
  1. import java.sql.Connection;  
  2. import java.sql.PreparedStatement;  
  3. import java.sql.ResultSet;  
  4. import java.sql.SQLException;  
  5.   
  6. import com.xqh.model.User  
  7. /** 
  8.  * 用户数据库操作类 
  9.  * @author xqh 
  10.  */  
  11. public class UserDao {  
  12.     /** 
  13.      * 添加用户 
  14.      * @param user 用户对象 
  15.      */  
  16.     public void saveUser(User user){  
  17.         // 获取数据库连接Connection对象  
  18.         Connection conn = DataBaseUtil.getConnection();  
  19.         // 插入用户注册信息的SQL语句  
  20.         String sql = "insert into tb_user(username,password,sex,tel,photo,email) values(?,?,?,?,?,?)";  
  21.         try {  
  22.             // 获取PreparedStatement对象  
  23.             PreparedStatement ps = conn.prepareStatement(sql);  
  24.             // 对SQL语句的占位符参数进行动态赋值  
  25.             ps.setString(1, user.getUsername());  
  26.             ps.setString(2, user.getPassword());  
  27.             ps.setString(3, user.getSex());  
  28.             ps.setString(4, user.getTel());  
  29.             ps.setString(5, user.getPhoto());  
  30.             ps.setString(6, user.getEmail());  
  31.             // 执行更新操作  
  32.             ps.executeUpdate();  
  33.             // 释放此 PreparedStatement 对象的数据库和 JDBC 资源  
  34.             ps.close();  
  35.         } catch (Exception e) {  
  36.             e.printStackTrace();  
  37.         }finally{  
  38.             // 关闭数据库连接  
  39.             DataBaseUtil.closeConnection(conn);  
  40.         }  
  41.     }  
  42.     /** 
  43.      * 用户登录 
  44.      * @param username 用户名 
  45.      * @param password 密码 
  46.      * @return 用户对象 
  47.      */  
  48.     public User login(String username, String password){  
  49.         User user = null;  
  50.         // 获取数据库连接Connection对象  
  51.         Connection conn = DataBaseUtil.getConnection();  
  52.         // 根据用户名及密码查询用户信息  
  53.         String sql = "select * from tb_user where username = ? and password = ?";  
  54.         try {  
  55.             // 获取PreparedStatement对象  
  56.             PreparedStatement ps = conn.prepareStatement(sql);  
  57.             // 对SQL语句的占位符参数进行动态赋值  
  58.             ps.setString(1, username);  
  59.             ps.setString(2, password);  
  60.             // 执行查询获取结果集  
  61.             ResultSet rs = ps.executeQuery();  
  62.             // 判断结果集是否有效  
  63.             if(rs.next()){  
  64.                 // 实例化一个用户对象  
  65.                 user = new User();  
  66.                 // 对用户对象属性赋值  
  67.                 user.setId(rs.getInt("id"));  
  68.                 user.setUsername(rs.getString("username"));  
  69.                 user.setPassword(rs.getString("password"));  
  70.                 user.setSex(rs.getString("sex"));  
  71.                 user.setTel(rs.getString("tel"));  
  72.                 user.setPhoto(rs.getString("photo"));  
  73.                 user.setEmail(rs.getString("email"));  
  74.             }  
  75.             // 释放此 ResultSet 对象的数据库和 JDBC 资源  
  76.             rs.close();  
  77.             // 释放此 PreparedStatement 对象的数据库和 JDBC 资源  
  78.             ps.close();  
  79.         } catch (Exception e) {  
  80.             e.printStackTrace();  
  81.         }finally{  
  82.             // 关闭数据库连接  
  83.             DataBaseUtil.closeConnection(conn);  
  84.         }  
  85.         return user;  
  86.     }  
  87.     /** 
  88.      * 判断用户名在数据库中是否存在 
  89.      * @param username 用户名 
  90.      * @return 布尔值 
  91.      */  
  92.     public boolean userIsExist(String username){  
  93.         // 获取数据库连接Connection对象  
  94.         Connection conn = DataBaseUtil.getConnection();  
  95.         // 根据指定用户名查询用户信息  
  96.         String sql = "select * from tb_user where username = ?";  
  97.         try {  
  98.             // 获取PreparedStatement对象  
  99.             PreparedStatement ps = conn.prepareStatement(sql);  
  100.             // 对用户对象属性赋值  
  101.             ps.setString(1, username);  
  102.             // 执行查询获取结果集  
  103.             ResultSet rs = ps.executeQuery();  
  104.             // 判断结果集是否有效  
  105.             if(!rs.next()){  
  106.                 // 如果无效则证明此用户名可用  
  107.                 return true;  
  108.             }  
  109.             // 释放此 ResultSet 对象的数据库和 JDBC 资源  
  110.             rs.close();  
  111.             // 释放此 PreparedStatement 对象的数据库和 JDBC 资源  
  112.             ps.close();  
  113.         } catch (SQLException e) {  
  114.             e.printStackTrace();  
  115.         }finally{  
  116.             // 关闭数据库连接  
  117.             DataBaseUtil.closeConnection(conn);  
  118.         }  
  119.         return false;  
  120.     }  
  121. }  

你可能感兴趣的:(JDBC)