首页 > Java教程 > 正文

大部分的应用程序程序都离不开数据库,那么java中怎么链接数据库,怎么进行数据可操作的呢?java中链接数据的方法有多种,推荐使用JDBC,当然,有些大型的应用程序使用的现有的框架技术去操作的数据库,归根结底,只不过对JDBC进行了封装和优化。本文是通过Java JDBC连接Oracle和MySql数据库,其中用到了使用properties配置文件,所以在ConnectionFactory中java.util.Properties解析db-conn-config.properties配置文件。

1.首先看看db-conn-param.properties的写法:

#######################Oracle###########################  
oracle.driver: oracle.jdbc.driver.OracleDriver  
oracle.url: jdbc:oracle:thin:@localhost:1521:xcz  
oracle.username: scott  
oracle.password: tiger  
#######################Oracle###########################  
          
######################MYSQL#############################  
mysql.driver = com.mysql.jdbc.Driver  
mysql.url = jdbc:mysql://localhost:3306/mysql           
mysql.username = root     
mysql.password = xcz     
######################MYSQL#############################  

注意:

* “oracle.jdbc.driver.OracleDriver” 等字符串前后面不可以有空格,否则会出现找不到驱动或用户名、密码错误等异常。

* properties 中字符串写入形式如同键值对,所以可以同上使用“=”或“:”把key与value隔开。

* properties 中value字符串不能使用引号包裹。

2.创建ConnectionFactory:

package com.orcl.util;  
  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.util.Properties;  
import java.util.UUID;  
  
public class ConnectionFactory {  
      
    /** 
     * 驱动 
     */  
    private String driver;  
      
    /** 
     * 连接字符串 
     */  
    private String url;  
      
    /** 
     * 数据库登录用户名称 
     */  
    private String username;  
      
    /** 
     * 数据库登录密码 
     */  
    private String password;  
      
    private String db;  
      
    /** 
     * 常量代表"ORACLE" 
     */  
    public final static String ORACLE_DB = "oracle";  
      
    /** 
     * 常量代表"MYSQL" 
     */  
    public final static String MYSQL_DB = "mysql";    
      
    /** 
     * 单例模式 获取一个数据库连接工厂 
     */  
    private static ConnectionFactory connFactory = null;  
      
    public static synchronized ConnectionFactory getConnFactoryInstance(String db){  
        if(connFactory == null){  
            connFactory = new ConnectionFactory(db);  
        }  
        return connFactory;  
    }  
      
    private ConnectionFactory(String db){  
        try {  
            initOrclParams(db);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
      
    /** 
     * 通过配置文件获取数据库连接参数 
     * @param db 数据库名称 
     * @throws IOException 
     */  
    private void initOrclParams(String db) throws IOException{  
        Properties properties = new Properties();  
  
        InputStream in = new FileInputStream(new File("db-conn-config.properties"));  
        properties.load(in);  
      
        if(db.equals(ORACLE_DB))  
        {  
            getParams(properties,db);  
        }  
        else if(db.equals(MYSQL_DB))  
        {  
            getParams(properties,db);  
        }  
    }  
      
    /** 
     * 根据数据库名获取相应的参数 
     * @param p Properties 
     * @param db  
     */  
    private void getParams(Properties p,String db){  
        //注意:如果不用trim(),这样properties文件中的字符串后面不能有空格,否则会出错  
        driver = p.getProperty(db + ".driver").trim();  
        url = p.getProperty(db + ".url").trim();  
        username = p.getProperty(db + ".username").trim();  
        password = p.getProperty(db + ".password").trim();  
    }  
      
    /** 
     * 获取连接对象 
     * @param db 连接的数据库名 取值于ConnectionFactory中的常量:ORCL_DB/MYSQL_DB 
     * @return 
     */  
    public Connection getConn()  
    {  
        Connection conn = null;  
          
        try   
        {  
            Class.forName(driver);  
            conn = DriverManager.getConnection(url, username, password);  
            // 设置不自动提交  
            conn.setAutoCommit(false);  
        }   
        catch (ClassNotFoundException e)   
        {  
            e.printStackTrace();  
        }   
        catch (SQLException e)   
        {  
            e.printStackTrace();  
        }   
          
        return conn;  
    }  
  
    /** 
     * 关闭操作 
     * @param conn 
     * @param pst 
     * @param rs 
     */  
    public static void close(Connection conn, PreparedStatement pst, ResultSet rs) {  
        try {  
            if (rs != null) {  
                rs.close();  
            }  
            if (pst != null) {  
                pst.close();  
            }  
            if (conn != null) {  
                conn.close();  
            }  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }  
      
    /** 
     * 获取UUID 
     * @return 
     */  
    public String getUUID() {  
        return UUID.randomUUID().toString();  
    }  
      
    public void setPassword(String password) {  
        this.password = password;  
    }  
      
    public String getDriver() {  
        return driver;  
    }  
  
    public void setDriver(String driver) {  
        this.driver = driver;  
    }  
  
    public String getUrl() {  
        return url;  
    }  
  
    public void setUrl(String url) {  
        this.url = url;  
    }  
  
    public String getUsername() {  
        return username;  
    }  
  
    public void setUsername(String username) {  
        this.username = username;  
    }  
  
    public String getPassword() {  
        return password;  
    }  
  
    public String getDb() {  
        return db;  
    }  
  
    public void setDb(String db) {  
        this.db = db;  
    }  
  
} 

3.测试

@Test  
public void test() {  
    ConnectionFactory factory = ConnectionFactory.getConnFactoryInstance(ConnectionFactory.ORACLE_DB);  
    Connection conn = factory.getConn();  
    try {  
        PreparedStatement pst = conn.prepareStatement("select * from emp");  
        java.sql.ResultSet rs = pst.executeQuery();  
        while (rs.next()) {  
            System.out.println(rs.getString(2));  
        }  
    } catch (SQLException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  
}

如果使用其他的数据库,可以在property文件中配置相应的数据库信息,然后代码中添加相应的判断就OK了。当然,相应的驱动jar一定要导入项目中。

以上内容来自于网络,如有侵权联系即删除。

猜你喜欢
发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论信息