JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » JDBC/SQL討論區 » Oracle  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
話題被移動
該話題已被移動 - browser , 2003-06-16 17:22
如果您尚不清楚該話題被移動的原因,請參考論壇規則以及本版公告或者聯系本版版主。
本主題所含的標籤
無標籤
作者 Re:連接ORACLE的方式 [Re:doffboll]
hkme





發文: 6
積分: 0
於 2005-07-09 11:05 user profilesend a private message to usersend email to hkmereply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我也留个贴 说说怎么连接的 !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.sql.*;
import java.util.*;
 
public   class   FirstJDBCPro {
  public  static void main(String[] args){
    if(args.length < 4){
    System.out.println("Usage: java "+FirstJDBCPro.class.getName()
                               + " dbdriver dburl user password"
                               );
    return;
    }
    Connection con = null;
    Statement stm = null;
    ResultSet rs = null;
  try{
       //1. Register jdbc drivers
       Class.forName(args[0]);
       //2. Create database connection through DriverManager
       con = DriverManager.getConnection(args[1], args[2],args[3]);
       //con = DriverManager.getConnection(args[1],"",""); no name and no pwd
  //3. Prepare statement
       stm = con.createStatement();
       //4. Execute statement
       rs = stm.executeQuery("select * from tbl_user");
       //5. handle result
       while(rs.next()){
         System.out.print("id: " + rs.getString(1));
         System.out.print("\tname: " + rs.getString(2));
     System.out.println("\tpassword: "+rs.getString(3));
       }
     }catch(Exception e){ e.printStackTrace();}
     finally{//6. release resources
        if(rs != null) try{ rs.close(); }catch(Exception e){}
        if(stm != null) try{ stm.close(); }catch(Exception e){}
        if(con != null) try{ con.close(); }catch(Exception e){}
     }
  }
}

就这样了 ,很简单 ,大家应该看得懂!


reply to postreply to post
作者 Re:連接ORACLE的方式 [Re:doffboll]
hoden_w





發文: 6
積分: 0
於 2005-07-19 10:16 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
多谢各位!
没用过正要用呢!
看看行不行!!呵呵!


reply to postreply to post
作者 Re:連接ORACLE的方式 [Re:javalien]
demijava2

Fight-F-U



發文: 74
積分: 1
於 2005-08-08 17:07 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
javalien wrote:
可是…不好意思哦...
我將環境變數 path 跟 class path 都設好了…
但是它還是出現...

1
2
3
4
5
6
7
8
9
10
11
Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
  at java.net.URLClassLoader$1.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
  at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
  at java.lang.ClassLoader.loadClassInternal(Unknown Source)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Unknown Source)
  at Thin_test.main(Thin_test.java:18)
以上的錯誤訊息....
是不是缺少了什麼東西?還是說要解壓縮些什麼東西呢?
小女子才剛學這個東西…還是說有什麼可以參考的書籍呢?
請各位前輩指導一下…謝謝!^^


會出現這個表示你的ODBC的name source設錯。


reply to postreply to post
幹,怎又被辭職。
書唸的不高,沒辦法年薪200萬,因為進不去竹科。
人長的不帥,女朋友看不起我,嫌我沒出息,因為賺的比她少,為何大家隨便都年薪100萬,我怎樣都突破不了40?
作者 Re:連接ORACLE的方式 [Re:doffboll]
demijava2

Fight-F-U



發文: 74
積分: 1
於 2005-08-09 08:40 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
根據java cook的書,寫一支程式來測目前系統上有哪些JDBC提供java連結資料庫。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.sql.*;
import java.io.*;
 
public class loaddbdrive {
 
  /**
   *java.lang.class類別有個叫forName()的方法,可以用來載入指定的類別(用來確認該類別是否有灌入系統)
   */
  public static void main(String[] av) {
    // load jdbc-odbc bridge driver (default on JDK
    try{
      Class c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      System.out.println("Load "+c);
      
    }
    catch (ClassNotFoundException ex){
      System.err.println(ex);   
    }
    // load Connector/J  (mysql driver)
    try {
      Class m = Class.forName("com.mysql.jdbc.Driver");
      System.out.println("Load"+m);
          
    }
    catch (ClassNotFoundException ex){
      System.err.println(ex);   
    } 
    //load Oracle driver
    try {
      Class d = Class.forName("oracle.jdbc.driver.OracleDriver");
      System.out.println("load"+d);
      
      
    }
    catch (ClassNotFoundException ex){
      System.err.println(ex);
    }
 
  }
 
}


執行後的結果如下:
1
2
3
Load class sun.jdbc.odbc.JdbcOdbcDriver
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver


