使用JTDS連接sqlserver數(shù)據(jù)庫

原文出自 https://blog.csdn.net/fjseryi/article/details/49796549

Java連接SQL Server 2000數(shù)據(jù)庫時,有兩種方法:
(1)通過Microsoft的JDBC驅(qū)動連接。此JDBC驅(qū)動共有三個文件,分別是mssqlserver.jar遂赠、msutil.jar和msbase.jar宁否。但是Microsoft官網(wǎng)上已經(jīng)找不到這些驅(qū)動,其提供的sqljdbc.jar和sqljdbc4.jar并不支持SQL Server 2000铸磅。

驅(qū)動程序名稱:com.microsoft.jdbc.sqlserver.SQLServerDriver(即下面的classforname)
數(shù)據(jù)庫連接URL:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname(即下面的url)
(2)通過jTDS驅(qū)動連接赡矢。下載地址:http://sourceforge.net/projects/jtds/files/jtds/

驅(qū)動程序名稱:net.sourceforge.jtds.jdbc.Driver(即下面的classforname)
數(shù)據(jù)庫連接URL:jdbc:jtds:sqlserver://localhost:1433/dbname(即下面的url)

采用第二種方法連接時,可能報錯:

java.lang.UnsupportedClassVersionError: net/sourceforge/jtds/jdbc/Driver : Unsupported major.minor version 51.0

JDK的版本號對應:
首先下載JTDS(http://sourceforge.net/projects/jtds/files/jtds/)阅仔,這里有JTDS的各種版本吹散,起初下的是jtds-1.3.1,但在使用中總出現(xiàn)

ClassNotFound:net.sourceforge.jtds.jdbc.Driver 錯誤,后來下載了1.2.7版本八酒,解決了這個問題

package com.wellsoft.xxbs.modules.TimeTask;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class ConnectSqlSever {
    private static Connection dbConn = null;
    public static String dbURL = "jdbc:jtds:sqlserver://localhost:1433/testconnect";//數(shù)據(jù)庫路徑
    public static String name = "sa";                                                            //數(shù)據(jù)庫賬號
    public static String password = "123456";//數(shù)據(jù)庫密碼
    public static String select = "select * from [student]";//簡單查詢語句

    public static List<Student> connectSqlSever() {
        List studentList = new ArrayList<Student>();
        try {
            //1.加載驅(qū)動
            //Class.forName方法的作用,就是初始化給定的類.而我們給定的MySQL的Driver類中,
            // 它在靜態(tài)代碼塊中通過JDBC的DriverManager注冊了一下驅(qū)動.我們也可以直接使用JDBC的驅(qū)動管理器注冊mysql驅(qū)動.
            // 從而代替使用Class.forName.
            Class.forName("net.sourceforge.jtds.jdbc.Driver");

            //2.連接
            dbConn = DriverManager.getConnection(dbURL, name, password);
            System.out.println("連接數(shù)據(jù)庫成功空民!");
            PreparedStatement statement = null;

            statement = dbConn.prepareStatement(select);

            ResultSet res = null;
            res = statement.executeQuery();

            while (res.next()) {
                int id = res.getInt("id");
                String sname = res.getString("name");
                int age = res.getInt("age");
                String sex = res.getString("sex");
                Date birthday = res.getDate("birthday");
                System.out.println("id:" + id + "姓名:" + sname + " 年齡:" + age + " 性別:" + sex + " 生日:" + birthday);
                Student student = new Student(id,sname,age,sex,birthday);
                studentList.add(student);
            }

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("連接數(shù)據(jù)庫失敗羞迷!");
        }
        return studentList;
    }
}

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
 
 
public class MainActivity extends Activity 
{
    
    private String UserName = "sa";
    private String Password = "sa";
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ConnectTask dt = new ConnectTask();
        dt.execute();
 
    }
    
    class ConnectTask extends AsyncTask<Integer, Integer, String>
    {
        Connection con = null;
        @Override
        protected void onPreExecute() {
            //第一個執(zhí)行方法
            super.onPreExecute();
        }
        
        @Override
        protected String doInBackground(Integer... params) {            
            //建立于數(shù)據(jù)庫的連接 
            try {
                Class.forName( "net.sourceforge.jtds.jdbc.Driver");
                con = DriverManager.getConnection( "jdbc:jtds:sqlserver://10.0.2.2:1433/AndroidSample", UserName, Password);    //10.0.2.2是使用模擬器是用的本機(pc)的IP界轩,androidSample是我的數(shù)據(jù)庫名稱
                testConnection(con);//測試數(shù)據(jù)庫連接
            } catch (ClassNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
                Log.e("Class.forName::ClassNotFoundException", e1.getMessage());
            }catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            }
            
            return "執(zhí)行完畢";
        }
 
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
        }
        
        public void testConnection(Connection con) throws java.sql.SQLException {             
            try {    
                String sql = "SELECT * FROM Seed.Person";//查詢表名為“Seed.Person”的所有內(nèi)容   
                Statement stmt = con.createStatement();//創(chuàng)建Statement   
                ResultSet rs = stmt.executeQuery(sql);//ResultSet類似Cursor   
                  
                while (rs.next()) {//<CODE>ResultSet</CODE>最初指向第一行   
                    Log.e("&&&&&", rs.getString("NameChs"));
                    Log.e("&&&&&", rs.getString("OperateUserName"));                      
                }    
                rs.close();  
                stmt.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage().toString());  
            } finally {  
                if (con != null)  
                    try {  
                        con.close();  
                    } catch (SQLException e) {  
                    }  
            }  
        }   
    }
 
}

