使用 JDBC 連接資料庫(SQL Server)


使用 JDBC 連接資料庫相當簡單,首先根據自己的需要下載對應的 jar 檔,以 SQL Server 2000 為例,需要下載 sqljdbc4.jar ,下載之後 add 到專案中, 接著在程式碼中連接資料庫,一個簡單的範例如下

F_ConnToSQLServer.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import fsql.F_ConnUtil;

public class F_ConnToSQLServer{
    
    public static String COMM_SHOW_ALLTABLES = "select * from sysobjects where xtype = 'U';";//顯示資料庫中所有資料表與細節
    public static String COMM_SHOW_VERSION = "SELECT @@VERSION AS 'SQL Server Version'";//版本
    public static String COMM_SHOW_ALLDATABASER = "SELECT * FROM master.dbo.sysdatabases";//顯示所有資料庫
    public static String COMM_SHOW_CONFIGURES = "SELECT * FROM master.dbo.sysconfigures";//列出SQL Server Instance設定
    
    Connection conn;
    //com.microsoft.jdbc.sqlserver.SQLServerDriver (SQL Server 2000 Driver的寫法 )
    //com.microsoft.sqlserver.jdbc.SQLServerDriver (現在最新Driver 3.0的寫法)
    String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    String url;
    String ipNum;
    String portNum;
    String dbName;
    String userName;
    String passWord;
    
    /**
     * 
     * @param ipnum : ip
     * @param portnum : port
     * @param dbname : dbname
     * @param username 
     * @param password
     */
    public F_ConnToSQLServer(String ipnum,String portnum,
            String dbname,String username,String password){
       
        ipNum = ipnum;
        portNum = portnum;
        dbName = dbname;
        userName = username;
        passWord = password;
        
        
        try {

            Class.forName(driver);
            
            url= "jdbc:sqlserver://"+ipNum+";databaseName="+dbName+";integratedSecurity=false";
            
            try {
                if (userName == null && passWord == null) {
                    conn = DriverManager.getConnection(url);
                } else {
                    // url , 使用者 , 密碼
                    conn = DriverManager.getConnection(url, userName, passWord);
                }

              
                
            } catch (SQLException e) {
                e.printStackTrace();
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    public Connection getConn(){
        return conn;
    }
    
    
}

只要建立 F_ConnToSQLServer 物件,在建構子中傳入帳號和密碼(不需要就傳 null),就能建立和資料庫連線

使用範例

JdbcExam.java
package testdrivers;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import fsql3.F_ConnToSQLServer;

public class Jdbc_Exam {

    public static void main(String[] args) {

        F_ConnToSQLServer connpgsql = new F_ConnToSQLServer("192.168.17.128",
                "5432", "dbname", "user", "password");
        Connection conn = connpgsql.getConn();

        String comm = "select * from tablename";
        execComm(conn, comm);
    }

    public static void execComm(Connection conn, String comm) {

        // 執行指令
        Statement stmt;
        ResultSet rs;
        // 取得回傳結果的資料欄位總數
        ResultSetMetaData rsmd = null;

        try {

            stmt = conn.createStatement();

            if (stmt.execute(comm)) {

                System.out.println("" + comm);
                // true resultset
                rs = stmt.getResultSet();
                rsmd = rs.getMetaData();

                // rs.next是取得每一列
                while (rs.next()) {

                    // 取得每列中的每個欄位資料(rsmd.getColumnCount為每列的長度,也是欄位資料的總數)
                    for (int i = 1; i < rsmd.getColumnCount() + 1; i++) {

                        if (i != rsmd.getColumnCount()) {
                            System.out.print(rs.getString(i) + "  ");
                        } else {
                            System.out.print(rs.getString(i));
                        }

                    }
                    System.out.println();

                }

            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}



最後就能在主控台看到結果了