reply to postreply to post
幹,怎又被辭職。
書唸的不高,沒辦法年薪200萬,因為進不去竹科。
人長的不帥,女朋友看不起我,嫌我沒出息,因為賺的比她少,為何大家隨便都年薪100萬,我怎樣都突破不了40?
作者 Re:連接ORACLE的方式 [Re:doffboll]
demijava2

Fight-F-U



發文: 74
積分: 1
於 2005-08-09 08:55 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
windows上有個ODBC 管理員,Open Database Connection 。
透過這個driver manager可以連線各類型的資料庫例如access,vfor,db,sql,oracle....等
首先就是進入ODBC增加一個data source
必須設定
data source name: kktest (小弟用的測試)
service name:ktest (小弟在遠端架設的oracle DB)
user id: kuser1

再來安裝設定JDBC。大至上有兩種方法:
1.在本機灌oracle client端時,由oracle installer自動安裝 JDBC。
2.灌JAVA JDK 時內含JDBC
不然手動法就是像上面大大講的直接設classpath路徑或把.jar複制到c:\jdk1.4.1\jre\lib\ext下。

---------------------
那JDBC的driver 約有四種型式:
1.JDBC-ODBCbridge plus ODBC driver :JDBC經ODBC連資料庫。
2.Native-API partly java:將jdbc轉成類似API的方式直接對特定平台資料庫連結
3.java&Middleware:用JAVA接洽中介伺服器。
4.pure java:直接用java經網路連資料庫。

那麼我們一般人最常用的就是第一種。
driver類別:sun.jdbc.odbc.JdbcOdbcDriver
前置串:jdbc:odbc:


browser edited on 2005-08-09 09:21
reply to postreply to post
幹,怎又被辭職。
書唸的不高,沒辦法年薪200萬,因為進不去竹科。
人長的不帥,女朋友看不起我,嫌我沒出息,因為賺的比她少,為何大家隨便都年薪100萬,我怎樣都突破不了40?
作者 Re:連接ORACLE的方式 [Re:doffboll]
demijava2

Fight-F-U



發文: 74
積分: 1
於 2005-08-09 08:58 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
接下來就來實做一個連線。並記錄連線過程的logs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.io.*;
import java.sql.*;
 
public class dbconnect {
 
  
  public static void main(String[] args) {
    //那個kktest就是在ODBC裡面設定的data source 內容就是會連到一台叫ktest的oracle 資料庫。
    String dburl="jdbc:odbc:kktest";
    try {
      //load jdbc-odbc driver
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      //啟動日誌
      DriverManager.setLogWriter(new PrintWriter(System.err));
      System.out.println("Getting Connection....");
      Connection conn =  DriverManager.getConnection(dburl,"kuser1","k1234");
      //如果有sql warning就印出
      SQLWarning warn = conn.getWarnings();
      while (warn != null)
      {
        System.out.println("SQLState: "+warn.getSQLState());
        System.out.println("Message: "+warn.getMessage());
        System.out.println("Vendor:  "+warn.getErrorCode());
        System.out.println("");
        warn= warn.getNextWarning();
        
      }
      conn.close();
    }
    catch (ClassNotFoundException e){
      System.out.println("Can't load driver "+e);
    }
    catch (SQLException e){
      System.out.println("Database access failed"+e);
    }
 
  }
 
}


reply to postreply to post
幹,怎又被辭職。
書唸的不高,沒辦法年薪200萬,因為進不去竹科。
人長的不帥,女朋友看不起我,嫌我沒出息,因為賺的比她少,為何大家隨便都年薪100萬,我怎樣都突破不了40?
作者 Re:連接ORACLE的方式 [Re:doffboll]
demijava2

Fight-F-U



發文: 74
積分: 1
於 2005-08-09 08:59 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
如果ODBC沒設定好data source就會出現以下的錯誤:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
RETCODE = -1
ERROR - Generating SQLException...
SQLException: SQLState(IM002) vendor code(0)
java.sql.SQLException: [Microsoft][ODBC 驅動程式管理員] 找不到資料來源名稱且未指
定預設的驅動程式
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
        at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at dbconnect.main(dbconnect.java:19)
Closing connection (SQLFreeConnect), hDbc=405279480
Closing environment (SQLFreeEnv), hEnv=405279312
getConnection failed: java.sql.SQLException: [Microsoft][ODBC 驅動程式管理員] 找
不到資料來源名稱且未指定預設的驅動程式
Database access failedjava.sql.SQLException: [Microsoft][ODBC 驅動程式管理員] 找
不到資料來源名稱且未指定預設的驅動程式


reply to postreply to post
幹,怎又被辭職。
書唸的不高,沒辦法年薪200萬,因為進不去竹科。
人長的不帥,女朋友看不起我,嫌我沒出息,因為賺的比她少,為何大家隨便都年薪100萬,我怎樣都突破不了40?
作者 Re:連接ORACLE的方式 [Re:doffboll]
demijava2

