目的
开发环境
环境配置
主要代码以及简单分析
效果演示
源码下载
目的
Java项目以及JavaEE项目大都需要连接数据库,JDBC是一种很基础的链接数据库的一种方法,这篇博客主要实现了Java工程连接数据库并且对数据表进行改动查询的功能。
开发环境
MyEclipse 2014,SQL Server 2016,Windows操作系统
环境配置
首先,Java的开发环境是必须配置的,这里不再多说,SQL Server也是安装好并且能够正常运行的,MyEclipse也是能够正常运行的,在这些环境都OK的基础上,我们再来进行一些环境的配置。
以下配置只是为了浏览数据库信息方便,可以跳过
打开MyEclipse,依次打开windows->open Perspective->MyEclipse DataBase Explore,如图所示:
打开之后再左侧空白处右键new一个数据库连接,并且按照图中示例来填写内容:
其中,Driver name为数据库连接的名字,可以任意,下面一行则按照图中填写,数据库名字改为自己数据库中拥有的数据库的名字,用户名和密码依次为自己的用户名密码,然后单击Add JARs,选择sqljdbc.jar这个包,这个在博客末尾稍后我会有下载链接接,大家也可以自行百度orGoogle下载。
之后就可以连接数据库了,打开连接我们就能看到数据库的内容。
主要代码以及简单分析
最开始,我们先来新建一个数据库,用于本次测试,数据库创建的SQL语句如下:
create database school
go
use school
create table S
( xh varchar(4) not null primary key,
xm varchar(10) not null,
xb varchar(2) not null,
csrq datetime not null,
jg varchar(6) not null,
sjhm char(11) not null,
yxh varchar(2) not null
insert into S values('1101','李明','男','1993-03-06','上海','13613005466','02')
insert into S values('1102','刘晓明','男','1992-12-08','安徽','18913457890','01')
insert into S values('1103','张颖','女','1993-01-05','江苏','18826490423','01')
insert into S values('1104','刘晶晶','女','1994-11-06','上海','13331934111','01')
insert into S values('1105','刘成刚','男','1991-06-07','上海','18015872567','01')
insert into S values('1106','李二丽','女','1993-05-04','江苏','18107620945','01')
insert into S values('1107','张晓峰','男','1992-08-16','浙江','13912341078','01')
这里面表单想必不用多说,一看就能看懂。
之后我们先新建一个Java工程,如图先新建三个类,分别用来处理数据库连接、进行数据库操作和测试。
然后我们先来看第一个DBConn的代码:
package dateBaseTest;
import java.sql.*;
public class DBConn {
private static Connection conn; //Connection对象(链接)
//连接数据库
public static Connection getConn(){
try{
//加载注册SQLSever的JDBC驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//编写链接字符串,创建并且获取链接,此数需要更改为自己的数据库名称和自己的用户名以及密码
conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=school","sa","yourpassword");
return conn;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
public static void closeConn(){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
每一步操作是干什么的注释中都有说明,那么这里就需要我们来引入JDBC的jar包,代码里面有一句就是加载驱动的,如果我们不导入包就会出错的。
右键工程名称,如图依次选择Build Path->Add External Archives,然后选择sqljdbc4.jar(最后会有此jar包下载)。
之后看我们对应的处理数据的DBOpera.java
package dateBaseTest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;
public class DBOpera {
public static Scanner input= new Scanner(System.in);
private static PreparedStatement pstmt;
private static Connection conn;
public DBOpera(Connection conn){
this.conn = conn;
}
public static void queryAge(int maxAge){
String sql = "select * "
+ "from S "
+ "where YEAR(getdate())-YEAR(S.csrq) >= "+String.valueOf(maxAge);
int counts = 0;
try{
pstmt=conn.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1)+" "+
rs.getString(2)+" "+
rs.getString(3)+" "+
rs.getString(4)+" "+
rs.getString(5)+" "+
rs.getString(6)+" "+
rs.getString(7)
);
startAsk(rs.getString(1));
counts++;
}
System.out.println("年龄大于"+maxAge+"的有以上"+counts+"人,查询结束。");
}catch(Exception e){
e.printStackTrace();
}
}
public static void updateYxh(String xh,String yxh){
String sql="update S "
+ "set yxh = "
+ "'"+ yxh +"'"
+ " where xh="
+ "'"+ xh +"'";
try{
System.out.println(sql);
pstmt=conn.prepareStatement(sql);
pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}
}
public static void startAsk(String xh){
System.out.println("是否修改此学生院系号:(y:是,n:否)");
String newDno;
String t = input.next();
if(t.equals("y")||t.equals("Y")){
System.out.println("请输入新的院系号:");
newDno = input.next();
updateYxh(xh,newDno);
}
}
}
其中所用到的PrepareStatement是JDBC提供的一个接口,它是Statement的子接口,可以预编译SQL语句,ResultSet是结果集,这里只涉及了查询与更新操作,删除与修改操作类似。
下面是测试类:
package dateBaseTest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.*;
public class Main {
public static Scanner input= new Scanner(System.in);
private static Connection conn;
public static void main(String[] args){
int maxAge;
System.out.println("请输入年龄:");
maxAge = input.nextInt();
conn = DBConn.getConn();
DBOpera dbo = new DBOpera(conn);
DBOpera.queryAge(maxAge);
DBConn.closeConn();
}
}
这三个类实现的功能是:连接数据库,查询年龄大于某个值的学生,依次输出学生信息,并且再每一个学生后面询问是否修改他的院系号,如果修改则输入新的院系号修改数据库,如果不修改则输出下一条学生的信息。
效果演示
如图
说明查询数据库成功
说明修改成功