实验六 Java数据库程序设计
一、实验目的
1. 掌握创建数据库应用程序的各个重要环节;
2. 掌握使用JDBC API提供的接口和类进行连接SQL Server数据库,执行SQL语句,处理结果集等操作方法。
二、知识准备
前期要求掌握的知识:了解结构化查询语言SQL的相关内容。
实验相关理论或原理: Java语言提供了对数据库的强大支持,Java语言提供JDBC来实现对数据库访问和数据处理的支持。利用JDBC来访问特定的数据库,实现对数据库的各种操作。具体有7步:
- 导入JDBC类;
- 装载/注册驱动程序;
- 连接数据库;
- 创建语句对象;
- 执行SQL语句;
- 处理结果;
- 关闭连接。
- 下载驱动及配置
(以SQL SERVER数据库为例,若是其它数据库,则采用相应的驱动程序;驱动方式采用纯JAVA程序驱动,若采用其它模式,则程序中语句相应要进行调整)
1. 使用纯Java驱动,首先必须获得相应数据库的驱动程序包;
SQLServer JDBC驱动包有两种:sqljdbc.jar和sqljdbc4.jar,根据所使用的JDK版本选择相应的驱动程序。并将完整路径设置到classpath环境变量中,如用开发工具开发程序,还需在开发环境中设置路径。
将sqljdbc4.jar类库文件拷贝到D:\Program Files\Java\jdk1.7.0\jre\lib\ext目录下。(这个路径根据JDK的版本和安装路径确定,下同)
将sqljdbc4.jar类库文件拷贝到D:\Program Files\Java\jre7\lib\ext目录下( 最好是,只要是jre文件夹,都复制一个sqljdbc4.jar到jre7\lib\ext里去!!)
在环境变量classpath 后面添加sqljdbc4.jar的路径。
2. 设置SQLEXPRESS服务器:
a.打开SQL Server Configuration Manager -> SQLEXPRESS的协议 -> TCP/IP
b.右键单击启动TCP/IP
c.双击进入属性,把IP地址中的IP all中的TCP端口设置为1433
d.重新启动SQL Server 2005服务中的SQLEXPRESS服务器
附加:找到“打开或关闭windows功能”,启动Telnet客户端
e.关闭SQL Server Configuration Manager
注:可以在命令行窗口中用如下命令查看1433端口是否打开:
Telnet localhost 1433
若执行命令后,窗口左上角有光标闪烁,无其它提示信息,则说明端口已打开。
四、实验内容
PART 1 基础实验
验证性实验1
运行如下Java程序,学会JAVA连接数据库的方法。注意:程序中红色字体的内容,可以根据实际情况设置。
import java.sql.*;
public class Test {
public static void main(String[] srg) {
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//加载JDBC驱动
String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=sc";
//连接服务器和数据库
String userName = "sa"; //默认用户名
String userPwd = "12345678"; //密码
Connection dbConn;
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
System.out.println("Connection Successful!");
//如果连接成功 控制台输出Connection Successful!
} catch (Exception e) {
e.printStackTrace();
}
}
}
验证性实验2
运行如下程序,该程序的功能是将学生表中所有记录的第一个字段信息显示出来。
import java.sql.*;
public class ex1 {
public static void main(String []args){
System.out.println("database example:");
Connection conn = null;
Statement stmt = null;
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url="jdbc:sqlserver://localhost:1433; DatabaseName=sc";
String user="sa";
String password="12345678"; // 用户名和密码;
conn= DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
String sql = "select * from student";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{
System.out.println(rs.getString(1));
}
}catch(Exception ex){
System.out.println(ex.toString());
}
finally{
if(stmt!=null){
try{
stmt.close();
}catch(Exception ex){}
}
if(conn!=null){
try{
conn.close();
}catch(Exception ex){}
}
}
System.out.println("End");
}
}
设计性实验
在上述程序的基础上,自己编写程序,实现如下功能:
- 查询student表中所有的数据,并在控制台显示出来,一行显示一个学生的信息。
package ch1;
import java.sql.*;
public class test {
public static void main(String []args){
System.out.println("database example:");
Connection conn = null;
Statement stmt = null;
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url="jdbc:sqlserver://localhost:1433; DatabaseName=sc";
String user="sa";
String password="12345678"; // 用户名和密码;
conn= DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
String sql = "select * from student ";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{
System.out.print(rs.getString(1)+" ");
System.out.print(rs.getString(2)+" ");
System.out.print(rs.getString(3)+" ");
System.out.print(rs.getString(4)+" ");
System.out.print(rs.getString(5)+" ");
System.out.println();
}
}catch(Exception ex){
System.out.println(ex.toString());
}
finally{
if(stmt!=null){
try{
stmt.close();
}catch(Exception ex){}
}
if(conn!=null){
try{
conn.close();
}catch(Exception ex){}
}
}
System.out.println("End");
}
}
- 输入一个学号,如果该学号信息存在,则显示出该学号对应的学生的基本信息,包括学号,姓名,性别,年龄等,以及该学生所选修的课程名称,成绩;若没有该学号对应的信息存在,则输出简单的提示信息。
import java.sql.*;
import java.util.Scanner;
public class Test {
public static void main(String []args){
System.out.println("database example:");
Connection conn = null;
Statement stmt = null;
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url="jdbc:sqlserver://localhost:1433; DatabaseName=st";
String user="sa";
String password="12345678"; // 用户名和密码;
conn= DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
int X=0;
Scanner x=new Scanner(System.in);
X=x.nextInt();
String sql = "select * from student,sc,course where Student.sno=sc.sno and Course.cno=Sc.cno";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{int i=1;
if(X==rs.getInt(i)) {
for(i=1;i<=12;i++) {
System.out.print(rs.getString(i)+"\t");
}
System.out.println();
}
}
}
catch(Exception ex){
System.out.println(ex.toString());
}
finally{
if(stmt!=null){
try{
stmt.close();
}catch(Exception ex){}
}
if(conn!=null){
try{
conn.close();
}catch(Exception ex){}
}
}
System.out.println("End");
}
}
- 输入一个学生的信息,包括学号,姓名,性别,年龄,所在系部等,首先判断学生表student中是否有相同学号的记录存在,如果有,给出提示;如果没有,则将输入的信息作为一条记录插入到学生表student中。
package ch1;
/*3.输入一个学生的信息,包括学号,姓名,性别,年龄,所在系部等,首先判断学生表student中是否有相同学号的记录存在,
* 如果有,给出提示;如果没有,则将输入的信息作为一条记录插入到学生表student中。
*/
import java.sql.*;
import java.io.*;
public class Test {
public static void main(String []args){
System.out.println("database example:");
Connection conn = null;
Statement stmt = null;
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url="jdbc:sqlserver://localhost:1433; DatabaseName=sc";
String user="sa";
String password="12345678"; // 用户名和密码;
conn= DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
String S;
BufferedReader s=new BufferedReader(new InputStreamReader(System.in));
S=s.readLine();
String sql = "select sno from student";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{int i=1;
if(S==rs.getInt(i)) {
for(i=1;i<=12;i++) {
System.out.print(rs.getString(i)+"\t");
}
System.out.println();
}
}
}
catch(Exception ex){
System.out.println(ex.toString());
}
finally{
if(stmt!=null){
try{
stmt.close();
}catch(Exception ex){}
}
if(conn!=null){
try{
conn.close();
}catch(Exception ex){}
}
}
System.out.println("End");
}
}
Part 2 窗口程序设计
- 在数据库中新建一个表,存放用户登陆信息,字段包括用户名,密码。建议表名为userinfo,字段名为username和passowrd。并在该表中插入若干条记录。
- 设计一个登陆窗口,用户输入登录名及密码,如果在userinfo表中能够找到对应的信息,则提示“登陆成功!”; 否则根据具体情况给出“无该用户存在”或“密码输入错误”等提示,如果三次登陆都失败,则关闭该程序。
- 仿照如下窗体,设计一个与学生表student实际属性相吻合的窗体,在各个文本框中输入对应属性的值,点击添加按钮,如果无数据冲突,则将输入信息插入到表student中;如果有数据冲突,则给出相应的提示。
4. 对第2步中的登陆程序进行修改,如果登陆成功,则显示出第3步的窗口,进行数据添加工作。