JDBC連接Oracle數據庫的問題


場景:最近做一個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語句查詢了一番,如下圖所示:

初始時,數據表為空:

QQ截圖20161107170106

插入一條數據:INSERT INTO TABLE_USER(ID,USERNAME,PWD,STORE_ID) VALUES(1,'a','a',100)

再次查看數據表:(可以看到數據已經插入到數據表)

QQ截圖20161107170412

為了保險起見,再用SELECT語句驗證一番:SELECT * FROM TABLE_USER  如下圖所示:

QQ截圖20161107170704

經過上述步驟,確信數據已經准備好,可以進行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

QQ截圖20161107175459

insert & commit

QQ截圖20161107175852

就是這個commit按鈕才能將數據提交到服務器。

(5)重要的事情說三遍

insert、update、delete語句一定要commit

insert、update、delete語句一定要commit

insert、update、delete語句一定要commit


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM