JDBC连接SQL Server数据库实现增删改查的全过程

目录
  • 前言
  • JDBC访问数据库的方式
    • 一、连接前准备
      • 1. 环境配置
      • 2. 导入JDBC Driver包
    • 二、连接SQL Server
    • 三、实现增删改查
      • 1. 查询数据
      • 2. 添加数据
      • 3. 修改数据
      • 4. 删除数据
      • 5. 拓展
  • 总结

前言

JDBC的全称是Java数据库连接(Java DataBase Connectivity) ,应用程序通过JDBC连接到数据库,使用SQL语句对数据库中的表进行查询、增加、修改、删除等操作。此文章提供JDBC连接SQL Server的所有步骤,帮助大家实现Java对数据库的增删改查!

JDBC访问数据库的方式

一、连接前准备

1. 环境配置

我们右键点击“开始”菜单打开“计算机管理”,接下来以此打卡树形菜单,启用所有协议。

下一步,打开控制面版—>程序—>程序与功能—>启用或关闭Windows功能 —>勾选 Telnet客户端

接下来,重启计算机,在此之前请务必点击“收藏”或“关注”,以免找不到下一步教程。

重启后,按Win+R,输入cmd后按回车,输入命令:

telnet localhost 1433

进入只有光标闪烁的空白页面即通信成功。

2. 导入JDBC Driver包

下面讲解的方法都是基于 IntelliJ IDEA 软件,如果是 Eclipse 会有细微差别。

首先,在连接JDBC之前,需要下载MS JDBC Driver包,下载地址:Download Microsoft SQL Server JDBC 驱动程序 6.0 from Official Microsoft Download Center

下载完后解压缩并打开,我们可以看到有 jre7和jre8两个Java环境下使用的JDBC包,分别对应两个不同的jar包。需要根据自己的安装的Java版本进行选择,jre8即最新版本,如果出现SSL连接异常需要降低JDK版本。

然后我们进入IDEA,点击File—>Priject Structure—>Libraries—> + —>Java —>Select Library Files,选择sqljdbc.jar

如果能在首页看到External Libraries下面有sqljdbc42即表示导入成功。

二、连接SQL Server

JDBC的实现步骤

通过上图我们了解到,想要实现JDBC首先就需要加载并注册数据库驱动。第一步,加载并注册驱动可以通过java.lang.Class类的静态方法forName实现。

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

第二步,通过DriverManager类的getConnection方法实现数据库连接。

String databaseName = "数据库名";
String username = "用户名";
String password = "密码";
String dbURL = "jdbc:sqlserver://localhost:1433;databaseName=" + databaseName;
Connection conn = DriverManager.getConnection(dbURL, username, password);

第三步,try…catch抛出异常。

        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver";);
            String dbURL = "jdbc:sqlserver://localhost:1433;databaseName=" + databaseName;
            Connection conn = DriverManager.getConnection(dbURL, username, password);
            System.out.println("Successful Connection !");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Connection failed !");
        }

三、实现增删改查

实现增删改查之前,为了阅读方便,我们需要新建一个容纳这些功能的类,并且创建两个类变量,方便在各个方法中调用。这里我们将类命名为ConnectionDb,创建Connection对象conn。

public class ConnectDb {
    public Connection conn;
}

接下来创建四个方法:查询、增加、修改、删除。

public class ConnectDb {
    private Connection conn;
    public void SelectAll(){}//查询表
    public void AddValue(){}//添加数据
    public void DeleteValue(){}//修改数据
    public void ModifyValue(){}//删除数据
}

下面就是实现方法的代码:

1. 查询数据

