java连接数据库课程设计.docx
《java连接数据库课程设计.docx》由会员分享,可在线阅读,更多相关《java连接数据库课程设计.docx(27页珍藏版)》请在冰豆网上搜索。
java连接数据库课程设计
*******大学
学生实验报告
实验课程名称J2EE及JAVA程序设计
开课实验室DS1501
《J2EE及JAVA程序设计》实验报告
开课实验室:
DS15012015年6月18日
学院
软件学院
软工2班
姓名
成绩
课程
名称
J2EE及JAVA程序设计
实验项目
名称
实验6-8:
图形界面编程、抽象类与接口、数据库。
指导教师
教师评语
教师签名:
2014年月日
一、实验目的
实验六:
基本掌握使用JAVA来完成基本的图形界面等调试与编程,实现理论课上讲述的内容PPT内容的验证。
实验七:
掌握抽象类与接口的概念,验证代码,能写小程序。
实验八:
掌握利用JAVA完成数据库课程中的基本数据记录操作。
二、实验内容
实验六内容:
调试,验证,课件ppt内容,课后布置的作业(实验报告内容中可不写)。
实验七内容:
完成教材12章关于抽象类与接口方面的范例内容的代码验证、后面作业的代码设计(实验报告中可不写)。
实验八内容:
(二选一,提交该部分实验报告内容)
1)利用图形界面编程,实现C/S模式的数据库访问操作。
完成SQLSERVER或MYSQL数据库管理系统的安装,配置,JAVA数据库访问环境的配置;完成数据库表的建立,记录插入等;建立用户表,包含用户名、密码字段;利用JAVA实现图形界面,用户登录验证,进入软件运行后,针对某表记录的增、删、改、查操作。
2)完成JAVAWEB应用开发,实现B/S模式的数据库访问操作。
完成SQLSERVER或MYSQL数据库管理系统的安装,配置,JAVA数据库访问环境的配置,Tomcat服务器安装配置;完成数据库表的建立,记录插入等;建立用户表,包含用户名、密码字段;利用JAVA实现WEB应用,通过浏览器访问WEB进行用户登录验证,进入WEB应用运行后,针对某表记录的增、删、改、查操作。
三、使用仪器、材料
JAVASEJDK1.7.55
Tomcat
Sqlserver
四、实验过程原始记录(数据、图表、计算等):
以下是我所连接的数据库表结构,Book表是存储图书信息的,Reader表是存储读者信息的,Borrow表是存储借阅记录的,User表是存储用户登录用户名和密码的。
为了不暴露表结构和只显示用户需要的信息,建立了一个视图record
下面是用java连接数据库的过程:
首先下载java连接sql数据库的驱动程序,配置环境。
下面是整个程序演示过程截图:
1.登录界面
首先是登录界面
用户名或密码错误弹出登录失败消息框
2.初始界面
正确后进入初始界面,从视图中读取的数据库信息
3.增加功能
点击增加按钮弹出增加记录对话框
输入增加记录的信息后点击确定,再回到初始界面点击刷新按钮,可以看到刚增加的记录已经显示在初始界面中。
4.修改功能
点击修改按钮,弹出修改记录对话框
根据输入的读者编号和图书编号确定修改的是哪条记录,填入修改的信息后点击确定,回到初始界面点击刷新,可以看到修改的记录已修改掉
5.查询功能
点击查询按钮弹出搜索记录对话框
输入姓名点击确定就会在下面显示此姓名的相关记录
输入书名也可以查询此书相关的记录
6.删除功能,可以单行删除也可以多行删除
首先单行删除,选中一行后点击删除按钮就可以删除此条记录,而且数据库也相应地删除了此条记录,通过点击刷新再重新读取数据库数据可以证明
删除前
删除后
多行删除,选中多行后点击删除
删除前
删除后
点击刷新后
以上就是整个程序演示过程
遇到的问题:
1.借书日期和还书日期以date类型显示到界面中总会少两天,不知道为什么,所以我把date类型改为了char类型,然后就正常了。
2.开始写删除多行的时候,我是写的删除数据库的信息并一起删掉JTable中的信息,但是由于在删除JTable中信息时最开始得到的序号和删除一行后序号减少了,于是会出现越界的错误,于是我改为了删除数据库信息后再调用读取数据库信息的函数进行了刷新就没问题了。
下面是连接数据库并进行相关操作的源代码
importjava.sql.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.table.*;
importjava.util.*;
//登录界面的类,也是初始类
publicclassConnectionDatabaseextendsJFrameimplementsActionListener{
privateConnectioncon=null;//连接数据库
privateStatementstmt=null;//执行数据库sql语句
privateResultSetrs=null;//存储数据库查询结果
intif_success=0;//判断是否登录成功
//登录界面的设置
privateJLabelnamelabel=newJLabel("用户名");
privateJTextFieldname=newJTextField(10);
privateJLabelpasslabel=newJLabel("密码");
privateJTextFieldpwd=newJTextField(30);
privateJButtoncommit=newJButton("登录");
publicConnectionDatabase(){
JPanelp1=newJPanel();
p1.setLayout(newGridLayout(2,2,5,20));
p1.add(namelabel);
p1.add(name);
p1.add(passlabel);
p1.add(pwd);
JPanelp2=newJPanel();
p2.add(commit,BorderLayout.SOUTH);
add(p1,BorderLayout.NORTH);
add(p2,BorderLayout.CENTER);
setSize(300,200);
setTitle("登录界面");
commit.addActionListener(this);//为登录按钮增加监听器
}
//主函数,显示登录界面
publicstaticvoidmain(String[]args){
ConnectionDatabaselogin=newConnectionDatabase();
login.setLocationRelativeTo(null);
login.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
login.setVisible(true);
}
//点击按钮登录后判断用户名和密码是否正确,是否允许登录进去
publicvoidactionPerformed(ActionEvente){
try{
Stringsname=name.getText();
Stringspwd=pwd.getText();
//连接数据库
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("成功加载SQL驱动程序");
}
catch(Exceptionexw){
System.out.println("找不到SQL驱动程序");
}
try{
con=DriverManager.getConnection
("jdbc:
sqlserver:
//localhost:
1433;DatabaseName=Library","sa","xyz123456");
System.out.println("数据库连接成功");
}
catch(Exceptionexy){
System.out.println("数据库连接失败");
}
//执行sql语句,查询出用户名和密码
stmt=con.createStatement();
rs=stmt.executeQuery("selectname,passwordfrom[User]");
//判断用户名和密码是否正确
while(rs.next()){
if(sname.equals(rs.getString("name"))&&spwd.equals(rs.getString("password")))
if_success=1;
}
rs.close();
if(if_success==1){//正确则进入初始界面
readFrameframe=newreadFrame();
frame.setVisible(true);
}
else{
JOptionPane.showMessageDialog(null,"登录失败!
");
}
}catch(SQLExceptionex){
ex.printStackTrace();
}
}
}
//从数据库中读入视图中的记录初始界面
classreadFrameextendsJFrame{
privatestaticConnectioncon=null;
privatestaticStatementstmt=null;
privatestaticResultSetrs=null;
//界面设置
privateJButtonsearch=newJButton("查询");
privateJButtonadding=newJButton("增加");
privateJButtondelete=newJButton("删除");
privateJButtonmodify=newJButton("修改");
privateJButtonfresh=newJButton("刷新");
privatestaticJTabletable=newJTable();//JTable用于显示记录
privatestaticDefaultTableModeltmhavesold=newDefaultTableModel();//建立默认的JTable模型
publicreadFrame(){
setTitle("图书借还记录");
setSize(600,500);
JPanelp1=newJPanel();//创建面板p1放置四个按钮.
p1.setLayout(newGridLayout(1,5));
p1.add(adding);
p1.add(delete);
p1.add(modify);
p1.add(search);
p1.add(fresh);
add(p1,BorderLayout.NORTH);
JScrollPanep2=newJScrollPane
(table,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
this.getContentPane().add(p2,BorderLayout.CENTER);
//点击查询按钮显示查询对话框
search.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente1){
JFramequeryFrame=newsearchFrame();
queryFrame.setVisible(true);
}
});
//点击增加按钮显示增加对话框
adding.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente2){
JFrameaddingFrame=newaddFrame();
addingFrame.setVisible(true);
}
});
//点击刷新按钮从数据库中重新读入数据
fresh.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente3){
read();//从数据库视图中读入数据
}
});
//点击修改按钮弹出修改记录对话框
modify.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente4){
JFramemyframe=newmodifyFrame();
myframe.setVisible(true);
}
});
//点击删除按钮后的操作
delete.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente5){
intselectRows=table.getSelectedRows().length;//取得用户所选行的行数
DefaultTableModeltableModel=(DefaultTableModel)table.getModel();//得到jtable中的数据
try{
ConnectData();//连接数据库
stmt=con.createStatement();
if(selectRows==1){//如果选中单行
intselectedRowIndex=table.getSelectedRow();//取得用户所选单行
//得到选中行的Rno和Bno值
StringcellValue1=(String)tableModel.getValueAt(selectedRowIndex,0);
StringcellValue2=(String)tableModel.getValueAt(selectedRowIndex,1);
stmt.execute("deletefromBorrowwhereRno='"+cellValue1+"'and
Bno='"+cellValue2+"'");//根据Rno和Bno的值删除数据库表Borrow中此行记录
tableModel.removeRow(selectedRowIndex);//从JTable中删除此行
}
elseif(selectRows>1){//选中多行
int[]selRowIndexs=table.getSelectedRows();//得到多行的行号
for(inti=0;iStringcValue1=(String)tableModel.getValueAt(selRowIndexs[i],0);
StringcValue2=(String)tableModel.getValueAt(selRowIndexs[i],1);
stmt.execute("deletefromBorrowwhereRno='"+cValue1+"'and
Bno='"+cValue2+"'");
}
read();//从数据库中重新读入数据
}
con.close();
stmt.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
});
read();
}
//连接数据库
publicstaticvoidConnectData(){
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("成功加载SQL驱动程序");
}
catch(Exceptione){
System.out.println("找不到SQL驱动程序");
}
try{
con=DriverManager.getConnection
("jdbc:
sqlserver:
//localhost:
1433;DatabaseName=Library","sa","xyz123456");
System.out.println("数据库连接成功");
}
catch(Exceptione){
System.out.println("数据库连接失败");
}
}
//从数据库中读入记录
publicstaticvoidread(){
try{
ConnectData();
stmt=con.createStatement();
rs=stmt.executeQuery("select*fromrecord");
VectorcolumnName=newVector();//字段名
Vector>dataVector=newVector>();//存储rs中从数据库中查出的数据
columnName.add("读者编号");
columnName.add("图书编号");
columnName.add("姓名");
columnName.add("书名");
columnName.add("借书日期");
columnName.add("还书日期");
while(rs.next()){//把rs中的数据赋给dataVector
Vector
for(inti=1;i<=6;i++){
vec.add(rs.getObject(i));
}
dataVector.add(vec);
}
tmhavesold.setDataVector(dataVector,columnName);//设定模型数据和字段
con.close();
stmt.close();
rs.close();
}catch(SQLExceptione){
e.printStackTrace();
}
table.setModel(tmhavesold);
}
}
//查询功能的类
classsearchFrameextendsJFrameimplementsActionListener{
privateConnectioncon=null;
privateStatementstmt=null;
privateResultSetrs=null;
//界面设计
privateJLabelnamelabel=newJLabel("姓名");
privateJTextFieldname=newJTextField(5);
privateJLabelbooklabel=newJLabel("书名");
privateJTextFieldbook=newJTextField(10);
privateJButtoncommit=newJButton("确定");
privateJTablestable=newJTable();//一样用jtable显示查询出的结果
privateDefaultTableModelmodel=newDefaultTableModel();//建立默认的JTable模型
publicsearchFrame(){
JPanelps2=newJPanel();
ps2.setLayout(newGridLayout(1,5));
ps2.add(namelabel);
ps2.add(name);
ps2.add(booklabel);
ps2.add(book);
ps2.add(commit);
JScrollPaneps3=newJScrollPane
(stable,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
add(ps2,BorderLayout.NORTH);
this.getContentPane().add(ps3,BorderLayout.CENTER);
this.setSize(500,380);
this.setTitle("搜索记录");
commit.addActionListener(this);//为确定按钮增加监听器
}
//点击确定后查询并显示出,过程和read()函数基本一致
publicvoidactionPerformed(ActionEvente){
try{
Stringnamevalue=name.getText();