大部分的应用程序程序都离不开数据库,那么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一定要导入项目中。
以上内容来自于网络,如有侵权联系即删除。
猜你喜欢
发表评论
电子邮件地址不会被公开。 必填项已用*标注