Fight-F-U



發文: 74
積分: 1
於 2005-08-09 09:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
如果設定都正確就會出現:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Getting Connection....
DriverManager.getConnection("jdbc:odbc:kktest")
    trying driver[className=sun.jdbc.odbc.JdbcOdbcDriver,sun.jdbc.odbc.JdbcOdbcD
river@17943a4]
*Driver.connect (jdbc:odbc:kktest)
JDBC to ODBC Bridge: Checking security
No SecurityManager present, assuming trusted application/applet
JDBC to ODBC Bridge 2.0001
Current Date/Time: Mon Aug 08 17:04:02 CST 2005
Loading JdbcOdbc library
Allocating Environment handle (SQLAllocEnv)
hEnv=405279312
Allocating Connection handle (SQLAllocConnect)
hDbc=405279480
Connecting (SQLDriverConnect), hDbc=405279480, szConnStrIn=DSN=kktest;UID=kuser1
;PWD=k1234
*Connection.getMetaData
*DatabaseMetaData.getDriverName
Get connection info string (SQLGetInfo), hDbc=405279480, fInfoType=6, len=300


很大一長串…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Get connection info (SQLGetInfo), hDbc=405279480, fInfoType=121
 int value=0
Get connection info (SQLGetInfo), hDbc=405279480, fInfoType=120
 int value=0
Get connection info (SQLGetInfo), hDbc=405279480, fInfoType=153
 int value=2
getConnection returning driver[className=sun.jdbc.odbc.JdbcOdbcDriver,sun.jdbc.o
dbc.JdbcOdbcDriver@17943a4]
*Connection.getWarnings
*Connection.close
0 Statement(s) to close
Disconnecting (SQLDisconnect), hDbc=405279480
Closing connection (SQLFreeConnect), hDbc=405279480
Closing environment (SQLFreeEnv), hEnv=405279312


browser edited on 2005-08-09 09:21
reply to postreply to post
幹,怎又被辭職。
書唸的不高,沒辦法年薪200萬,因為進不去竹科。
人長的不帥,女朋友看不起我,嫌我沒出息,因為賺的比她少,為何大家隨便都年薪100萬,我怎樣都突破不了40?
作者 Re:連接ORACLE的方式 [Re:doffboll]
demijava2

Fight-F-U



發文: 74
積分: 1
於 2005-08-09 10:04 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
接下來來實作一個查詢。
1
2
3
4
5
6
7
8
9
10
11
12
SQL> desc ktable1;
 名稱                                      空值?    型態
 ----------------------------------------- -------- ----------------------------
 C1                                                 VARCHAR2(100)
 
SQL> select * from ktable1;
 
C1
--------------------------------------------------------------------------------
200
300
400


這是在資料庫ktest上,叫ktable1的表格,只有一個欄位,
且有三筆記錄。

以下是JAVA code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.sql.*;
 
public class dbquery {
 
  
  public static void main(String[] args) {
    Connection myconn;
    Statement sqlstatement;
    ResultSet rs;
    try{
      //載入JDBC-ODBC driver
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      //使用data sourece來連結資料庫
      myconn = DriverManager.getConnection("jdbc:odbc:kktest","kuser1","k1234");
      sqlstatement =  myconn.createStatement();
      rs = sqlstatement.executeQuery("select * from ktable1");
      while (rs.next())
      {
        //該ktable1只有一個欄位
        String col1 = rs.getString(1);
        System.out.println(col1);
      }
      rs.close();
      sqlstatement.close();
      myconn.close();
      System.exit(0);
      
    }
    catch (Exception e)
    {
      System.err.println(e);
    }
    
  }
 
}


reply to postreply to post
幹,怎又被辭職。
書唸的不高,沒辦法年薪200萬,因為進不去竹科。
人長的不帥,女朋友看不起我,嫌我沒出息,因為賺的比她少,為何大家隨便都年薪100萬,我怎樣都突破不了40?
作者 Re:連接ORACLE的方式 [Re:doffboll]
demijava2

Fight-F-U



發文: 74
積分: 1
於 2005-08-09 10:12 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
執行結果如下:
1
2
3
4
D:\Documents and Settings\^_^\test1>java dbquery
200
300
400


那麼我們來回首一下:
如何來建立資料庫連線及查詢:
1.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); <載入JDBC/ODBC>
2.Connection myconn =DriverManager.getConnection("jdbc:odbc:kktest","kuser1","k1234"); <設定使用ODBC之data source>

3.SQLStatement sqlsmen = myconn.createStatement();
<可設定回傳值參數,例如傳回唯讀的資料>

4.rs = sqlstatement.executeQuery("select * from ktable1");
<SQL 語法寫在此>

