zoukankan      html  css  js  c++  java
  • Java使用JDBC连接SQL Server数据库

    Java连接SQL Server数据库一般有两种方式:一是通过JDBC-ODBC桥接的方式,另外一种是通过JDBC连接数据库。

    但是从JDK1.8开始,Oracle公司不再支持使用JDBC-ODBC桥连接SQL Server,如果要使用JDBC-ODBC桥,那么要使用JDK1.7或者更低版本。


    本文只介绍通过JDBC的方式连接SQL Server数据库,使用的是SQL Server2005。


    首先是下载和导入sqljdbc4包,到微软官网下载并导入sqljdbc4即可。

    https://www.microsoft.com/zh-cn/download/details.aspx?id=21599


    有时候还需要配置外围应用配置:

    Microsoft SQL Server 2005->配置工具->SQL Server外围应用配置器->服务和连接的外围应用配置器->

    选SQLEXPRESS->Database Engine->远程连接->本地连接和远程连接->同时使用TCP/IP和named pipes;


    然后就可以连接到数据库了,注意:

    写连接代码时需要注意2000和2005的不同:

    连接到SQL Server20000,代码如下

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
    URL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tempdb"; 
    连接到SQL Server2005,代码如下

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
    URL = "jdbc:sqlserver://localhost:1433;DatabaseName=tempdb"; 

    下面是具体代码:

    /*
     * 演示使用jdbc的方式操作SQL server中的Scott数据库
     */
    package com.test2;
    
    import java.sql.*;
    
    public class Test {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Connection ct = null;
    		Statement sm = null;
    
    		try{
    			//1.加载驱动(作用是把需要的驱动程序加入内存)
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    			
    			//2.得到连接(指定连接到哪个数据源,用户名,密码)
    			//如果配置数据源时选择的是Windows nt验证,则不需要用户名和密码
    			ct = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=scott","sa","123456");
    			
    			//3.创建Statement或PreparedStatement[区别]
    			//Statement的用处是:主要用于发送SQL语句到数据库
    			sm = ct.createStatement();
    			
    			//4.执行(crud,创建数据库,备份数据库,删除数据...)
    			
    			//演示添加一条数据到dept表
    			//executeUpdate可以执行cud操作(添加,删除,修改)
    			int i = sm.executeUpdate("insert into dept values('60','Study','Chongqing')");
    			
    			if(1 == i){
    				System.out.println("添加OK");
    			}else{
    				System.out.println("添加error");
    			}
    			
    		}catch(Exception e){
    			e.printStackTrace();
    			
    		}finally{
    			//关闭资源!!!
    			//关闭顺序是,谁后创建谁先关闭
    			
    			try {
    				if(null != sm){
    					sm.close();
    				}
    				if(null != ct){
    					ct.close();
    				}
    			} catch (SQLException e) {
    				// TODO: handle exception
    				e.printStackTrace();
    			}
    		}
    	}
    
    }
    

    执行成功后可以看到dept表中多了一行:


    注意:上面程序使用的是Statement发送SQL语句到数据库,Statement用的不多,一般使用的都是PreparedStatement,注意两者的区别:

    1. 直接使用Statement,驱动程序一般不会对SQL语句做处理而直接交给数据库;使用PreparedStatement驱动程序会有预编译的过程,并且会对语句作字符集的转换,很大程度上提高了效率。
    2. PreparedStatement还能有效的防止危险字符的注入
    下面就用PreparedStatement对数据库进行操作:

    package com.test2;
    
    import java.sql.*;
    
    public class Test2 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Connection ct = null;
    		PreparedStatement ps = null;
    		ResultSet rs = null;
    
    		try{
    			//1.加载驱动(作用是把需要的驱动程序加入内存)
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    			
    			//2.得到连接(指定连接到哪个数据源,用户名,密码)
    			//如果配置数据源时选择的是Windows nt验证,则不需要用户名和密码,1433是SQL Server默认的端口
    			ct = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=scott","sa","123456");
    			
    			//3.创建PreparedStatement
    			ps = ct.prepareStatement("select * from dept");
    			//4.执行查询,如果是增加,删除,修改用executeUpdate(),如果是查询用executeQuery()
    			rs = ps.executeQuery();
    
    			//re指向的是第一行数据的前一行,不能直接输出rs指向的数据,要用next让他指向下一行(即实际的第一行数据)
    			while(rs.next())
    			{
    				//getInt(1)是获取当前行的第一列数据,注意获取类型要与数据库中表的类型相同
    				//也可以直接通过表的段名的方式获取数据,如getInt("deptno");
    				System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3));
    			}
    			
    		}catch(Exception e){
    			e.printStackTrace();
    			
    		}finally{
    			//关闭资源!!!
    			//关闭顺序是,谁后创建谁先关闭
    			
    			try {
    				if(null != rs){
    					rs.close();
    				}
    				if(null != ps){
    					ps.close();
    				}
    				if(null != ct){
    					ct.close();
    				}
    			} catch (SQLException e) {
    				// TODO: handle exception
    				e.printStackTrace();
    			}
    		}
    	}
    
    }
    

    运行结果为:



    如果是有条件的查询,则

    //创建PreparedStatement
    ps = ct.prepareStatement("select * from dept where deptno=? and loc=?");
    //给?赋值
    ps.setInt(1,10);
    ps.setString(2,"NEW YORK");
    //执行查询
    rs = ps.executeQuery();





  • 相关阅读:
    Document
    Document
    Document
    2.原型和原型链的关系以及查找顺序
    1.面向对象 及 相关知识点
    时间对象 <-> 定时器 <-> 电子时钟 <-> 倒计时效果
    定时器
    let var const 的区别
    ES6 中块的概念
    js中的闭包
  • 原文地址:https://www.cnblogs.com/yzy-blogs/p/6597318.html
Copyright © 2011-2022 走看看