主要遇到了兩個問題:

1、ClassNotFound錯誤:如果jtds庫都導入了衔瓮,還有這個問題浊猾,可能是jtds版本的問題。我最初用的jtds-1,3,1錯誤热鞍,后來用的jtds-1.2.7后解決了葫慎;

2、與數(shù)據(jù)庫的連接涉及網(wǎng)絡(luò)操作薇宠,不能直接寫在OnCreate函數(shù)中偷办,代碼中單獨定義了一個類,進行數(shù)據(jù)庫的操作澄港。

使用時會遇到JDTS版本和JDK版本不匹配問題:

J2SE 7 = 51 (0x33 hex),

J2SE 6.0 = 50 (0x32 hex),
J2SE 5.0 = 49 (0x31 hex),
JDK 1.4 = 48 (0x30 hex),
JDK 1.3 = 47 (0x2F hex),
JDK 1.2 = 46 (0x2E hex),
JDK 1.1 = 45 (0x2D hex).

一般JDK7對應JTDS的1.3.x版本

JDK6對應1.2.x版本

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爽篷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子慢睡,更是在濱河造成了極大的恐慌逐工,老刑警劉巖铡溪,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泪喊,居然都是意外死亡棕硫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門袒啼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哈扮,“玉大人,你說我怎么就攤上這事蚓再』猓” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵摘仅,是天一觀的道長靶庙。 經(jīng)常有香客問我,道長娃属,這世上最難降的妖魔是什么六荒? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮矾端,結(jié)果婚禮上掏击,老公的妹妹穿的比我還像新娘。我一直安慰自己秩铆,他們只是感情好砚亭,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著殴玛,像睡著了一般钠惩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上族阅,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天篓跛,我揣著相機與錄音,去河邊找鬼坦刀。 笑死愧沟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的鲤遥。 我是一名探鬼主播沐寺,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盖奈!你這毒婦竟也來了混坞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎究孕,沒想到半個月后啥酱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡厨诸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年镶殷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片微酬。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绘趋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颗管,到底是詐尸還是另有隱情陷遮,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布垦江,位于F島的核電站帽馋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疫粥。R本人自食惡果不足惜茬斧,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一腰懂、第九天 我趴在偏房一處隱蔽的房頂上張望梗逮。 院中可真熱鬧,春花似錦绣溜、人聲如沸慷彤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽底哗。三九已至,卻和暖如春锚沸,著一層夾襖步出監(jiān)牢的瞬間跋选,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工哗蜈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留前标,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓距潘,卻偏偏與公主長得像炼列,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子音比,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355