Java数据库编程.docx
- 文档编号:5362785
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:67
- 大小:50.09KB
Java数据库编程.docx
《Java数据库编程.docx》由会员分享,可在线阅读,更多相关《Java数据库编程.docx(67页珍藏版)》请在冰豆网上搜索。
Java数据库编程
Java数据库编程
建立学生管理数据库
/*学生管理数据库*/
CREATEDATABASExsglON(NAME='xsgl_Data',FILENAME='c:
\start新\xsgl.mdf',
SIZE=2,FILEGROWTH=10%)LOGON(NAME='xsgl_Log',FILENAME='c:
\start新\xsgl_log.ldf',SIZE=2,FILEGROWTH=10%)
usexsgl
GO
/*创建专业表*/
CREATETABLEspeciality(specialityIDintIDENTITY(l,1)PRIMARYKEY,specialitynamechar(10)NOTNULL)
GO
/*创建用户表*/
CREATETABLEusertable(uidintIDENTITY(1,1)PRIMARYKEY,unamechar(10)NOTNULL,upwdchar(10)NULL)
GO
/*创建班级分类表*/
CREATETABLEclassclass(idintIDENTITY(1,1)PRIMARYKEY,parentintNOTNULL,namenchar(10)NOTNULLUNIQUE)
GO
/*创建课程表*/
CREATETABLEcourse(courseIDintIDENTITY(1,1)PRIMARYKEY,courseNamenchar(20)NOTNULLUNIQUE,teachernchar(10)NULL)
GO
/*创建学生档案表*/
CREATETABLExsda(nointIDENTITY(1,1)PRIMARYKEY,classIDintREFERENCESclassclass(ID),namechar(10)NOTNULL,sexnchar
(1)NOTNULL,birthDatechar(10)NULL,specialityintNULL,addresschar(30)NULL,isMemberchar
(1)NULL,resumentextNULL,pictureimageNULL)
GO
/*创建学生成绩表*/
CREATETABLEgrade(nointREFERENCESxsda(no),courseIdintREFERENCEScourse(courseID),gradefloatNOTNULL,PRIMARYKEY(no,courseID))
GO
1数据库的连接
数据库的连接一般使用两种方法:
使用JDBC-ODBC桥实现数据库的连接和使用纯JavaJDBC驱动程序实现数据的连接。
1.JDBC
JDBC(JavaDataBaseConnection,Java数据库连接)由一组用Java语言编写的类和接口组成。
JDBC为使用数据库及其工具的开发人员提供了一个标准的API,使他们能够用JavaAPI来编写数据库应用程序。
通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。
JDBC的作用概括起来有如下3个方面:
(1)建立与数据库的连接
(2)向数据库发起查询请求
(3)处理数据库返回结果
这些作用是通过一系列API实现的,其中的几个重要类或接口如表4-1所示。
表与数据库有关的几个重要类或接口
接口
作用
java.sql.Drivermanager
java.sql.Connection
java.sql.Statement
java.sql.ResultSet
处理驱动程序的加载和建立新数据库连接
处理与特定数据库的连接
在指定连接中处理SQL语句
处理数据库操作结果集
2.DrverManager
DriverManager类是Java.sql包中用于数据库驱动程序管理的类,作用于用户和驱动程序之间。
它跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接,也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。
一般的应用程序只使用它的getConnection()方法。
这个方法用来建立与数据库的连接。
staticConnectiongetConnection(Stringurl,Stringusername,Stringpassword):
通过指定的数据的URL及用户名、密码创建数据库连接。
3.Connection
Connection是用来表示数据库连接的对象,对数据库的一切操作都是在这个连接基础上进行的。
Connection类的主要方法有:
voidclearWarning():
清除连接的所有警告信息。
StatementcreateStatement():
创建一个Statement对象。
StatementCreateStatement(intresultSetType,intresultSetConcurrency):
创建一个Statement对象,它将生成具有特定类型和并发性的结果集。
voidcommit():
提交对数据库的改动并释放当前持有的数据库的锁。
voidrollback():
回滚当前事务中的所有改动并释放当前连接持有的数据库的锁。
StringgetCatalog():
获取连接对象的当前目录。
booleanisClose():
判断连接是否已关闭。
booleanisReadOnly():
判断连接是否为只读模式。
voidsetReadOnly():
设置连接的只读模式。
voidclose():
立即释放连接对象的数据库和JDBC资源。
4.Statement
Java所有SQL语句都是通过陈述(Statement)对象实现的。
Statement用于在已经建立的连接的基础上向数据库发送SQL语句的对象。
Statement对象的建立
通过Connection对象的createStatement方法建立Statement对象:
Statementstmt=con.createStatement();
如果要建立可滚动的记录集,需要使用如下格式的方法:
publicStatementcreateStatement(intresultSetType,intresultSetConcurrency)throwsSQLException
resultSetType可取下列常量:
ResultSet.TYPE_FORWARD_ONL:
只能向前,默认值。
ResultSet.TYPE_SCROLL_INSENSITIVE:
可操作数据集的游标,但不反映数据的变化。
ResultSet.TYPE_SCROLL_SENSITIVE:
可操作数据集的游标,反映数据的变化。
resultSetConcurrency的取值:
ResultSet.CONCUR_READ_ONLY:
不可进行更新操作。
ResultSet.CONCUR_UPDATABLE:
可以进行更新操作,默认值。
Statement对象的方法
Statement对象提供了三种执行SQL语句的方法:
ResultSetexecuteQuery(Stringsql):
执行SELECT语句,返回一个结果集。
intexecuteUpdate(Stringsql):
执行update、insert、delete等不需要返回结果集的SQL语句。
它返回一个整数,表示执行SQL语句影响的数据行数。
booleanexecute(Stringsql):
用于执行多个结果集、多个更新结果(或者两者都有)的SQL语句。
它返回一个boolean值。
如果第一个结果是ResultSet对象,返回true;如果是整数,就返回false。
取结果集时可以与getMoreResultSet、getResultSet和getUpdateCount结合来对结果进行处理。
5.ResultSet
ResultSet对象实际上是一个由查询结果数据构成的表。
在ResultSet中隐含着一个指针,利用这个指针移动数据行,可以取得所要的数据,或对数据进行简单的操作。
其主要的方法有:
booleanabsolute(introw):
将指针移动到结果集对象的某一行。
voidafterLast():
将指针移动到结果集对象的末尾。
voidbeforeFrist():
将指针移动到结果集对象的头部。
booleanfirst():
将指针移动到结果集对象的第一行。
booleannext():
将指针移动到当前行的下一行。
booleanprevious():
将指针移动到当前行的前一行。
booleanlast():
将指针移动到当前行的最后一行。
此外还可以使用一组getXXX()方法,读取指定列的数据。
XXX是JDBC中Java语言的数据类型。
这些方法的参数有两种格式,一是用int指定列的索引,二是用列的字段名(可能是别名)来指定列。
如:
StringstrName=rs.getString
(2);
StringstrName=rs.getString("name");
案例使用纯JavaJDBC驱动程序实现数据库的连接
在相关网站下载驱动程序,通过Class.forName()方法加载驱动程序,再通过驱动程序管理器(DriverManager)的方法getConnection()建立连接。
【代码与注释】
importjava.sql.*;
importjavax.swing.*;
classConnectServer2
{
//连接数据类
staticConnectioncon=null;//连接对象
publicstaticbooleanconn(Stringurl,Stringusername,Stringpassword)
{
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}catch(Exceptione)
{
e.printStackTrace();
returnfalse;
}
try
{
con=DriverManager.getConnection(url,username,password);//连接数据库
}
catch(SQLExceptione)
{
e.printStackTrace();
returnfalse;
}
returntrue;//成功
}
publicstaticbooleanclose()
{
try
{
con.close();//关闭数据库
con=null;
}catch(SQLExceptione)
{
returnfalse;
}
returntrue;
}
publicstaticvoidmain(Stringargs[])
{
//连接SQLServer数据库
if(conn("jdbc:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName=xsgl","sa",""))
{
JOptionPane.showMessageDialog(null,"数据库连接成功!
");
close();//关闭数据库
}
else
JOptionPane.showMessageDialog(null,"数据库连接失败!
");
}
}
学习利用纯JavaJDBC驱动程序实现数据库连接。
【应用扩展】
连接其他类型的数据库使用的驱动程序,可参考表4-2。
表4-2常用的数据库驱动程序
数据库
驱动类
URL
下载地址
MySQL
org.git.mm.mysql.Driver
jdbc:
mysql:
//localhost:
3306/xsgl
Oracle
oracle.jdbc.driver.OracleDriver
jdbc:
oracle:
thin:
@127.0.0.1:
1521:
xsgl
【相关知识】
1.纯JavaJDBC驱动程序
纯JavaJDBC驱动程序是独立的连接驱动程序,不需要中间服务器,与数据库实现通信的整个过程均由Java语言实现。
这种方法目前应用较广泛,缺点是需要下载相应的类包,不同数据库的连接代码可能不同。
连接SQLServer可以在网站下载。
有三个类包:
msbase.jar、mssqlserver.jar、msutil.jar。
使用时要将这三个包放在jdk\jre\lib\ext\目录下,或者所放的位置设置到CLASSPATH中即可。
2.使用纯JavaJDBC驱动程序连接数据库
(1)加载驱动程序
在JDBC中,通常有两种加载驱动程序的方式。
一种是将驱动程序添加到java.lang.System的属性jdc.drivers中。
这是一个由DriverManager类加载驱动程序类名的列表,用冒号分隔。
在JDBC的java.sql.DrvierManager类初始化时,JVM的系统属性中搜索jdbc.drivers字段的内容。
如果存在以冒号分隔的驱动程序名称,则DriverManager类加载相应的驱动程序。
另一种方式是在程序中利用Class.forName()方法加载指定的驱动程序,如:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
需要注意的是,连接不同的数据库,加载的驱动程序有所不同。
(2)创建指定数据库的URL
要建立与数据库的连接,首先要创建指定数据库的URL。
数据库的URL对象类似网络资源的统一定位。
其构成格式如下:
jdbc:
subProtocol:
subName:
//hostname:
port;DatabaseName=XXX
其中:
jdbc表示当前通过Java的数据库连接进行数据库访问。
subProtocal表示通过某种驱动程序支持的数据库连接机制。
subName表示在当前连接机制下的具体名称。
hostName表示主机名。
port表示相应的连接端口。
DatabaseName是要连接的数据库的名称。
按照上述构造规则,可以构造如下类型的数据库URL:
jdbc.microsoft:
sqlserver:
//localhost:
1433;DatabaseName=xsgl
该数据库URL表示利用Microsoft提供的机制,选择名称为sqlserver的驱动,通过1433端口访问本机上的xsgl数据库。
数据的基本操作
数据的基本操作主要是指对数据的查看、添加、修改、删除、查询等操作,利用Java的Statement对象所提供的成员方法,可以方便地实现这些操作。
案例3读取数据
利用Connection对象的createStatement方法建立Statement对象,在利用Statement对象的executeQuery()的方法执行SQL语句进行查询,返回结果集。
再利用形如getXXX()的方法从结果集中读取数据。
【案例说明】
利用上面定义的ConnectServer类建立连接,读取学生档案(xsda)表中的数据,显示在如图4-1所示的窗体中,并且能够前后移动记录。
学习数据库的基本操作方法。
为了方便,案例中的组件采用的都是文本组件。
在实际应用中,也经常使用其他组件。
例如,性别用单选钮。
如果改成单选钮,男和女两个单选钮要建立成组,并根据数据库中读出的数据,设置其选中状态。
读者可参考下一案例。
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.*;
importjava.sql.*;
publicclassStudentDataWindowextendsJFrameimplementsActionListener
{
Stringtitle[]={"班级:
","学号:
","姓名:
","性别:
","出生日期:
","团员否:
","家庭地址:
","简历:
"};
JTextFieldtxtClassID=newJTextField
(2);
JTextFieldtxtNo=newJTextField
(2);
JTextFieldtxtName=newJTextField(10);
JTextFieldtxtSex=newJTextField(3);
JTextFieldtxtBirthDate=newJTextField(10);
JTextFieldtxtIsMember=newJTextField
(2);
JTextFieldtxtAddress=newJTextField(30);
JTextAreatxtResume=newJTextArea();
JButtonnext=newJButton("下一页");
JButtonprev=newJButton("上一页");
JButtonfirst=newJButton("首页");
JButtonlast=newJButton("尾页");
Statementstmt;
ResultSetrs;
StudentDataWindow()
{
super("学生档案信息查看窗口");
setSize(450,395);
try
{
stmt=ConnectServer.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);//创建Statment对象,指定记录集可滚动,但只读
rs=stmt.executeQuery("select*fromxsda");//执行查询,返回结果集
Containercon=getContentPane();
con.setLayout(newBorderLayout(0,8));
JPanelp[]=newJPanel[7];
for(inti=0;i<7;i++)
{
p[i]=newJPanel(newFlowLayout(FlowLayout.LEFT,10,0));
p[i].add(newJLabel(title[i]));
}
p[0].add(txtClassID);
p[1].add(txtNo);
p[2].add(txtName);
p[3].add(txtSex);
p[4].add(txtBirthDate);
p[5].add(txtIsMember);
p[6].add(txtAddress);
JPanelp1=newJPanel(newGridLayout(7,1,0,8));
JScrollPanejp=newJScrollPane(txtResume,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jp.setPreferredSize(newDimension(380,80));
for(inti=0;i<7;i++)
p1.add(p[i]);
JPanelp2=newJPanel(newFlowLayout(FlowLayout.LEFT,10,0));
p2.add(newJLabel(title[7]));
p2.add(jp);
JPanelp3=newJPanel();
p3.add(prev);
p3.add(next);
p3.add(first);
p3.add(last);
con.add(p1,"North");
con.add(p2,"Center");
con.add(p3,"South");
next.addActionListener(this);
prev.addActionListener(this);
first.addActionListener(this);
last.addActionListener(this);
rs.first();
loadData();
}catch(Exceptione)
{
e.printStackTrace();
}
setVisible(true);
}
booleanloadData()
{//读结果集中数据,并设置到相应的组件
try
{
txtNo.setText(rs.getString("no"));
txtClassID.setText(rs.getString("classID"));
txtName.setText(rs.getString("name"));
txtSex.setText(rs.getString("sex"));
txtBirthDate.setText(rs.getString("birthDate"));
txtAddress.setText(rs.getString("address"));
txtIsMember.setText(rs.getString("isMember"));
txtResume.setText(rs.getString("resume"));
}catch(SQLExceptione)
{
e.printStackTrace();
returnfalse;
}returntrue;
}
publicvoidactionPerformed(ActionEvente)
{
try
{
if(e.getSource()==next)rs.next();//下一记录
elseif(e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 数据库 编程
![提示](https://static.bdocx.com/images/bang_tan.gif)