JDBC到数据库的通信路径
编写一个数据库程序之前,需要收集大量的信息和文件,下面将讨论这些内容。
MySql: jdbc:mysql://localhost:3306/db_name
Oracle: jdbc:oracle:thin:@loaclhost:1521:orcl
Mysql: MySQL Connector/J
Oracle: Oracle Database 11 g Release 2 JDBC Drivers
MySql:Class.forName("com.mysql.jdbc.Driver")
Oracle:Class.forName("oracle.jdbc.driver.OracleDriver")
String url = "jdbc:mysql//localhost:3306/db_name"; String user = "root"; String password = "root"; Connection conn = DriverManager.getConnection(url, user, password);
驱动管理器遍历所有注册过的驱动程序,以便找到一个能够使用数据库URL中指定的子协议的驱动程序。 getConnection 方法返回一个 Connection 对象,开发者使用 Connection 对象来执行 SQL 语句。
开发者一般将 JDBC 配置写到配置文件中,便于管理修改,当然也可以写在 Java 类里。下面的程序清单(以 Mysql 为例)从名为 jdbc.properties 的文件中加载连接参数,并连接到数据库。要想获得数据库连接,只需要调用 DBConnection 类的静态方法 getConnection
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test user=root password=root
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class DBConnection { private static String config = "src/jdbc.properties"; private static String driver; private static String url; private static String user; private static String password; /** * 静态代码块 注册驱动器类 */ static { Properties props = new Properties(); try { FileInputStream fis = new FileInputStream(config); props.load(fis); driver = props.getProperty("driver"); url = props.getProperty("url"); user = props.getProperty("user"); password = props.getProperty("password"); Class.forName(driver); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } public static void close(Connection conn, Statement stmt, ResultSet rs) { try { if(rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if(conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } public static void close(Connection conn, Statement stmt) { close(conn, stmt, null); } }
当使用完ResultSet、Statement或Connection对象时,应立即调用close方法。这些对象都使用了规模较大的数据结构,所以我们不应该等待垃圾回收器来处理它们。