JDBC配置

来源:互联网 发布:武汉软件培训 编辑:程序博客网 时间:2024/05/28 20:20

原文地址:http://sgq0085.iteye.com/blog/1262469


3.1 数据库URL
在连接数据库时必须使用各种与数据库类型相关的参数,比如主机名、端口号和数据库名。JDBC使用了一种与普通URL相类似的语法来描述数据源。
e.g. 常用数据库URL
Derby:  jdbc:derby://localhost:1527/COREJAVA;create=true
PostgreSQL: jdbc:postgresql:COREJAVA
MySQL:  jdbc:mysql://host:port/database
Oracle:  jdbc:oracle:thin:@host:port:databse
JDBC URL的语法一般为: jdbc:subprotocol:other stuff
subprotocol用于指明连接到数据库的特定驱动程序。
other stuff参数的格式随所使用的subprotocol不同而不同。

3.2 驱动程序JAR文件
在运行访问数据库的程序时,需要将驱动程序的JAR文件包括到类路径中(编译时并不需要整个JAR文件)
从命令行启动时,只需要使用下面的命令 java -classpath .;driverJar ProgramName
通过;分号,将当前路径(由 . 字符标示的路径)与驱动程序的JAR文件分隔开。

3.3 启动数据库
数据库服务器在连接之前需要先启动
Derby数据库的启动步骤
(1)打开命令shell(linux)或cmd(windows)窗口C:\"Program Files"\Sun\JavaDB\lib
(2)找到derbyrun.jar,一般在JavaDB中(C:\Program Files\Sun\JavaDB\lib)
(3)启动服务 : java -jar derbyrun.jar server start
(4)配置文件db.properties
 ij.driver=org.apache.derby.jdbc.ClientDriver
 ij.protocol=jdbc:derby://localhost:1527/
 ij.database=DBNAME;create=true
 注意 : 只有配置文件名和database可以使用任意名
(5)在另一个shell/cmd窗口中运行Derby的交互式脚本执行工具 : java -jar derbyrun.jar ij -p db.properties
 注意 : 打开交互式执行脚本工具之后,会在derbyrun.jar所在目录下创建以配置文件中ij.database的值命名的文件夹。
(6)在打开的窗口中可以输入SQL语句,以;分号结尾。
(7)退出编辑器EXIT;
(8)关闭服务器 : java -jar derbyrun.jar server shutdown

3.4 注册驱动器类
情况一:某些JDBC的JAR文件将自动注册驱动器类(Java Standard Edition Service Provider),包含META-INF/services/java.sql.Driver文件的JAR文件可以自动注册。
e.g.Derby中lib目录下JAR包derby.jar中包含java.sql.Driver文件。该文件中"org.apache.derby.jdbc.AutoloadedDriver"为Derby的JDBC驱动程序实现名字。

情况二:如果驱动程序JAR不支持自动注册,需要找出数据库提供商使用的JDBC驱动器的名字。
典型的名字如下:
Oracle:oracle.jdbc.driver.OracleDriver
SQLServer:com.microsoft.jdbc.sqlserver.SQLServerDriver
MySQL:org.gjt.mm.mysql.Driver 或com.mysql.jdbc.Driver
注:这里实际上都是调用的com.mysql.jdbc.Driver,下面为org.gjt.mm.mysql.Driver源码

 

Java代码  收藏代码
  1. package org.gjt.mm.mysql;    
  2. import java.sql.SQLException;    
  3.   
  4. public class Driver extends com.mysql.jdbc.Driver{  
  5.   
  6. }   
 



DriverManager的两种注册方式
DriverManager : 管理一组JDBC驱动程序的基本服务。
(1)在JAVA程序中加载驱动器类
e.g.Class.forName("com.mysql.jdbc.Driver");
com.mysql.jdbc.Driver中得静态方法可以向DriverManager中注册了MYSQL的驱动实例。

Java代码  收藏代码
  1. public class Driver extends NonRegisteringDriver{  
  2.     public Driver() throws SQLException{}  
  3.     static {  
  4.         try{  
  5.             DriverManager.registerDriver(new Driver());  
  6.         }  
  7.         catch(SQLException E){  
  8.             throw new RuntimeException("Can't register driver!");  
  9.         }  
  10.     }  
  11. }  
 


