JDBC如何连接SQL Server数据库实现增删改查
Posted Richard Du
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC如何连接SQL Server数据库实现增删改查相关的知识,希望对你有一定的参考价值。
目录
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 Centerhttps://www.microsoft.com/zh-cn/download/details.aspx?id=11774
下载完后解压缩并打开,我们可以看到有 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数据库实现增删改查的主要内容,如果未能解决你的问题,请参考以下文章
java jdbc连接数据库 oracle的代码实现增删改查的方法怎么写
Java使用JDBC连接SQL Server数据库|实现学生信息系统