使用JTDS连接sqlserver数据库

Java连接Sql Server 2000数据库时,有两种方法

(1)通过Microsoft的JDBC驱动连接。此JDBC驱动共有三个文件,分别是mssqlserver.jar、msutil.jar和msbase.jar。但是Microsoft官网上已经找不到这些驱动,其提供的sqljdbc.jar和sqljdbc4.jar并不支持sql Server 2000。

驱动程序名称com.microsoft.jdbc.sqlserver.sqlServerDriver(即下面的classforname
数据库连接URL:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbnameurl

(2)通过jtds驱动连接。下载地址:http://sourceforge.net/projects/jtds/files/jtds/

net.sourceforge.jtds.jdbc.Driverjdbc:jtds:sqlserver://localhost:1433/dbname采用第二种方法连接时,可能报错:

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

JDK的版本号对应:


首先下载jtdshttp://sourceforge.net/projects/jtds/files/jtds/),这里有jtds的各种版本,起初下的是jtds-1.3.1,但在使用中总出现

ClassNotFound:net.sourceforge.jtds.jdbc.Driver 错误,后来下载了1.2.7版本,解决了这个问题

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() {
    		//第一个执行方法
			super.onPreExecute();
		}
    	
		@Override
		protected String doInBackground(Integer... params) {			
			//建立于数据库的连接	
			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是我的数据库名称
				testConnection(con);//测试数据库连接
			} 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 "执行完毕";
		}

		@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”的所有内容   
	            Statement stmt = con.createStatement();//创建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、与数据库的连接涉及网络操作,不能直接写在OnCreate函数中,代码中单独定义了一个类,进行数据库的操作。

使用时会遇到JDTS版本和JDK版本不匹配问题:

 

J2SE 7 = 51 (0x33 hex),

J2SE 6.0 = 50 (0x32 hex),
J2SE 5.0 = 49 (0x31 hex),51); font-family:Arial; line-height:26px"> JDK 1.4 = 48 (0x30 hex),51); font-family:Arial; line-height:26px"> JDK 1.3 = 47 (0x2F hex),51); font-family:Arial; line-height:26px"> JDK 1.2 = 46 (0x2E hex),51); font-family:Arial; line-height:26px"> JDK 1.1 = 45 (0x2D hex).

一般JDK7对应jtds的1.3.x版本

JDK6对应1.2.x版本

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...