5.rs.first(), rs.last(), rs.next().....
<記錄的移動方法>


reply to postreply to post
幹,怎又被辭職。
書唸的不高,沒辦法年薪200萬,因為進不去竹科。
人長的不帥,女朋友看不起我,嫌我沒出息,因為賺的比她少,為何大家隨便都年薪100萬,我怎樣都突破不了40?
作者 Re:連接ORACLE的方式 [Re:doffboll]
demijava2

Fight-F-U



發文: 74
積分: 1
於 2005-08-09 10:21 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
後記:

那個ktset資料庫是在別台,所以得先由oracle的net8設定好如何網路連線
例如tnsname.ora設定好可連線沒問題才可。
1
2
3
4
5
6
7
8
9
10
D:\Documents and Settings\^_^\test1>tnsping ktest
 
TNS Ping Utility for 32-bit Windows: Version 8.1.7.0.0 - Production on 09-8月 -2
005 10:12:25
 
(c) Copyright 1997 Oracle Corporation.  All rights reserved.
 
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=10.26.128.56)(PORT=1521))
OK (30 msec)
 


:D

所以來總結一下整個java使用JDBC連線資料庫的流程。

●oracle db client/server 設定好tnsname.ora,sqlnet.ora,listener.ora 並且可以使用sqlplus來遠端連線。 <確保基本沒問題>

●設定ODBC,及安裝JDBC driver ;前者只要是設定datasource後者是灌好.jar

●實作java程式。
1.import java.sql.*;
2.載入 Jdbc-Odbc bridge 類別及方法
3.使用drivermanager透過odbc 之data source建立連線
4.設定 sqlstatement 參數
5.設定 sql 語法。
6.處理 result值。

^___^


browser edited on 2005-08-09 10:31
reply to postreply to post
幹,怎又被辭職。
書唸的不高,沒辦法年薪200萬,因為進不去竹科。
人長的不帥,女朋友看不起我,嫌我沒出息,因為賺的比她少,為何大家隨便都年薪100萬,我怎樣都突破不了40?
作者 Re:連接ORACLE的方式 [Re:doffboll]
je





發文: 112
積分: 2
於 2005-09-07 02:22 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
包你連:
http://j2se.myweb.hinet.net/article/j2ee/001.htm


je edited on 2005-09-07 19:12
reply to postreply to post
臉書「資料庫之道」粉絲團:
http://www.facebook.com/DBtaoist
作者 Re:連接ORACLE的方式 [Re:doffboll]
caianheng123



發文: 0
積分: 0
於 2005-10-11 12:45 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
能够告诉下他的工作原理及各个详细步骤!
还能说明下为什么要加classes12.jar,这个在连数据库的时候的作用是什么
非常感谢,我是个菜鸟,刚刚上路


reply to postreply to post
作者 連資料庫的問題 [Re:demijava2]
ki84





發文: 11
積分: 0
於 2017-03-17 06:13 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
demijava2 wrote:
根據java cook的書,寫一支程式來測目前系統上有哪些JDBC提供java連結資料庫。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.sql.*;
import java.io.*;
 
public class loaddbdrive {
 
  /**
   *java.lang.class類別有個叫forName()的方法,可以用來載入指定的類別(用來確認該類別是否有灌入系統)
   */
  public static void main(String[] av) {
    // load jdbc-odbc bridge driver (default on JDK
    try{
      Class c = Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      System.out.println("Load "+c);
      
    }
    catch (ClassNotFoundException ex){
      System.err.println(ex);   
    }
    // load Connector/J  (mysql driver)
    try {
      Class m = Class.forName("com.mysql.jdbc.Driver");
      System.out.println("Load"+m);
          
    }
    catch (ClassNotFoundException ex){
      System.err.println(ex);   
    } 
    //load Oracle driver
    try {
      Class d = Class.forName("oracle.jdbc.driver.OracleDriver");
      System.out.println("load"+d);
      
      
    }
    catch (ClassNotFoundException ex){
      System.err.println(ex);
    }
 
  }
 
}


執行後的結果如下:
1
2
3
Load class sun.jdbc.odbc.JdbcOdbcDriver
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver



如上所示若無法連線db是什麼樣的問題要怎解決,我的主要是sun.jdbc.odbc.JdbcOdbcDriver連不上


reply to postreply to post
作者 Re:連資料庫的問題 [Re:ki84]
ynchang





發文: 151
積分: 0
於 2017-03-17 07:08 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
提供的程式中只有檢查可以用那些Class, 跟DB無關...

建議先去讀懂這篇:
https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html


reply to postreply to post
go to first page go to previous page  1   2  go to next page go to last page
» JWorld@TW »  JDBC/SQL討論區 » Oracle

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8