JDBC连接Oracle数据库的问题

时间:2022-09-22 00:01:42

场景:最近做一个java web项目,使用jdbc连接Oracle数据库,遇到了两个问题。

问题1:jdbc连接不上Ubuntu Oracle服务器?

后来发现这个问题的原因是由于连接字符串写错了,修正以后如下所示:

    public static Connection getConn() {
        Connection conn = null;
 
        try {
 
            // oracle
            // 1.加载驱动
            Class.forName("oracle.jdbc.driver.OracleDriver"); // 需要下载oracle
                                                                // JDBC的驱动包
            // 2.得到链接
            String url = "jdbc:oracle:thin:user@//IP/orcl"; // user是用户名,IP是服务器地址,orcl是数据库的名称
            String user = "ji"; // 你ORACLE数据中一个用户名称
            String password = "ji"; // 对应上面用户名称的密码
            conn = DriverManager.getConnection(url, user, password); // 连接
 
            System.out.println(conn);
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        return conn;
    }

 

问题2:服务器连接成功后,从服务器上取不出数据?

刚接触Oracle数据库的应用,小白一枚,若是大师,请忽略。

(1)操作自信

先描述一下本人的做法:

服务器数据库为空,本地用oracle sql developer连接,连接后创建了一张表TABLE_USER,接着用INSERT语句添加了一条测试数据,为了测试插入数据是否成功,又用SELECT语句查询了一番,如下图所示:

初始时,数据表为空:

JDBC连接Oracle数据库的问题

插入一条数据:INSERT INTO TABLE_USER(ID,USERNAME,PWD,STORE_ID) VALUES(1,'a','a',100)

再次查看数据表:(可以看到数据已经插入到数据表)

JDBC连接Oracle数据库的问题

为了保险起见,再用SELECT语句验证一番:SELECT * FROM TABLE_USER  如下图所示:

JDBC连接Oracle数据库的问题

经过上述步骤,确信数据已经准备好,可以进行Java代码读数据测试了。

(2)代码自信

java代码读取测试表数据,代码如下:

public static ResultSet getRs(Connection con, String sql, Object[] param) {
        Connection conn = con;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
 
        try {
            pstmt = conn.prepareStatement(sql);
            if (param != null) {
                for (int i = 0; i < param.length; i++) {
                    pstmt.setObject(i + 1, param[i]);
                }
            }
            rs = pstmt.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }
 
public static List<Account> findAccount(String sql, Object[] param) {
        Connection con = BaseDao.getConn();
        ResultSet rs;
        rs = BaseDao.getRss(con, sql, param);
        List<Account> list = new ArrayList<Account>();
 
        try {
            while (rs.next()) {
                Account ac = new Account();
                String accountEmail = rs.getString("USERNAME");
                ac.setAccountEmail(accountEmail);
                list.add(ac);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        return list;
    }

代码执行时,在rs.next()处一直出错,原因是rs中没有数据。

于是乎不停的检查代码是否出错,一路调试,改变代码写法,重新在sql developer上再插入数据……无数次的修改,无济于事!!!

(3)挥泪如雨

搜索引擎搜了一遍又一遍,帖子看了一篇又一篇,方法试了一个又一个,却依然没有解决这个问题……

折腾了两天,暂时放弃了……

(4)柳暗花明

偶然一次服务器关机了,然后重启了,我再次去SELECT数据时,突然发现我的数据表是空的,瞬间明白了,什么叫COMMIT。

我竟不知道sql developer插入数据是在本地,若不提交服务器上是没有的。

下面就看一下这个千呼万唤始出来COMMIT:

just insert

JDBC连接Oracle数据库的问题

insert & commit

JDBC连接Oracle数据库的问题

就是这个commit按钮才能将数据提交到服务器。

(5)重要的事情说三遍

insert、update、delete语句一定要commit

insert、update、delete语句一定要commit

insert、update、delete语句一定要commit