jiqinglxj

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            2 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          使用JDBC連接SQLserver的代碼如下:

           

           1/**
           2 * 
           3 */

           4package com.wekin.data;
           5
           6import java.util.*;
           7import java.io.*;
           8
           9/**
          10 * @author Administrator
          11 *  
          12 */

          13public class SQLConfig {
          14    private String hostIP = "";
          15    private String dataBaseName = "";
          16    private String user = "";
          17    private String password = "";
          18    
          19    public SQLConfig(){
          20        //config.properties放在項(xiàng)目的根目錄下.
          21        Properties prop = this.loadProperty("./config.properties");
          22        
          23        if(!prop.equals(null)){
          24            this.setHostIP(prop.getProperty("hostIP"));
          25            this.setDataBaseName(prop.getProperty("dataBaseName"));
          26            this.setUser(prop.getProperty("user"));
          27            this.setPassword(prop.getProperty("password"));
          28        }

          29    }

          30    
          31    private Properties loadProperty(String fileName){
          32        try {
          33            Properties prop=new Properties();
          34            FileInputStream in=new FileInputStream(fileName);
          35            prop.load(in);
          36            in.close();
          37            return prop;
          38        }
           catch (FileNotFoundException e) {
          39            // TODO 自動(dòng)生成 catch 塊
          40            e.printStackTrace();
          41        }
           catch (IOException e) {
          42            // TODO 自動(dòng)生成 catch 塊
          43            e.printStackTrace();
          44        }
                      
          45        
          46        return null;
          47    }

          48    
          49    public String getDataBaseName() {
          50        return dataBaseName;
          51    }

          52    public void setDataBaseName(String dataBaseName) {
          53        this.dataBaseName = dataBaseName;
          54    }

          55    public String getHostIP() {
          56        return hostIP;
          57    }

          58    public void setHostIP(String hostIP) {
          59        this.hostIP = hostIP;
          60    }

          61    public String getPassword() {
          62        return password;
          63    }

          64    public void setPassword(String password) {
          65        this.password = password;
          66    }

          67    public String getUser() {
          68        return user;
          69    }

          70    public void setUser(String user) {
          71        this.user = user;
          72    }

          73}

          74


           

          SQLUtil.java

            1/*
            2 * Created on 2007-04-20 9:19
            3 * 
            4 */

            5package com.wekin; 
            6import java.sql.*;
            7import java.net.*;
            8import java.io.*;
            9import java.util.*;
           10import com.wekin.data.SQLConfig;
           11import com.microsoft.*
           12/**
           13 * @author lixj
           14 *  Created on 2007-04-20 9:19
           15 */

           16public class SQLUtil {
           17    private Connection conn = null;
           18    private ResultSet rs = null;
           19    private Statement stmt = null;
           20
           21    private SQLConfig sqlConfig;
           22
           23    public SQLUtil() {
           24         sqlConfig = new SQLConfig();
           25    }
           
           26    
           27    /**
           28     * 連接MySQL數(shù)據(jù)庫(kù)
           29     * @param hostIP String
           30     * @param dataBaseName String
           31     * @param user String
           32     * @param password String
           33     * 
           34     */
              
           35    public void connectMySQL() {
           36        try {
           37            Class.forName("org.gjt.mm.mysql.Driver").newInstance();
           38            
           39            //sqlConfig.getHostIP()為數(shù)據(jù)庫(kù)服務(wù)器的IP
           40            //sqlConfig.getDataBaseName()為數(shù)據(jù)庫(kù)名
           41            //sqlConfig.getUser()為用戶(hù)名
           42            //sqlConfig.getPassword()為密碼
           43            String url ="jdbc:mysql://" + sqlConfig.getHostIP() + "/" + 
           44                 sqlConfig.getDataBaseName() + "?user=" +
           45                 sqlConfig.getUser() + "&password=" + sqlConfig.getPassword() + 
           46                 "&useUnicode=true&characterEncoding=8859_1";
           47
           48            conn= DriverManager.getConnection(url);
           49            System.out.println("連接成功!");
           50        }
           catch (InstantiationException e) {
           51            // TODO 自動(dòng)生成 catch 塊
           52            e.printStackTrace();
           53        }
           catch (IllegalAccessException e) {
           54            // TODO 自動(dòng)生成 catch 塊
           55            e.printStackTrace();
           56        }
           catch (ClassNotFoundException e) {
           57            // TODO 自動(dòng)生成 catch 塊
           58            e.printStackTrace();
           59        }
           catch (SQLException e) {
           60            // TODO 自動(dòng)生成 catch 塊
           61            e.printStackTrace();
           62        }

           63    }

           64
           65
           66    /**
           67     * 連接SQLServer數(shù)據(jù)庫(kù),作為擴(kuò)展
           68     * @param hostIP String
           69     * @param dataBaseName String
           70     * @param user String
           71     * @param password String
           72     * 
           73     */
              
           74    public void connectSQLServer(){
           75        
           76        try {
           77            //JDBC連接 
           78            // 注意大小寫(xiě)
           79            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
           80        //    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
           81            
           82            //:5374為連接的端口號(hào),通常為1433.這里是5374.
           83            String url = "jdbc:microsoft:sqlserver://"+ sqlConfig.getHostIP() +":5374;" +
           84                         "DatabaseName=" + sqlConfig.getDataBaseName();
           85            
           86        
           87            System.out.println(sqlConfig.getHostIP());
           88            System.out.println(sqlConfig.getUser());
           89            System.out.println(sqlConfig.getPassword());
           90            System.out.println(sqlConfig.getDataBaseName());
           91            System.out.print(url);
           92            conn = DriverManager.getConnection(url, sqlConfig.getUser(), sqlConfig.getPassword());
           93
           94            /*Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
           95            String url = "jdbc:odbc:van";
           96            conn = DriverManager.getConnection(url);*/

           97            
           98        }
           catch (ClassNotFoundException e) {
           99            // TODO 自動(dòng)生成 catch 塊
          100            e.printStackTrace();
          101        }
           catch (SQLException e) {
          102            // TODO 自動(dòng)生成 catch 塊
          103            e.printStackTrace();
          104        }

          105    }

          106 
          107    /**
          108     * 連接SQLServer數(shù)據(jù)庫(kù),使用ODBC
          109     *
          110     */

          111    public void connectSQLServerODBC()
          112        
          113    }
           
          114    /**
          115     * 進(jìn)行數(shù)據(jù)庫(kù)的查詢(xún)操作
          116     * @param sql String  sql為查詢(xún)的SQL語(yǔ)句
          117     * 
          118     */

          119    public ResultSet sqlQuery(String sql){
          120        try {
          121            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
          122                                        ResultSet.CONCUR_UPDATABLE);
          123            return stmt.executeQuery(sql);
          124        }
           catch (SQLException e) {
          125            // TODO 自動(dòng)生成 catch 塊
          126            e.printStackTrace();
          127            return null;
          128        }

          129         
          130    }

          131
          132
          133    /**
          134     * 進(jìn)行數(shù)據(jù)庫(kù)的更新操作,只能執(zhí)行一條更新指令
          135     * @param sql String  sql為更新的SQL語(yǔ)句
          136     */

          137    public boolean sqlUpdate(String sql){
          138        try {
          139            //手動(dòng)提交
          140            conn.setAutoCommit(false);
          141
          142            stmt = conn.createStatement();
          143            stmt.executeUpdate(sql);
          144
          145            //沒(méi)有異常,表明更新成功
          146            conn.commit();
          147            System.out.println("更新成功!");
          148            return true;
          149        }
           catch (Exception ex) {
          150            System.out.println(ex.getStackTrace());
          151            System.out.println("數(shù)據(jù)更新出現(xiàn)異常,自動(dòng)恢復(fù)為更新前的數(shù)據(jù)");
          152            
          153            try {
          154                //更新出現(xiàn)異常,數(shù)據(jù)回滾
          155                conn.rollback();
          156                System.out.println("自動(dòng)恢復(fù)更新前的數(shù)據(jù)成功");
          157            }
           catch (SQLException e) {
          158                // TODO 自動(dòng)生成 catch 塊
          159                e.printStackTrace();
          160                System.out.println("自動(dòng)恢復(fù)失敗,數(shù)據(jù)可能存在不一致,請(qǐng)手動(dòng)恢復(fù)");
          161            }

          162            return false;
          163        }

          164
          165    }

          166
          167
          168    
          169    /**
          170     * 進(jìn)行數(shù)據(jù)庫(kù)的更新操作,可執(zhí)行多條更新指令
          171     * @param sql String[]  sql為更新的SQL語(yǔ)句集合
          172     */

          173    public boolean sqlBatchUpdate(String[] sql){
          174        try {
          175            //手動(dòng)提交
          176            conn.setAutoCommit(false);            
          177            stmt = conn.createStatement();
          178            
          179            for(int i = 0; i< sql.length; i++)
          180                 stmt.addBatch(sql[i]);
          181            //執(zhí)行更新指令
          182            stmt.executeBatch();
          183            conn.commit();
          184            
          185            return true;
          186        }
           catch (SQLException ex) {
          187            System.out.println(ex.getStackTrace());
          188            System.out.println("數(shù)據(jù)更新出現(xiàn)異常,自動(dòng)恢復(fù)為更新前的數(shù)據(jù)");
          189            
          190            try {
          191                //更新出現(xiàn)異常,數(shù)據(jù)回滾
          192                conn.rollback();
          193                System.out.println("自動(dòng)恢復(fù)更新前的數(shù)據(jù)成功");
          194            }
           catch (SQLException e) {
          195                // TODO 自動(dòng)生成 catch 塊
          196                e.printStackTrace();
          197                System.out.println("自動(dòng)恢復(fù)失敗,數(shù)據(jù)可能存在不一致,請(qǐng)手動(dòng)恢復(fù)");
          198            }

          199            return false;
          200        }

          201
          202    }
           
          203    
          204    /**
          205     * 確認(rèn)查詢(xún)是否有結(jié)果
          206     * @param sql String
          207     * @return boolean 查詢(xún)有結(jié)果,則返回true,否則返回false
          208     */

          209    public boolean dataExist(String sql) {
          210        try {
          211            sqlQuery(sql);
          212
          213            if (rs.first() == true{
          214                return true;
          215            }
           else {
          216                return false;
          217            }

          218        }
           catch (Exception ex) {
          219            System.out.println(ex.getStackTrace());
          220            return false;
          221        }

          222    }
             
          223
          224
          225    
          226    
          227    /**
          228     * 獲取元數(shù)據(jù)信息(查詢(xún)結(jié)果的字段屬性)
          229     * @return String 返回對(duì)元數(shù)據(jù)的描述,若不存在或出現(xiàn)異常返回""
          230     */
              
          231    public String getMetaDataInfo(){
          232        try {
          233            if(rs != null){
          234                ResultSetMetaData rsmd = rs.getMetaData();
          235                String str =  "選擇的數(shù)據(jù)共有" + rsmd.getColumnCount() + "個(gè)字段\n";
          236                for (int i = 1; i <= rsmd.getColumnCount(); i++){
          237                    str += "" + i + "個(gè)字段:" + rsmd.getColumnName(i) + "  " +
          238                           rsmd.getColumnTypeName(i) + "" + 
          239                           rsmd.getColumnDisplaySize(i) + " )";
          240                }

          241
          242                return str;
          243            }

          244        }
           catch (SQLException e) {
          245            // TODO 自動(dòng)生成 catch 塊
          246            e.printStackTrace();
          247        }

          248
          249        return "";
          250    }

          251
          252
          253    /**
          254     * 獲取數(shù)據(jù)庫(kù)所有表的信息
          255     * @return String 返回對(duì)數(shù)據(jù)庫(kù)元數(shù)據(jù)的描述,若不存在或出現(xiàn)異常返回""
          256     */
           
          257    public String getDataBaseInfo(){
          258       try {
          259        if(conn != null){
          260                DatabaseMetaData dbmd = conn.getMetaData();
          261                ResultSet mrs = dbmd.getTables(nullnullnull,
          262                     new String[] "TABLE" });
          263                ResultSetMetaData rsmd = mrs.getMetaData();
          264                
          265                String str =  "數(shù)據(jù)庫(kù)共有" + rsmd.getColumnCount() + "個(gè)TABLE屬性字段";
          266                for (int i = 1; i <= rsmd.getColumnCount(); i++){
          267                    str += "\n第" + i + "個(gè)屬性:" + rsmd.getColumnName(i);
          268                }

          269                
          270                return str;
          271           }

          272    }
           catch (SQLException e) {
          273        // TODO 自動(dòng)生成 catch 塊
          274        e.printStackTrace();
          275    }

          276    
          277       return "";
          278    }
            
          279    /**
          280     * 獲取某一字段的所有數(shù)據(jù)信息(該字段對(duì)應(yīng)的每一行信息)
          281     * i為RecordSet里面的序號(hào)
          282     * @param i int
          283     * @return List 
          284     */

          285    public List getRecordInfo(int i){   
          286       
          287        try {
          288        if(rs != null){
          289                List list = new ArrayList();
          290                Object object = new Object();
          291                
          292                while (rs.next()){
          293                    object = rs.getObject(i);
          294                    list.add(object);
          295                }

          296                
          297                return list;
          298           }

          299    }
           catch (SQLException e) {
          300        // TODO 自動(dòng)生成 catch 塊
          301        e.printStackTrace();
          302    }

          303       //若出現(xiàn)異常或者recordSet為空,返回null
          304       return null;
          305    }

          306    
          307    
          308//    public ResultSet getResultSet(){
          309//        return rs;
          310//    }
          311//    public Connection getConn(){
          312//        return conn;
          313//    }
          314
          315
          316    /**
          317     * 斷開(kāi)數(shù)據(jù)庫(kù)
          318     * 
          319     */

          320    public void disConnect(){
          321        try {
          322            if (rs != null)
          323                rs.close();
          324            if (stmt != null)
          325                stmt.close();
          326            if (conn != null)
          327                conn.close();
          328        }
           catch (SQLException e) {
          329            // TODO 自動(dòng)生成 catch 塊
          330            e.printStackTrace();
          331        }

          332    }

          333    
          334    
          335    
          336    /**
          337     * @param args
          338     */

          339    public static void main(String[] args) {
          340        // TODO 自動(dòng)生成方法存根
          341        SQLUtil sqlUtil = new SQLUtil();
          342       // sqlUtil.connectMySQL();
          343        sqlUtil.connectSQLServer();
          344      //  System.out.println(sqlUtil.getDataBaseInfo());
          345        
          346      //  System.out.println(sqlUtil.getMetaDataInfo());
          347        
          348       try{
          349        ResultSet rs = sqlUtil.sqlQuery("SELECT * FROM FoodItem ");
          350        String n_str =null;
          351       while(rs.next()){
          352             n_str = rs.getString(1).toString().trim();
          353             System.out.println(n_str);
          354           
          355       }

          356       }

          357       catch(SQLException sqle){
          358              
          359       }
           
          360        sqlUtil.disConnect();
          361    }

          362
          363}

          364


          在具體連接使用時(shí)可以出現(xiàn)以下問(wèn)題:
          1.  

          java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLserverDriver
              at java.net.URLClassLoader$
          1.run(Unknown Source)
              at java.security.AccessController.doPrivileged(Native Method)

          解決方案:  1) 注意 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")在大小寫(xiě)
                             2) jdbc的驅(qū)動(dòng)是否安裝, 三個(gè)jar包是否加個(gè)項(xiàng)目的libraries.
                             3意思就是說(shuō)找不到驅(qū)動(dòng)
          2.

          1jdbc:microsoft:sqlserver://localhost:534;DatabaseName=sample_daojava.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
          2    at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
          解決方案:1)連接里出錯(cuò). 看sqlserver里的端口號(hào)是不是一致.

           

           

            
           

           

           


           


           


           

           

          posted on 2007-04-20 09:45 lixiaoji 閱讀(597) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 理塘县| 桃江县| 西峡县| 清丰县| 昆明市| 西昌市| 吉林省| 荆州市| 墨脱县| 岳普湖县| 平果县| 康马县| 武陟县| 蒙山县| 吉木萨尔县| 阜城县| 义马市| 旌德县| 松阳县| 郯城县| 叶城县| 鸡泽县| 尚志市| 九台市| 临沧市| 洞口县| 北安市| 乐都县| 聊城市| 馆陶县| 博罗县| 达拉特旗| 盱眙县| 三原县| 定州市| 鲁山县| 民权县| 湾仔区| 新疆| 余庆县| 金秀|