JDBC学习笔记(1)

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

JDBC 就是用于执行SQL语句的一类Java API,通过JDBC使得我们可以直接使用Java编程来对关系数据库进行操作。通过封装,可以使开发人员使用纯Java API完成SQL的执行。

可以理解一下,IO流类是把程序的一头连在文件上进行读写的操作。JDBC sql类是把程序连在数据库上做CRUD的操作。

(前导知识,学习了解数据库的基本操作和SQL语句。)

一、JDBC基本步骤:
JDBC基本操作流程:连接数据库 --> 发送数据请求,即传统的CRUD指令-->返回操作结果集

(1)加载驱动;

//以mysql为例
Class.forName("com.mysql.jdbc.Driver"); 

(2)创建Connection对象;

Connection conn = DriverManager.getConnection(url, user, password);

(3)创建Statement对象;执行executeUpdate()或executeQurey()获得结果;

Statement st = conn.createStatement();
st.executeUpdate(sql); 
// st.executeQuery(sql);

(4)先后关闭Statement对象和Connection对象。

//rs.close();
st.close();
conn.close();

JDBC常用API和方法说明

接口 方法 说明
Connection createStatement() 创建数据库的操作执行对象
prepareStatement(String sql) 创建参数化的预处理执行对象
prepareCall(String sql) 创建一个 CallableStatement 对象来调用数据库存储过程
close() 关闭数据库连接
Statement execute(String sql) 执行SQL语句,如果返回值是结果集则为true,否则为false
executeQuery(String sql) 执行SQL语句,返回值为ResultSet
executeUpdate(String sql) 执行SQL语句,返回值为所影响的行数
close() 立即关闭Statement 对象,释放JDBC资源
ResultSet next() 将游标下移一行,新的当前行有效,则返回 true;如果不存在下一行,则返回 false
getString(int index) ;getObject(int index) ;getXxx(String name);getXxx(int index) 获取此 ResultSet 对象的当前行中指定列的值, 分别是不同的数据类型
close() 立即关闭ResultSet 对象,释放JDBC资源

ResultSetMetaData 用于获取关于 ResultSet 对象中列的类型和属性信息的对象,反射封装时用得较多。

二、JDBC封装
1、基本连接类的封装。(试着完善代码)

封装了对数据的基本操作,连接,更新(增加/修改/删除),查询数据库。

public class ConnectionDB {  
  
    /** 
     * 数据库驱动类名称 
     */  
    private static final String DRIVER = "com.mysql.jdbc.Driver";  
  
    /** 
     * 连接字符串 
     */  
    private static final String URL = "jdbc:mysql://localhost:3306/mydb";  
  
    /** 
     * 用户名 
     */  
    private static final String USERNAME = "root";  
  
    /** 
     * 密码 
     */  
    private static final String USERPASSWORD = "root";  
  
    /** 
     * 创建数据库连接对象 
     */  
    private Connection connnection = null;  
  
    /** 
     * 创建PreparedStatement对象 
     */  
    private PreparedStatement preparedStatement = null;  
      
    /** 
     * 创建CallableStatement对象 
     */  
    private CallableStatement callableStatement = null;  
  
    /** 
     * 创建结果集对象 
     */  
    private ResultSet resultSet = null;  
  
    static {  
        try {  
            // 加载数据库驱动程序  
            Class.forName(DRIVER);  
        } catch (ClassNotFoundException e) {  
            System.out.println("load driver failed!");  
            System.out.println(e.getMessage());  
        }  
    }  
  
    /** 
     * 建立数据库连接 
     * @return 数据库连接 
     */  
    public Connection getConnection() {  
        try {  
            // 获取连接  
            connnection = DriverManager.getConnection(URL, USERNAME,  
                    USERPASSWORD);  
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        }  
        return connnection;  
    }  
  
    /** 
     * insert update delete SQL语句的执行的统一方法 
     * @param sql SQL语句 
     * @param params 参数数组,若没有参数则为null 
     * @return 受影响的行数 
     */  
    public int executeUpdate(String sql, Object[] params) {  
        // 受影响的行数  
        int affectedLine = 0;  
        // to do ...
        return affectedLine;  
    }  
  
    /** 
     * SQL 查询将查询结果直接放入ResultSet中 
     * @param sql SQL语句 
     * @param params 参数数组,若没有参数则为null 
     * @return 结果集 
     */  
    private ResultSet executeQueryRS(String sql, Object[] params) {  
         // to do...
        return resultSet;  
    }  
      
    /** 
     * SQL 查询将查询结果:一行一列 
     * @param sql SQL语句 
     * @param params 参数数组,若没有参数则为null 
     * @return 结果集 
     */  
    public Object executeQuerySingle(String sql, Object[] params) {  
        Object object = null;  
        // to do...
        return object;  
    }  
  
    /** 
     * 获取结果集,并将结果放在List中 
     * @param sql  SQL语句 
     * @return List  结果集 
     */  
    public List<Object> excuteQuery(String sql, Object[] params) {  
        // 执行SQL获得结果集  
        ResultSet rs = executeQueryRS(sql, params);  
        // to do...
        return list;  
    }  
      
    /** 
     * 存储过程带有一个输出参数的方法 
     * @param sql 存储过程语句 
     * @param params 参数数组 
     * @param outParamPos 输出参数位置 
     * @param SqlType 输出参数类型 
     * @return 输出参数的值 
     */  
    public Object excuteQuery(String sql, Object[] params,int outParamPos, int SqlType) {  
        Object object = null;  
        return object;  
    }  
  
    /** 
     * 关闭所有资源 
     */  
    private void closeAll() {  
        // 关闭结果集对象  
        if (resultSet != null) {  
            try {  
                resultSet.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }  
  
        // 关闭PreparedStatement对象  
        if (preparedStatement != null) {  
            try {  
                preparedStatement.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }  
          
        // 关闭CallableStatement 对象  
        if (callableStatement != null) {  
            try {  
                callableStatement.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }  
  
        // 关闭Connection 对象  
        if (connnection != null) {  
            try {  
                connnection.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }     
    }  
} 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容