JAVA连接SQLServer基础,以及5分钟之内读+写20万条数据(40万条操作),遇到的问题

首先,最基本的连接方式:

	private String url = "jdbc:odbc:Driver={SQL Server};Server=DELL-PC;Database=MedicalData";
	private String user = "sa";
	private String password = "netlab";
	private Connection conn;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
conn = DriverManager.getConnection(url, user, password);
			PreparedStatement partnames=conn.prepareStatement(sql);
	        rs=partnames.executeQuery();
	    
Statement partnames=conn.createStatement();
	        partnames.executeUpdate(sql);

遇到问题:

[Microsoft][ODBC SQL Server Driver]连接占线导致另一个 hstmt

查了很多文章以后,感觉应该是由于短时间大量访问,导致没有释放资源,如rs,statement,conn等

这是查到了连接池 ,数据库连接池:查到了链接  http://bbs.csdn.net/topics/340245414      这篇帖子的四楼方法,如下:

在util包中新建两个文件,一个是DataSourceFactory.java,另一个是databaseresource.properties配置文件,还有几个jar包,commons-dbcp-1.2.1.jar,commons-pool-1.3.jar,msbase.jar,mssqlserver.jar,msutil.jar,这5个jar包自己去网上下载下来

DataSourceFactory.java的内容如下

package util;

import org.apache.commons.dbcp.*;
import java.sql.*;
import java.util.*;

public class DataSourceFactory {
	private static String PROPERTIES_FILE = "/util/databaseresource.properties";
	private static DataSourceFactory instance = null;
	private BasicDataSource ds1;

	private DataSourceFactory() {
		Properties prop = new Properties();
		try {
			prop.load(this.getClass().getResourceAsStream(PROPERTIES_FILE));
			ds1 = (BasicDataSource)BasicDataSourceFactory.createDataSource(prop);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static DataSourceFactory getInstance() {
		if(instance == null) {
			instance = new DataSourceFactory();
		}
		return instance;
	}

	public Connection getConnection() {
		Connection conn = null;
		try {
			conn = ds1.getConnection();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return conn;
	}
}

databaseresource.properties中的内容如下:(去除//之后的注释)

driverClassName=com.microsoft.jdbc.sqlserver.SQLServerDriver

url=jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=friend  //friend为数据库名

username=sa     //数据库连接用户名

password=null   //数据库连接密码

defaultAutoCommit=true  //是否自动提交事务

maxActive=10    //连接池最大连接数

弄好后在程序中用

Connection conn = DataSourceFactory.getInstance().getConnection();

就可以等到数据库连接了

于是有了我的代码:

如下:

package com.k.sqlsever;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import util.DataSourceFactory;

public class SQLSeverLink {

	private String url = "jdbc:odbc:Driver={SQL Server};Server=DELL-PC;Database=MedicalData";
	private String user = "sa";
	private String password = "netlab";
	private Connection conn;

	public void link()
	{
		try {

//			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
//		    conn = DriverManager.getConnection(url, user, password);
			conn = DataSourceFactory.getInstance().getConnection();

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

	public void closeLink()
	{
		if(conn!=null)
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}

	public ResultSet select(String sql)
	{
		ResultSet rs= null;

		try {
			PreparedStatement partnames=conn.prepareStatement(sql);
	        rs=partnames.executeQuery();

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

		return rs;
	}

	public void update(String sql)
	{
		try {
			Statement partnames=conn.createStatement();
	        partnames.executeUpdate(sql);
	        System.out.println("update success!");

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

  /**
    * @param args
    */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {

       Connection conn = DataSourceFactory.getInstance().getConnection();
        PreparedStatement    partnames=conn.prepareStatement("SELECT * FROM dbo.MS_CHK_ALL WHERE id=1");
        ResultSet rs=partnames.executeQuery();
        while(rs.next())
        {
                String  Data=rs.getString("chk_code");
                System.out.println(Data);
        }

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

    }
  }

}

这次又出现了新的问题,运行一小会以后,

[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.

我估计还是老问题,资源未释放

忍无可忍,笨方法: 每处理100条以后,断开连接,重连数据库。sleep 100ms 再继续进行

if(i%100==0)
		{
			serverLink.closeLink();
			serverLink.link();
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
时间: 2024-09-30 15:54:36

JAVA连接SQLServer基础,以及5分钟之内读+写20万条数据(40万条操作),遇到的问题的相关文章

java连接sqlserver的各个坑(菜鸟亲测)

作为一个菜鸟,刚开始用java连接sqlserver的时候,用的时间不短, 可以说解决了一个又出现一个,所以我觉得有必要把我的经验分享给大家. (因为我踩了大部分的坑) 第一个坑:加载驱动.java要连接数据库就需要驱动,我们去网上下载一个 sqljdbc.jar就行了.下载后该怎么做呢. 这个时候,我们在项目里面添加文件,然后把这个包粘贴进去,然后再右键这个包 添加构建路径,这样就可以了.这个时候你以为搞定了,可是后面还有很多坑. 第二坑:“ Failed to load the sqljdb

java 连接sqlserver数据库语句

import java.sql.*; /** * java 连接sqlserver数据库语句 * @author Administrator * */ public class Main {         public static void main(String [] args) throws SQLException {                                     String driverName="com.microsoft.sqlserver.jdbc.

Java 连接SQLServer 2012

SQLServer准备: 1.右击数据库打开属性 2.安全性--SQL身份和Windows验证 3.在数据登录名sa,选择属性 更改密码:比如123456 4.打开配置管理器:启用TCP/IP 和Names pipes协议 5.重启服务至此数据库配置结束! 接下来: 一. 配置ODBC数据源 配置ODBC: 控制面板-----管理工具-----数据源(ODBC) 系统DSN-----添加----SQL Server-----名称mssql,服务器:127.0.0.1----填下用户名密码测试,最

Java 连接 SqlServer工具类

1.下载 server2008R2驱动jar包 下载jar包 http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=21599 2.代码实现 1)实体: package entity; import java.io.Serializable; import java.util.Date; public class User implements Serializable{ private int id; private Stri

JAVA连接SQLSERVER代码片段

最近需要做一个验证“ANDROID终端”下载数据的效率问题,其中需要到向sqlserver2008数据库中添加测试数据 step1:定义相关数据库信息 static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; static final String URL = "jdbc:sqlserver://192.168.0.249\\sql2008;databaseName=LZrfid&

java连接SQLserver

1.pom.xml添加: <dependency>            <groupId>com.hynnet</groupId>            <artifactId>sqljdbc4-chs</artifactId>            <version>4.0.2206.100</version>        </dependency> 2.

java 连接sqlserver时,表名要注意

Class.forName(driverName); Sql_conn = DriverManager.getConnection(dbURL, userName, userPwd); Statement stmt = Sql_conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from test.dbo.employee"); while(rs.next()){ System.out.println(r

Delphi:ADOConnection连接SQLServer自动断网问题解决

=============================== 解决方法一:异常时关闭连接,WinXP,win7 32位大部分情况都是起作用的,不过在有些windows操作系统下(如家庭版)不起作用,不知为何? =============================== try //执行sql操作 except AdoConnection.close;//出现异常时关闭连接,在执行sql语句时会自动打开连接,从而实现断线重连 end; ============================

openTSP连接sqlServer数据库&amp;jpa调用存储过程

openTSP框架下的模块都是连接mysql数据库,近期青汽有连接sqlServer数据库的需求,在调研后配置了sqlServer数据库,使用jpa调用存储过程,中间也踩了不少坑,总结一下,避免大家再掉进去. 1.首先配置sqlServer的依赖 <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc4</artifactId> <version