您的位置:首页 > 其它

JDBC

2016-07-21 14:30 162 查看


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

import java.sql.Connection;  

import java.sql.DriverManager;  

import java.sql.SQLException;  

/** 

 * 数据库连接工具类 

 * @author xqh 

 */  

public class DataBaseUtil {  

    /** 

     * 获取数据库连接 

     * @return Connection对象 

     */  

    public static Connection getConnection(){  

        Connection conn = null;  

        try {  

            // 加载驱动  

            Class.forName("com.mysql.jdbc.Driver");  

            // 数据库连接url  

            String url = "jdbc:mysql://localhost:3306/db_database";  

            // 获取数据库连接  

            conn = DriverManager.getConnection(url, "root", "123");  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

        return conn;  

    }  

    /** 

     * 关闭数据库连接 

     * @param conn Connection对象 

     */  

    public static void closeConnection(Connection conn){  

        // 判断conn是否为空  

        if(conn != null){  

            try {  

                conn.close();   // 关闭数据库连接  

            } catch (SQLException e) {  

                e.printStackTrace();  

            }  

        }  

    }  

}  


4.2 UserDao.java程序清单

[java] view
plain copy

import java.sql.Connection;  

import java.sql.PreparedStatement;  

import java.sql.ResultSet;  

import java.sql.SQLException;  

  

import com.xqh.model.User  

/** 

 * 用户数据库操作类 

 * @author xqh 

 */  

public class UserDao {  

    /** 

     * 添加用户 

     * @param user 用户对象 

     */  

    public void saveUser(User user){  

        // 获取数据库连接Connection对象  

        Connection conn = DataBaseUtil.getConnection();  

        // 插入用户注册信息的SQL语句  

        String sql = "insert into tb_user(username,password,sex,tel,photo,email) values(?,?,?,?,?,?)";  

        try {  

            // 获取PreparedStatement对象  

            PreparedStatement ps = conn.prepareStatement(sql);  

            // 对SQL语句的占位符参数进行动态赋值  

            ps.setString(1, user.getUsername());  

            ps.setString(2, user.getPassword());  

            ps.setString(3, user.getSex());  

            ps.setString(4, user.getTel());  

            ps.setString(5, user.getPhoto());  

            ps.setString(6, user.getEmail());  

            // 执行更新操作  

            ps.executeUpdate();  

            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源  

            ps.close();  

        } catch (Exception e) {  

            e.printStackTrace();  

        }finally{  

            // 关闭数据库连接  

            DataBaseUtil.closeConnection(conn);  

        }  

    }  

    /** 

     * 用户登录 

     * @param username 用户名 

     * @param password 密码 

     * @return 用户对象 

     */  

    public User login(String username, String password){  

        User user = null;  

        // 获取数据库连接Connection对象  

        Connection conn = DataBaseUtil.getConnection();  

        // 根据用户名及密码查询用户信息  

        String sql = "select * from tb_user where username = ? and password = ?";  

        try {  

            // 获取PreparedStatement对象  

            PreparedStatement ps = conn.prepareStatement(sql);  

            // 对SQL语句的占位符参数进行动态赋值  

            ps.setString(1, username);  

            ps.setString(2, password);  

            // 执行查询获取结果集  

            ResultSet rs = ps.executeQuery();  

            // 判断结果集是否有效  

            if(rs.next()){  

                // 实例化一个用户对象  

                user = new User();  

                // 对用户对象属性赋值  

                user.setId(rs.getInt("id"));  

                user.setUsername(rs.getString("username"));  

                user.setPassword(rs.getString("password"));  

                user.setSex(rs.getString("sex"));  

                user.setTel(rs.getString("tel"));  

                user.setPhoto(rs.getString("photo"));  

                user.setEmail(rs.getString("email"));  

            }  

            // 释放此 ResultSet 对象的数据库和 JDBC 资源  

            rs.close();  

            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源  

            ps.close();  

        } catch (Exception e) {  

            e.printStackTrace();  

        }finally{  

            // 关闭数据库连接  

            DataBaseUtil.closeConnection(conn);  

        }  

        return user;  

    }  

    /** 

     * 判断用户名在数据库中是否存在 

     * @param username 用户名 

     * @return 布尔值 

     */  

    public boolean userIsExist(String username){  

        // 获取数据库连接Connection对象  

        Connection conn = DataBaseUtil.getConnection();  

        // 根据指定用户名查询用户信息  

        String sql = "select * from tb_user where username = ?";  

        try {  

            // 获取PreparedStatement对象  

            PreparedStatement ps = conn.prepareStatement(sql);  

            // 对用户对象属性赋值  

            ps.setString(1, username);  

            // 执行查询获取结果集  

            ResultSet rs = ps.executeQuery();  

            // 判断结果集是否有效  

            if(!rs.next()){  

                // 如果无效则证明此用户名可用  

                return true;  

            }  

            // 释放此 ResultSet 对象的数据库和 JDBC 资源  

            rs.close();  

            // 释放此 PreparedStatement 对象的数据库和 JDBC 资源  

            ps.close();  

        } catch (SQLException e) {  

            e.printStackTrace();  

        }finally{  

            // 关闭数据库连接  

            DataBaseUtil.closeConnection(conn);  

        }  

        return false;  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: