1、感受:
1、Oracle和MySQL放在一起操作时,才发现,两者基本使用的类都是一样的,只是加载的驱动不同(“Class.forName(???);”)。一定是定了某种协议之类的...
2、具体 Class.forName(???); 的参数,到底填什么驱动名呢?一般都是 ???Driver之类的。可以用以下的方式来确定:
(1)网上搜索,此种数据库 使用的驱动类名是什么。一定是都是 包名.类名的形式,如 aaa.bbb.ccc.ddd
(2)查看自己的 jar,看里面的层次结构 是否是这样,若不是 则做出相应调整。查看 jar里面的层次结构及内容,我一般有两种方式:
(A) WinRAR,这个方式就是比较麻烦,要自己一层一层的进文件夹去查看
(B) 放到Eclipse的某个项目中,"Add to Build Path"之后 可以很直观的通过树形结构的方式来查看 里面的层级结构
2、
3、代码:分为 Oracle10g 和 MySQL8.0.15的,两个数据库的 数据库名相同,测试的表的表明也相同 表的字段也相同
3.1、Oracle10g 简单测试代码:(虽然类名是"Toracle10204",但实际测试时 Oracle还是10.2.0.1 还没升级,用的也是 10.2.0.4的"ojdbc14.jar")
package util.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import util.date.TdateUtils; public class Toracle10204 { // java连接Oracle数据库 - 菜鸟麻花 - 博客园.html ( https://www.cnblogs.com/cainiaomahua/p/6183339.html ) public static void main(String[] args) { // Toracle10204 ora = new Toracle10204(); // ora.AddData("zzzccc", "13712341234"); try { while (true) { System.out.println( TdateUtils.DatetimeZ(false, false, true) ); Class.forName(DRVIER); Connection conn = DriverManager.getConnection(URL, USERNAMR, PASSWORD); String sqlSelect = "select count(id1) from zctest01 where 1 = 1"; PreparedStatement pstm = conn.prepareStatement(sqlSelect); ResultSet rs = pstm.executeQuery(); while (rs.next()) System.out.println(rs.getInt(1)); Thread.sleep(1000 * 10); } } catch (Exception e) { e.printStackTrace(); } } // 定义连接所需的字符串 // 192.168.0.X是本机地址(要改成自己的IP地址),1521端口号,XE是精简版Oracle的默认数据库名 private static String USERNAMR = "zzc"; private static String PASSWORD = "dongruisoft.com"; //private static String DRVIER = "oracle.jdbc.OracleDriver"; private static String DRVIER = "oracle.jdbc.driver.OracleDriver"; private static String URL = "jdbc:oracle:thin:@192.168.1.187:1521:zzorcl"; // 创建一个数据库连接 Connection connection = null; // 创建预编译语句对象,一般都是用这个而不用Statement PreparedStatement pstm = null; // 创建一个结果集对象 ResultSet rs = null; /** * 获取Connection对象 * * @return */ public Connection getConnection() { try { Class.forName(DRVIER); connection = DriverManager.getConnection(URL, USERNAMR, PASSWORD); System.out.println("成功连接数据库"); } catch (Exception e) { e.printStackTrace(); } return connection; } /** * 释放资源 */ public void ReleaseResource() { if (rs != null) { try { rs.close(); } catch (Exception e) { e.printStackTrace(); } } if (pstm != null) { try { pstm.close(); } catch (Exception e) { e.printStackTrace(); } } if (connection != null) { try { connection.close(); } catch (Exception e) { e.printStackTrace(); } } } // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** /** * 向数据库中增加数据 * 首先获取表内数据总数,总数+1为新增数据的id值 * @param stuName:学生姓名 * @param gender:学生性别,1表示男性,2表示女性 * @param age:学生年龄 * @param address:学生住址 */ public void AddData(String _name, String _tel) { connection = getConnection(); // String sql = // "insert into student values('1','王小军','1','17','北京市和平里七区30号楼7门102')"; String sqlSelect = "select count(id1) from zctest01 where 1 = 1"; String sqlInsert = "insert into zctest01 values(?,?,?)"; int iCnt = 0; int iIdx = 0; try { // 计算数据库zctest01表中数据总数 pstm = connection.prepareStatement(sqlSelect); rs = pstm.executeQuery(); while (rs.next()) { iCnt = rs.getInt(1); System.out.println(rs.getInt(1)); } iIdx = iCnt + 1; // 执行插入数据操作 pstm = connection.prepareStatement(sqlInsert); pstm.setInt(1, iIdx); pstm.setString(2, _name+(""+iIdx)); pstm.setString(3, _tel); pstm.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { ReleaseResource(); } } /** * 向数据库中查询数据 */ public void SelectData() { connection = getConnection(); String sql = "select * from zctest01 where 1 = 1"; try { pstm = connection.prepareStatement(sql); rs = pstm.executeQuery(); while (rs.next()) { String id = rs.getString("id1"); String name = rs.getString("name"); String tel = rs.getString("tel"); // System.out.println(id + "\t" + name + "\t" + gender + "\t" // + age + "\t" + address); } } catch (Exception e) { e.printStackTrace(); } finally { ReleaseResource(); } } }
3.2、MySQL8.0.15 简单测试代码:(使用的是mysql-connector-java-8.0.15.jar)
package util.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class Tmysql8015 { // Java连接MySQL数据库——含步骤和代码 - 风雪夜归人shen - 博客园.html ( https://www.cnblogs.com/centor/p/6142775.html ) public static void main(String[] args) { // main_Insert(); main_Query(); } public static void main_Insert() { //驱动程序名 //String driver = "com.mysql.jdbc.Driver"; String driver = "com.mysql.cj.jdbc.Driver"; //URL指向要访问的数据库名mydata String url = "jdbc:mysql://192.168.1.110:3335/zzorcl?serverTimezone=GMT%2B8"; // jdbc:mysql://localhost:3306/exam?characterEncoding=utf8&serverTimezone=UTC // jdbc:mysql://localhost:3306/exam?characterEncoding=utf8&serverTimezone=UTC // 在xml的配置文件中 ;要用 & 代替。
// ZC: 像上面那样,为何要带参数serverTimezone? ∵ 使用高版本的 mysql-connector-java-8.0.15.jar的时候,程序会报错: // ZC: “ERROR: The server time zone value '???' is unrecognized or represents more than one time zone” //MySQL配置时的用户名 String user = "root"; //MySQL配置时的密码 String password = "dongruisoft.com"; Connection conn = null; PreparedStatement pstm = null; ResultSet rs = null; try { Class.forName(driver); conn = DriverManager.getConnection(url,user,password); if(!conn.isClosed()) System.out.println("Succeeded connecting to the Database!"); String sqlSelect = "select count(id1) from zctest01 where 1 = 1"; String sqlInsert = "insert into zctest01 values(?,?,?)"; int iCnt = 0; int iIdx = 0; // 计算数据库zctest01表中数据总数 pstm = conn.prepareStatement(sqlSelect); rs = pstm.executeQuery(); while (rs.next()) { iCnt = rs.getInt(1); System.out.println(rs.getInt(1)); } iIdx = iCnt + 1; pstm.close(); // 执行插入数据操作 pstm = conn.prepareStatement(sqlInsert); pstm.setInt(1, iIdx); pstm.setString(2, "name"+iIdx); pstm.setString(3, "tel"+iIdx); pstm.executeUpdate(); } catch(Exception e) { e.printStackTrace(); }finally{ try { if (rs != null) rs.close(); if (pstm != null) pstm.close(); if (conn != null) conn.close(); } catch(Exception e) { e.printStackTrace(); } } } public static void main_Query() { //声明Connection对象 Connection con; //驱动程序名 String driver = "com.mysql.cj.jdbc.Driver"; //URL指向要访问的数据库名mydata String url = "jdbc:mysql://192.168.1.110:3335/zzorcl?serverTimezone=GMT%2B8"; //MySQL配置时的用户名 String user = "root"; //MySQL配置时的密码 String password = "dongruisoft.com"; //遍历查询结果集 try { //加载驱动程序 Class.forName(driver); //1.getConnection()方法,连接MySQL数据库!! con = DriverManager.getConnection(url,user,password); if(!con.isClosed()) System.out.println("Succeeded connecting to the Database!"); //2.创建statement类对象,用来执行SQL语句!! Statement statement = con.createStatement(); //要执行的SQL语句 String sql = "select * from zctest01"; //3.ResultSet类,用来存放获取的结果集!! ResultSet rs = statement.executeQuery(sql); while(rs.next()) { String id1 = rs.getString("id1"); String name = rs.getString("name"); String tel = rs.getString("tel"); //输出结果 System.out.println(id1 + "\t" + name + "\t" + tel); } rs.close(); con.close(); } catch(Exception e) { //数据库连接失败异常处理 e.printStackTrace(); }finally{ System.out.println("数据库数据成功获取!!"); } } }
4、
5、