public void SelectAll(String tableName,String where) {
        ResultSetMetaData rsmd = null;
        try {//try catch判断是否有异常
            Statement sqlStatement = conn.createStatement();//创建sql语句
            String sql = "select * from " + tableName+" "+where;
            ResultSet rs = sqlStatement.executeQuery(sql);//执行sql语句
            //下面根据该table输出属性组和所有元组
            rsmd = rs.getMetaData();//获取属性名
            String []arr = new String[0];
            if(rsmd != null) {
                int count = rsmd.getColumnCount();//统计属性个数
                arr = new String[count];
                for (int i = 1; i <= count; i++) {
                    arr[i-1] = rsmd.getColumnName(i);//把属性名输入arr
                    System.out.print(rsmd.getColumnName(i)+"  ");//输出属性名
                }
            }
            System.out.println();//换一行,保证格式正确
            while (rs.next()) {
                //判断是否存在下一行,如果存在,就使用foreach循环输出元组
                for (String s : arr) {
                    System.out.print(rs.getString(s) + "  ");
                }
                System.out.println();//控制格式
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2. 添加数据

public void AddValue(String tableName){
        ResultSetMetaData rsmd = null;
        Scanner in = new Scanner(System.in);
        StringBuilder s1 = new StringBuilder();//创建字符串对象

        try {
            Statement sqlStatement = conn.createStatement();//创建语句对象
            String sql = "select * from " + tableName;
            ResultSet rs = sqlStatement.executeQuery(sql);//执行sql语句
            //下面根据该table输出属性组
            rsmd = rs.getMetaData();//获取属性名
            System.out.print("Input values according to :");
            if (rsmd != null) {
                int count = rsmd.getColumnCount();//统计属性个数
                for (int i = 1; i <= count; i++) {
                    if(i<count){
                        //输出属性名
                        System.out.print(rsmd.getColumnName(i) + "["+rsmd.getColumnTypeName(i)+"("+rsmd.getColumnDisplaySize(i)+")],");
                    }else System.out.print(rsmd.getColumnName(i) + "["+rsmd.getColumnTypeName(i)+"("+rsmd.getColumnDisplaySize(i)+")]");
                }
            }
            System.out.println();
            //输入需要添加的值用英文逗号分隔
            String values =in.next();
            String[] arr = values.split(",");
            for(int i = 0; i<arr.length; i++){
                //把每个分量按SQL格式依次输入到对象s1中
                if(i<arr.length-1)
                {
                    s1.append("'").append(arr[i]).append("',");
                }else s1.append("'").append(arr[i]).append("'");
            }
            String insertSql = "insert into " + tableName + " values("+s1+")";//SQL语句
            sqlStatement.executeUpdate(insertSql);
            System.out.println("Execute Successful !");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Execute failed !");
        }
    }

3. 修改数据

public void ModifyValue(String tableName){
        ResultSetMetaData rsmd = null;
        Scanner in = new Scanner(System.in);
        try {
            Statement sqlStatement = conn.createStatement();//创建sql语句
            String sql = "select * from " + tableName;
            ResultSet rs = sqlStatement.executeQuery(sql);//执行sql语句
            //下面根据该table输出属性组
            rsmd = rs.getMetaData();//获取属性名
            Map map = new HashMap();
            System.out.print("Filter column. ");
            if (rsmd != null) {
                int count = rsmd.getColumnCount();//统计属性个数
                for (int i = 1; i <= count; i++) {
                    map.put(i,rsmd.getColumnName(i));
                    System.out.print("["+i+": "+rsmd.getColumnName(i)+"]");//输出属性名
                }
            }
            System.out.print("\nInput the number: ");//筛选属性
            Object num = in.nextInt();
            System.out.print("Filter value: ");//筛选元组
            String value = in.next();
            SelectAll(tableName,"where "+map.get(num)+"='"+value+"'");//调用查询方法,查询筛选数据
            System.out.println("Are these values that need to be modified? [Y/N]");
            String YesOrNo = in.next();
            if(YesOrNo.charAt(0) == 'Y')
            {
                System.out.println("Which column should be modified?");
                if (rsmd != null) {//输出属性名
                    int count = rsmd.getColumnCount();
                    for (int i = 1; i <= count; i++) {
                        System.out.print("["+i+": "+rsmd.getColumnName(i)+"]");
                    }
                }
                System.out.print("\nInput the number: ");//输入需要修改的属性
                int num2 = in.nextInt();
                System.out.println("What value is modified to?");//修改成什么值
                String value2 = in.next();
                String modifySql = "update "+tableName+" set "+map.get(num2)+"='"+value2+"'"+" where "+map.get(num)+"="+"'"+value+"'";
                sqlStatement.executeUpdate(modifySql);
                System.out.println("Execute Successful !");
            } else if (YesOrNo.charAt(0) == 'N') {
                ModifyValue(tableName);//如果不修改以上内容,重新选择需要修改的元组
            } else System.out.println("Input error! System exit.");//除Y和N以外的键自动退出
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Execute failed !");
        }
    }

4. 删除数据

public void DeleteValue(String tableName){
        //选择列名,询问是否删除以下数据,选择Y删除。
        ResultSetMetaData rsmd = null;
        Scanner in = new Scanner(System.in);
        try {
            Statement sqlStatement = conn.createStatement();//创建sql语句
            String sql = "select * from " + tableName;
            ResultSet rs = sqlStatement.executeQuery(sql);//执行sql语句
            //下面根据该table输出属性组
            rsmd = rs.getMetaData();//获取属性名
            Map map = new HashMap();
            System.out.print("Filter column. ");//筛选属性
            if (rsmd != null) {//输出属性名
                int count = rsmd.getColumnCount();
                for (int i = 1; i <= count; i++) {
                    map.put(i,rsmd.getColumnName(i));
                    System.out.print("["+i+": "+rsmd.getColumnName(i)+"]");
                }
            }
            System.out.print("\nInput the number: ");
            Object num = in.nextInt();
            System.out.println("Filter value: ");//筛选元组
            String value = in.next();
            System.out.println("These values will be deleted.");
            SelectAll(tableName,"where "+map.get(num)+"='"+value+"'");//调用查询方法,查询需要删除的元组
            System.out.println("[Y/N]?");
            String YesOrNo = in.next();
            if(YesOrNo.charAt(0) == 'Y')
            {
                String deleteSql = "delete from "+tableName+" where "+map.get(num)+"='"+value+"'";
                sqlStatement.executeUpdate(deleteSql);//执行删除语句
                System.out.println("Execute Successful !");
            } else if (YesOrNo.charAt(0) == 'N') {
                DeleteValue(tableName);//如果不删除,重新选择需要删除的元组
            } else System.out.println("Input error! System exit.");//除Y和N以外的键自动退出
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Execute failed !");
        }
    }

5. 拓展

数据库增删改功能定义好后我们可以进一步整合,首先在main方法中调用并测试。

connectDb.SelectAll("表名","where条件句");//where条件句为空则查询所有元组
connectDb.AddValue("表名");//增加元组
connectDb.DeleteValue("表名");//删除元组
connectDb.ModifyValue("表名");//修改元组

我们可以发现,在操作表时,我们必须在方法中输入实参:表名,如果操作不同的表就需要再次修改实参,下面我们定义一个可以自行选择数据库表名的方法。

第一步,在class ConnectDb中声明一个tableName全局变量。

public class ConnectDb {
    public String tableName;
    ...
}

第二步,创建TableList方法,输出数据库内所有表,并要求选择一个表,将表名赋给tableName,代码如下。

public void TableList(){
        Scanner in = new Scanner(System.in);
        Map map = new HashMap();
        int i = 0;
        try {
            DatabaseMetaData metaData = conn.getMetaData();
            ResultSet mrs = metaData.getTables(null, null, null, new String[]{"TABLE"});
            while (mrs.next()) {
                i++;
                map.put(i, mrs.getString(3));
                System.out.println("[" + i + ": " + mrs.getString(3) + "]");
            }
            System.out.print("Input the number: ");
            int num = in.nextInt();
            this.tableName = (String) map.get(num);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

第三步,补充main方法。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        ConnectDb connectDb = new ConnectDb("数据库名","用户名","密码");
        System.out.println("Please choose a table.");
        connectDb.TableList();
        String n;
        do {//Y/N判断是否继续操作数据表
            System.out.println("Please choose an operation.\n[1: Select all rows],[2: Add values],[3: Delete values],[4: Modify values]");
            Scanner in = new Scanner(System.in);
            System.out.print("Input the number: ");
            int i = in.nextInt();
            switch (i) {
                case 1:
                    connectDb.SelectAll(connectDb.tableName,"");//查询所有元组
                    break;
                case 2:
                    connectDb.AddValue(connectDb.tableName);//增加元组
                    break;
                case 3:
                    connectDb.DeleteValue(connectDb.tableName);//删除元组
                    break;
                case 4:
                    connectDb.ModifyValue(connectDb.tableName);//修改元组
            }
            System.out.println("Do you wanna continue to operate? [Y/N]");
            n = in.next();
        }while((n.charAt(0) == 'Y') && (n.charAt(0) != 'N'));
    }
}

结果展示。

总结

到此这篇关于JDBC连接SQL Server数据库实现增删改查的文章就介绍到这了,更多相关JDBC连接SQLServer增删改查内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JDBC获取数据库连接由浅入深

    添加MySQL驱动: 不同的数据库厂商都会有自己的实现java.sql.Driver接口的驱动程序,例如mysql的实现就是com.mysql.jdbc.Driver,将mysql-connector-java-版本号-bin.jar添加到相应工程的目录(如果是动态web项目的话,需要将对应的jar包放到WebRoot目录下)下面,右键选择add as library就完成了(如果是使用的eclipse,则是点击build path). 在mysql8.0之后驱动程序的全路径应该是com.mys

  • 关于Java中使用jdbc连接数据库中文出现乱码的问题

    目录 一.使用jdbc连接数据库,插入数据库时,数据里的数据显示乱码,为 " ??? " 二.为什么配置了character_set_server = utf8,jdbc连接时就可以不指定编码 三.MYSQL的字符处理机制是怎样的,为什么jdbc不指定编码或者服务端不设置character_set_server=utf8会导致乱码 一.使用jdbc连接数据库,插入数据库时,数据里的数据显示乱码,为 " ??? " 两种解决方案: 1.修改服务端的mysql配置文件,

  • 详解JDBC的概念及获取数据库连接的5种方式

    目录 一.JDBC概念 二.JDBC获取数据库连接的5种方式 方式一 方式二 方式三 方式四 方式五 一.JDBC概念 Java DataBase Connectivity(Java数据库连接技术) 它是将Java与SQL结合且独立于特定的数据库系统的应用程序编程接口(API-它是一种可用于执行SQL语句的JavaAPI,即由一组用Java语言编写的类与接口所组成) JDBC的设计目的: 它是一种规范,设计出来的主要目的是为了让各个数据库开发商为Java程序员提供标准的数据访问类和接口,使得独立

  • JDBC获取数据库连接的5种方式实例

    目录 方式一:直接通过数据库厂商提供的相关驱动 方法二:通过反射的方式来构造Driver对象 方式三:使用DriverManager来替换Driver获取连接 方法四:省略创建Driver对象和注册驱动 方式五:通过配置文件的方式 每种方式迭代的原因 方式五的优点 总结 方式一:直接通过数据库厂商提供的相关驱动 步骤 导入相关驱动(Build Path) 创建Driver类的实例化对象 获取要连接数据库的URL 创建Properties类的实例化对象,将账号和密码封装到该对象中 通过Driver

  • Data Source与数据库连接池简介(JDBC简介)

    目录 起源 为何放弃DriverManager 连接池 数据源 实现 核心架构 DataSource API 小结 应用 数据库连接池示例 总结 DataSource是作为DriverManager的替代品而推出的,DataSource 对象是获取连接的首选方法. 起源 为何放弃DriverManager DriverManager负责管理驱动程序,并且使用已注册的驱动程序进行连接. //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //

  • C#如何实现对sql server数据库的增删改查

    一个专门实现sql server数据库的增删改查,以及将查询的结果返回成表格等功能,分享代码如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient;//第一步:引用与sql相关的命名空间 using System.Data;//引用表的命名空间 //行注释 ///段落注释 /// <summary> ///第二步: 把

  • C#如何实现对sql server数据库的增删改查

    一个专门实现sql server数据库的增删改查,以及将查询的结果返回成表格等功能,分享代码如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient;//第一步:引用与sql相关的命名空间 using System.Data;//引用表的命名空间 //行注释 ///段落注释 /// <summary> ///第二步: 把

  • ADO.NET实现对SQL Server数据库的增删改查示例

    了解了上一篇的ADO.NET简介,我们就可以来对数据库进行增删改查等基本操作了!下面是每种操作的具体实现. 先在自定义类的头部定义好数据库连接对象和连接字符串: string connectionString = "Data Source=SC-201607131829;Initial Catalog=Animal;Integrated Security=True"; SqlConnection conn; 1.数据库的查询操作,返回一个DataTable public DataTab

  • 详解Java数据库连接JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创

  • jdbc连接sql server数据库问题分析

    SQL Server连接中问题还真多.不进行设置还真连接不上,这里小记一下!(部分资料来源于互联网) JDBC连接MySQL出现的问题 (例子里面自带JDBC2005的驱动,在lib文件夹下,右键点击Build Path--->add to build build path 即可) 运行connectionSqlServer2005包下的JavaConnectionSQL类即可! 1. 驱动问题: JDBC2005与JDBC2008一定要对号入座,否则会报错!(本人用的是2008) 2. 服务启

  • Java连接 JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创

  • java jdbc连接mysql数据库实现增删改查操作

    jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打交道非常基础的一个知识,也是比较接近底层的,在实际的工作中大家用得更多的其实还是比较成熟的框架,例如Hibernate.Mybatis. 但是作为这些成熟框架的底层的jdbc却也是我们应该去掌握的,只有了解了jdbc的增删改查,这样在以后如果有兴趣去研究Hibernate或者Mybatis的源代码的时候才能更好的去理解这些成熟的框架是如何去实现增删改查

  • java连接SQL Server数据库的方法

    本文实例为大家分享了java连接SQL Server数据库的具体代码,供大家参考,具体内容如下 操作系统:windows 10 64位 java开发环境:MyEclipse 数据库:SQL Server 2012 JDBC驱动包 下载sqljdbc4.jar 导入到项目中 JAVA代码 package com.cl.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedSt

  • java连接mysql数据库 java连接sql server数据库

    在java的应用中,我们经常会对数据库进行必要的操作,下来我们就了解一下如何用java连接mysql数据库 以及java连接sql server数据库 一.mysql import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestOne {

  • Python基于Pymssql模块实现连接SQL Server数据库的方法详解

    本文实例讲述了Python基于Pymssql模块实现连接SQL Server数据库的方法.分享给大家供大家参考,具体如下: 数据库版本:SQL Server 2012. 按照Python版本来选择下载pymssql模块,这样才能连接上sql server. 我安装的python版本是3.5 ,64位的,所以下载的pymssql模块是:pymssql-2.1.3-cp35-cp35m-win_amd64.whl 我把文件下载后放到E盘,安装pymssql模块: C:\Users\Administr

随机推荐