Java编程:Connection接口与反射机制详解

需积分: 18 4 下载量 104 浏览量 更新于2024-08-23 收藏 9.99MB PPT 举报
本文主要介绍了Java编程中关于`Connection`接口的常用方法,以及与之相关的Java反射机制和`Class`类的相关知识点。 在Java数据库连接(JDBC)中,`Connection`接口扮演着至关重要的角色,它是应用程序与数据库之间建立通信的桥梁。下面将详细阐述`Connection`接口的几个关键方法: 1. `Statement createStatement() throws SQLException`: 这个方法创建一个`Statement`对象,用于执行SQL语句。默认情况下,它返回的结果集类型和并发性是`ResultSet.TYPE_FORWARD_ONLY`和`ResultSet.CONCUR_READ_ONLY`。 2. `Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException`: 此方法允许自定义结果集的类型(例如滚动型或动态型)和并发性(只读、可更新),以满足特定的需求。 3. `PreparedStatement prepareStatement(String sql) throws SQLException`: 创建一个预编译的`PreparedStatement`对象,可以提高执行SQL语句的效率,特别是当同一SQL语句需要多次执行时。预编译的SQL语句可以包含参数占位符,方便动态插入数据。 4. `PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException`: 同上,但还允许设置结果集的类型和并发性。 5. `CallableStatement prepareCall(String sql) throws SQLException`: 创建一个`CallableStatement`对象,用于调用数据库的存储过程。SQL语句通常以`{call}`开头,后面跟着存储过程的名称。 6. `CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException`: 类似于上一个方法,但可以自定义结果集的属性。 7. `DatabaseMetaData getMetaData() throws SQLException`: 获取数据库的元数据,如表的信息、列的信息、索引等,这对于了解数据库结构非常有用。 8. `void setAutoCommit(boolean autoCommit) throws SQLException`: 设置当前连接的自动提交模式。如果设为`false`,则需要手动提交事务;如果设为`true`(默认),则每次操作后会自动提交。 接下来,我们转向Java反射机制。反射是Java语言的一个强大特性,允许程序在运行时检查和操作其他类的属性和方法。以下是一些关于`Class`类的关键知识点: - `Object`类中的`getClass()`方法:每个Java对象都有一个`getClass()`方法,返回表示该对象所属类的`Class`对象。这使得我们可以在运行时获取对象的类型信息。 - `Class`类的`forName(String className)`方法:通过类的全名(包括包名)动态加载类,并返回表示该类的`Class`对象。 - `getConstructors()`方法:返回类的所有公共构造方法。通过这些构造器,可以在运行时创建类的新实例。 - `getDeclaredFields()`方法:返回类及其父类的所有字段(包括私有和受保护的字段),而不仅仅是公共字段。 - `getFields()`方法:返回类的公共字段,不包括其父类的字段。 - `getMethods()`方法:返回类的所有公共方法,包括继承自父类的方法。 反射机制在许多场景下都非常实用,如单元测试、序列化、动态代理和框架开发等。它提供了一种强大的工具,让开发者能够在运行时探索和操作类的内部结构,增加了代码的灵活性和可扩展性。然而,由于反射可能会破坏封装性和性能,因此在使用时需谨慎。
2010-01-14 上传
package com.hexiang.utils.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.log4j.Logger; public class DBConnection { /** * 获得与数据库的连接 * * @param path * @return Connection */ public static Connection getConn(String classDriver, String url, String user, String pwd) { try { Class.forName(classDriver); return DriverManager.getConnection(url, user, pwd); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(DataSource dataSource) { try { return dataSource.getConnection(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(String jndiName) { try { Context ctx; ctx = new InitialContext(); DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/" + jndiName); return dataSource.getConnection(); } catch (NamingException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(Properties properties) { try { String driver = properties.getProperty("jdbc.driverClassName"); String url = properties.getProperty("jdbc.url"); String user = properties.getProperty("jdbc.username"); String password = properties.getProperty("jdbc.password"); Class.forName(driver); return DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } /** * oracle连接 * * @param path * @return Connection */ public static Connection getOracleConn(String