实现思路:java
使用一个名为oracle.properties的文件,里面写有Oracle的URL,User,Password和driver类,经过ClassLoader的输入流,输入流中有输入进程序的Oracle链接初始化参数,输入流在Properties中load中获得加载。经过getProperty(String key)获得文件信息。mysql
JdbcUtils.javasql
package exer.jdbcutils; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; /** * @author mmengyiyu * @date 2019/11/15 16:47 */ public class JdbcUtils { private static String url; private static String user; private static String pwd; private static String driverClass; // 加载mysql.properties资源 static { InputStream resource = JdbcUtils.class.getClassLoader().getResourceAsStream("exer\jdbcutils\oracle.properties"); Properties prop = new Properties(); try { prop.load(resource); url = prop.getProperty("jdbc.url"); user = prop.getProperty("jdbc.user"); pwd = prop.getProperty("jdbc.pwd"); driverClass = prop.getProperty("jdbc.driverClass"); Class.forName(driverClass); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } /** * 释放数据库链接和其JDBC资源 * @author mmengyiyu * @date 2019-11-15 19:27 * @param conn 要释放的资源引用 */ public static void release(Connection conn) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 释放预编译语句和其JDBC资源 * @author mmengyiyu * @date 2019-11-15 19:27 * @param ps 要释放的SQL语句 */ public static void release(PreparedStatement ps) { if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 释放语句和其JDBC资源 * @author mmengyiyu * @date 2019-11-15 19:27 * @param st 要释放的SQL语句 */ public static void release(Statement st) { if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 释放结果集和其JDBC资源 * @author mmengyiyu * @date 2019-11-15 19:27 * @param rs 要释放的SQL结果集 */ public static void release(ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 返回MySQL数据库链接 * @author mmengyiyu * @date 2019-11-15 19:28 * @return 数据库链接 */ public static Connection getConnection() { Connection conn = null; try { conn = DriverManager.getConnection(url,user,pwd); } catch (Exception e) { e.printStackTrace(); } return conn; } }
oracle.properties数据库
# oracle 11 jdbc.url = jdbc:oracle:thin:@//127.0.0.1:1521/orcl jdbc.user = scott jdbc.pwd = 123456 jdbc.driverClass = oracle.jdbc.driver.OracleDriver
解决这个问题的思路以下:apache
Oracle Date是不一样于Java String类型的。Java想要写入一个Oracle Date数据,须要把字符串转为java.sql.Date。字符串转换为java.sql.Date须要通过如下几步:编程
Oracle Date类型oracle
Date值的格式为NLS_DATE_FORMAT
,其具体格式以下:工具
DD-MON-RR
在这里咱们使用java.sql.Date和java.time.LocalDate,源码部分以下url
import java.sql.Date; import java.time.LocalDate; ... System.out.println("生日(格式要求:\"yyyy-MM-dd\"):"); String birthday = sc.next(); String[] split = birthday.split("-"); Date date = Date.valueOf(LocalDate.of(Integer.parseInt(split[0]),Integer.parseInt(split[1]),Integer.parseInt(split[2])));
这样就能把从屏幕上输入的字符串转换为java.sql.Date。code
因为Oracle数据库事务默认不自动提交。那么一旦编程中涉及增删改数据库(DML),必定要conn.commit(),否则的话,数据库结果没法持久化!
最直观的感觉就是:明明个人insert/update/delete了表中的记录,为何使用数据库软件查询表时表中没任何变化呢。
固然,若是一次事务中DML操做失败了,那么进入catch块就须要回滚事务了。
部分源码以下:
Connection conn = null; try { ... conn = JdbcUtils.getConnection(); ...(使用链接进行数据库操做) ... // 若是数据库操做涉及DML操做,必定要提交事务,由于Oracle默认不自动提交事务。 conn.commit(); conn.close(); } catch (SQLException e) { // 能走到这步,是由于try块中出错了,根据事务ACID,回滚来结束事务。 try { conn.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } e.printStackTrace(); } finally { JdbcUtils.release(conn); }
学会使用DBUtils。