Mysql的Driver类实现了java.sql.Driver接口,任何数据库提供商的驱动类都必须实现这个接口。在DriverManager类中使用的都是接口Driver类型的驱动,也就是说驱动的使用不依赖于具体的实现。
在com.mysql.jdbc.Driver类中,除了构造方法,就是一个static的方法体,它调用了DriverManager的registerDriver()方法,这个方法会加载所有系统提供的驱动,并把它们都假如到具体的驱动类中。

(2)通过设置jdbc.drivers属性。
可以通过命令参数来指定这个属性
e.g.java -Djdbc.drivers=com.mysql.jdbc.Driver ProgramName
或在应用中通过调用来设置系统属性,在这种方法中可以提供多个驱动,并用冒号将他们分割
e.g.System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver:oracle.jdbc.driver.OracleDriver")

 

(3)未尝试 DriverManager.registerDriver(new com.mysql.jdbc.Driver());
3.5 连接到数据库

驱动管理器遍历所有注册过的驱动程序,以便找到一个能够使用数据库URL中指定的子协议的驱动程序。
getConnection方法返回一个Connection对象。
要连接到数据库,我们还需要知道数据库的名字和口令。
注意:默认情况下Derby允许我们使用任何用户名进行连接,并且不坚持口令。它会为每个用户生成一个单独的模式,而默认的用户名是app。

Java代码  收藏代码
  1. package jdbc;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.IOException;  
  6. import java.sql.Connection;  
  7. import java.sql.DriverManager;  
  8. import java.sql.ResultSet;  
  9. import java.sql.SQLException;  
  10. import java.sql.Statement;  
  11. import java.util.Properties;  
  12.   
  13. public class ConnectionDB {  
  14.   
  15.     public static void main(String[] args) {  
  16.         try {  
  17.             runTest();  
  18.         } catch (SQLException se) {  
  19.             for (Throwable t : se) {  
  20.                 t.printStackTrace();  
  21.             }  
  22.         } catch (IOException ioe) {  
  23.             ioe.printStackTrace();  
  24.         } catch (ClassNotFoundException cnfe) {  
  25.             cnfe.printStackTrace();  
  26.         }  
  27.     }  
  28.   
  29.     private static void runTest() throws SQLException, IOException, ClassNotFoundException {  
  30.         Connection conn = null;  
  31.         Statement stat = null;  
  32.         try {  
  33.             conn = getConnection();  
  34.             stat = conn.createStatement();  
  35.               
  36.             stat.executeUpdate("CREATE TABLE greetings(message varchar(20))");  
  37.             stat.executeUpdate("INSERT INTO greetings VALUES('Hello,World!')");  
  38.   
  39.             ResultSet result = stat.executeQuery("SELECT message as ms FROM greetings");  
  40.             if (result.next()) {  
  41.                 System.out.println(result.getString("ms"));  
  42.             }  
  43.             result.close();  
  44.             stat.executeUpdate("DROP TABLE greetings");  
  45.         } finally {  
  46.             stat.close();  
  47.             conn.close();  
  48.         }  
  49.     }  
  50.   
  51.     private static Connection getConnection() throws IOException, SQLException, ClassNotFoundException {  
  52.         FileInputStream fis = null;  
  53.         try {  
  54.             File file = new File(System.getProperty("user.dir")+"/bin/database.properties");  
  55.             fis = new FileInputStream(file);  
  56.             Properties param = new Properties();  
  57.             param.load(fis);  
  58.   
  59.             String drivers = param.getProperty("jdbc.drivers");  
  60.             if (drivers != null && !"".equals(drivers)) {  
  61.                 System.setProperty("jdbc.drivers", drivers);  
  62.             }  
  63.   
  64. //          Class.forName(drivers);  
  65.             String url = param.getProperty("jdbc.url");  
  66.             String username = param.getProperty("jdbc.username");  
  67.             String password = param.getProperty("jdbc.password");  
  68.   
  69.             return DriverManager.getConnection(url, username, password);  
  70.   
  71.         } finally {  
  72.             fis.close();  
  73.         }  
  74.   
  75.     }  
  76. }  

 

 

Properties代码  
  1. #MySQL  
  2. jdbc.drivers=com.mysql.jdbc.Driver  
  3. jdbc.url=jdbc:mysql://localhost:3306/corejava  
  4. jdbc.username=root  
  5. jdbc.password=12345678  
  6. #Derby  
  7. #jdbc.drivers=org.apache.derby.jdbc.AutoloadedDriver  
  8. #jdbc.url=jdbc:derby://localhost:1527/COREJAVA;create=true  
  9. #jdbc.username=dbuser  
  10. #jdbc.password=12345678 
0 0
原创粉丝点击