這邊記錄一下有關於JAVA存取資料庫的東西 雖然我也不知道我目前觀念是不是對的
但是大概就是這樣 頂多一些小地方需要補充吧
在java裡面 有兩種存取資料庫的方式 JDBC跟ODBC (Open Database Connectivity)
jdbc是java寫的odbc是m$寫的 想當然而JDBC比較好用
這邊先列出一下php連mysql的方式
1 2 3 4 | $link = mysql_connect( "localhost" , "root" , "0000" ) mysql_select_db( "db01" ); // 選資資料庫 $sql = "SELECT * FROM $menuname" ; $result = mysql_query( $sql ); |
而java概念其實差不多,只是多了一個要先載入驅動程式
1 2 3 4 5 | Class.forName( "com.microsoft.sqlserver.jdbc.SQLServerDriver" ); String connUrl = "jdbc:sqlserver://localhost:1433;databaseName=db03" ; Connection conn = DriverManager.getConnection(connUrl, "sa" , "passw0rd" ); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT empname, salary FROM employee" ); |
這樣其實就完成了一個連接sql的方式 接下來再丟個while去讀他就好
而1.第一行載入驅動的方式有三種
1.Clss Loader方式
1 | Class.forName( "com.microsoft.sqlserver.jdbc.SQLServerDriver" ); |
2.register方式
1 | DriverManager.registerDriver( new com.microsoft.sqlserver.jdbc.SQLServerDriver()); |
3.System Property
1 | System.setProperty( "jdbc.drivers" , "com.microsoft.sqlserver.jdbc.SQLServerDriver |
選一個喜歡的就好 沒啥差別的樣子
2.其實沒啥好講的 就是localhost:port 資料庫名稱..
4.connection介面
connection介面其實有三種連接方式
1.conn.createStatement(); 一般用法
2.conn.prepareStatement(); 可以預先編譯sql指令 效能較快
常用於須變數傳遞且重複執行的sql
3.conn.prepareCall(); 預存程序,就是其實好像要把要查的sql表早就在創
一個table以物件方式存好在資料庫了 所以最快!
5.執行sql指令
執行有三種作法executeQuery() 用於查詢而已 select
executeUpdate() 用於insert update delete
execute() 不知道要幹麻時用 通吃 但難用 也少用
——————————————————————————
以上查詢完了
接下來要show出來啦!
1 2 3 | while (rs.next()) { System.out.println( "name = " + rs.getString( "empname" )); System.out.println( "salary = " + rs.getDouble( "salary" )); } |
我們可以用next來移動指標
所以其實還有next()previous()first()last()before()beforeFirst()afterLast()
absolute(int row) trlative(int row)ifFirst()isLast()isBeforeFirst()
isAfterLast()wasNull()等用法
gettype()
其實取值得系列就都是gettype 例如上面的getString getDouble 還有getString
getObject等 後面可以塞一堆getxxxx的 看你是啥型態就get啥
而java的insert update有一個很好玩的地方就是 ? 他可以下一堆問號在sql裡
1 2 3 4 5 6 | String ins_stmt = "INSERT INTO employee VALUES (?, ?, ?)" ; PreparedStatement pstmt = conn.prepareStatement(ins_stmt); pstmt.setInt( 1 , 1009 ); pstmt.setString( 2 , "Jean Tsao" ); pstmt.setString( 3 , "2008/10/10" ); int num = pstmt.executeUpdate();e(); |
先下一堆的?在裡面 之後再來補充 就照順序填入這樣
基礎的觀念就這些