java11Java与数据库的连接_第1页
java11Java与数据库的连接_第2页
java11Java与数据库的连接_第3页
java11Java与数据库的连接_第4页
java11Java与数据库的连接_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第十章Java与数据库的连接是否熟悉一种数据库系统?Access、Oracle、Sybase、SQLServer、MySQL是否熟悉SQL语言?2课前思考一、

关系数据库的基本概念数据以记录(Record)和字段(Field)的形式存储在数据表(Table)中数据表是关系数据库的一种基本数据结构若干个数据表构成一个数据库

310.1数据库基础知识例:4结构化查询语言(SQL)数据定义语言DDL(DataDefinitionLanguage)数据操纵语言DML(DataManipulationLanguage)数据查询语言DQL(DataQueryLanguage)数据控制语言DCL(DataControlLanguage)5二、数据定义语言

(DDL)数据定义语言提供对数据库及其数据表的创建、修改、删除等操作create alterdrop61.创建数据表

CREATETABLE表名(

字段名l数据类型[限制条件], 字段名2数据类型[限制条件],

……, 字段名n数据类型[限制条件] );7

例:

createtablechengjibiao( xh char(10), xm char(20), bj char(20) );82.修改数据表

添加字段的格式:ALTER

TABLE

表名ADD字段名数据类型[限制条件];删除字段格式:ALTER

TABLE

表名DROPCOLUMN字段名9例:

添加一个字段

altertablechengjibiaoaddscoreint

删除一个字段

altertablechengjibiaodropcolumnscore3.删除数据表

DROPTABLE表名;10三、数据操纵语言(DML)数据操纵语言用来维护数据库的内容insertdeleteupdate11数据表中插入数据格式:INSERT

INTO

表名(字段名l,……,字段名n)VALUES(值l,……,值n);例:INSERTINTOchengjibiao(xm,score)VALUES(‘张三’,86);12数据更新语句

格式:UPDATE表名SET字段名l=新值l[,字段名2=新值2……]WHERE

条件;例:UPDATEchengjibiaoSETscore=89WHERExm='张三';13删除记录语句格式:DELETEFROM

表名WHERE

条件;例:DELETEFROMchengjibiaoWHERExm='张三';四、

数据查询语句(DQL)语法格式:SELECT[DISTINCT]字段名l,[字段名2,……]

FROM表名[WHERE条件];例:SELECTxh,bjFROMchengjibiaoWHERExm=“张三”SELECT

*FROMchengjibiao15ODBC(OpenDatabaseConnectivity

)定义:ODBC是一种用来在相关和不相关的DBMS中存取数据的标准应用程序数据接口。ODBC组成:应用程序接口

为数据库应用程序开发者提供了统一的SQL编程接口。数据库驱动器

实现ODBCAPI的函数调用,ODBCAPI是数据库厂商为程序设计者提供的一组直接访问数据库的函数。驱动程序管理器用于为应用程序装载数据库驱动器,为应用程序与数据库之间的操作选择相互匹配的ODBCAPI函数。数据源数据源是数据库位置、数据库类型以及ODBC驱动程序等信息的集成。16

10.2ODBC与JDBC概述JDBC

(JavaDataBaseConnectivity)是用于执行SQL语句的Java应用程序接口,由一组用Java语言编写的类与接口组成,是一种底层API,使得独立于DBMS的Java应用开发工具和产品成为可能使开发人员可以用纯Java语言编写完整的数据库应用程序用JDBC写的程序能够自动地将SQL语句传送给几乎任何一种数据库管理系统(DBMS)隔离了Java与不同数据库之间的对话,使得程序员只须写一遍程序就可让它在任何数据库管理系统平台上运行使用已有的SQL标准,并支持其它数据库连接标准,如与ODBC之间的桥连接1718Java程序通过JDBC访问数据库JDBCAPI中的重要类和接口(java.sql包中)名称解释DriverManager处理驱动的调入并且对产生新的数据库连接提供支持DataSource在JDBC2.0API中被推荐使用代替DriverManager实现和数据库的连接Connection代表对特定数据库的连接Statement代表一个特定的容器,容纳并执行一条SQL语句ResultSet控制执行查询语句得到的结果集19一个基本的JDBC程序开发包含如下步骤:设置环境,引入相应的JDBC类选择合适的JDBC驱动程序并加载分配一个Connection对象分配一个Statement对象用该Statement对象进行查询等操作从返回的ResultSet对象中获取相应的数据关闭Connection2010.3通过JDBC访问数据库JDBC驱动程序分类1.JDBC-ODBC桥驱动

程序

性能低2.相关数据库提供的JDBC驱动程序(本地驱动)

程序

应用于特定的数据库上,性能高,移植性差21JDBCODBC数据库JDBC数据库通过JDBC-ODBC来连接数据库设置ODBC数据源选择“控制面板”→“管理工具”→“ODBC数据源”(某些window/xp系统,需选择“控制面板”→“性能和维护”→“管理工具”→“ODBC数据源”)。双击ODBC数据源图标,出现的界面显示了用户已有的数据源的名称。选择“系统DSN”或“用户DSN”,单击“添加”按钮,可以创建新的数据源;单击“配置”按钮,可以重新配置已有的数据源;单击“删除”按钮,可以删除已有的数据源。22加载驱动JDBC-ODBC驱动器try{

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

}catch(ClassNotFoundExceptione){}

注:“sun.jdbc.odbc.JdbcOdbcDriver”是驱动器类的名字以完整的Java类名为参数,装载此类,并返回一个Class对象,同时,自动创建一个驱动器类的实例,并自动调用驱动器管理器DriverManager类中的RegisterDriver方法来注册它23建立与数据库的连接Connectioncon=DriverManager.getConnection("jdbc:odbc:PMS","test","1234");将返回与指定数据库建立的连接该方法有三个字符串参数第一个是JDBCURL,格式为jdbc:子协议:子名称jdbc表示协议,JDBCURL中的协议总是jdbc;子协议是驱动器名称;子名称是数据源的名称,如果是位于远程服务器上的数据库,则还应该包括网络地址,//主机名:端口/数据库名第二个是访问数据库所需的用户名(未设置可以为空)第三个是用户密码(未设置可以为空)Connection是一个接口,表示与指定数据库的连接24对数据库进行操作使用Connection对象创建Statement对象使用Statement对象执行SQL命令从上一步骤返回的ResultSet对象中提取执行结果25Connection接口有3个方法可用来创建向数据库发送SQL语句的对象createStatement创建向数据库发送SQL语句的Statement对象,用于简单的SQL语句Statementst=con.createStatement();prepareStatement创建向数据库发送SQL语句的PreparedStatement对象,用于带有一个或多个参数的SQL语句。在SQL语句执行前这些参数将被赋值prepareCall创建向数据库发送SQL语句的CallableStatement对象,用于调用数据库中的存储过程26Statement接口提供了三种执行SQL语句的方法,使用哪一个方法由SQL语句所产生的内容决定

1.executeQuery用于产生单个结果集的语句,例如SELECT语句

ResultSetrs=st.executeQuery("Select*FromPerson");2.executeUpdate用于执行INSERT、UPDATE或DELETE语句,以及CREATETABLE

st.executeUpdate("DELETEFROMPersonWHEREName='李四'");返回值是一个整数,表示受影响的行数(即更新计数)3.execute用于执行返回多个结果集(ResultSet对象)、多个更新计数或二者组合的语句。例如执行某个已存储过程或动态执行SQL,这时有可能出现多个结果的情况27查询结果作为结果集(ResultSet)对象返回后,可以从ResultSet对象中提取结果使用next方法ResultSet对象中含有检索出来的行,其中有一个指示器,指向当前可操作的行,初始状态下指示器是指向第一行之前方法next的功能是将指示器下移一行,所以第一次调用next方法时便将指示器指向第一行,以后每一次对next的成功调用都会将指示器移向下一行28使用getXXX方法使用相应类型的getXXX方法可以从表中当前行指定列提取不同类型的数据。getIntgetLonggetBytegetFloatgetDoublegetString允许使用列名或列序号作为getXXX方法的参数Strings=rs.getString("Name");Strings=rs.getString(2);2930

有关ResultSet对象定位指示器的方法

成员方法

功能booleanabsolute(introw)指示器指向row指定的行voidafterLast()指示器指向最后一行的后面voidbeforeFirst()指示器指向第一行的前面booleanfirst()指示器指向第一行booleanlast()指示器指向最后一行booleanisAfterLast()判断指示器是否在最后一行之后booleanisBeforeFirst()判指示器是否在行第一行的前面booleanisfirst()判指示器是否在行第一行booleanisLast()判断指示器是否在最后一行booleannext()将指示器指向从当前位下移一行booleanprevious()将指示器指向从当前位上移一行31例

java与Access数据库的连接应用1.创建Access数据库的数据源,如test(程序中使用)2.在数据源中选择要使用的数据库,如test.mdb3.建立java程序,对库中的表进行操作

SqlDemo.java例:importjava.sql.*;importjava.io.*;publicclassSqlDemo2{publicstaticvoidmain(String[]args)throwsException{

Stringurl=“jdbc:odbc:test”;//test指在ODBC上声明的数据源名字Stringsqlstr,no,name,teacher,cname,type,place,time;Connectioncon;//连接类

Statementstmt;//SQL语句执行类

ResultSetrs=null;//结果集类

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);//加载驱动

con=DriverManager.getConnection(url,"","");//建立数据库连接

stmt=con.createStatement();//创建SQL语句执行类

sqlstr="selectcount(*)fromcourse";//course为表名

rs=stmt.executeQuery(sqlstr);//使用executeQuery()方法执行SQL命令

sqlstr="select*fromcourse";//获得数据库的所有记录

rs=stmt.executeQuery(sqlstr);3233

System.out.println(“课程号课程名称任课老师上课地点上课时间");

while(rs.next())//使用next()方法游历数据库的每条记录

{

no=rs.getString(1);name=rs.getString(2);teacher=rs.getString(3);place=rs.getString(4);time=rs.getString(6);System.out.printf("%3s",no);System.out.printf("%-6s",name);System.out.printf("%-6s",teacher);System.out.printf("%-10s",place);System.out.printf("%s\n",time);}rs.close();//关闭结果集stmt.close();//关闭SQL语句执行类con.close();//关闭数据库连接类}}34例

Insert.javaSortResult.java

综合实例——出版物管理相关数据库提供的JDBC驱动程序(本地驱动)不同的数据库厂商都提供了JDBC驱动程序以sql2000为例:(1)下载sql2000的jdbc驱动程序(2)加载驱动程序

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");353610.4MySql数据库一、mysql数据库简介

MySQL数据库为瑞典MySQLAB开发的小型关系数据库,2008年被sun公司收购,网址:

目前ODBC不支持MySQL数据库,因此不能用JDBC-ODBC桥连接方式,只能使用加载MySQL的纯java驱动程序来建立连接(1)安装、配置Mysql(另见独立课件)后转入DOS状态(2)启动:netstartmysql(3)连接:mysql-u用户名-p密码……

关闭:netstopmysql37二、JDBC操作步骤381.配置mysql数据库的驱动程序

将mysql数据库的驱动程序配置到CLASSPATH假定驱动程序保存在d:\mysql-connector-java-5.0.4-bin.jar392.加载驱动程序

不同数据库的驱动程序是不一样的,mysql的驱动程序采用“包.类”名称的形式,打开mysql-connector-java-5.0.4-bin.jar即可发现,其驱动路径为\org.git.mm.mysql.Driver

包名类名

4041运行java程序前,需在mysql>下做好以下准备:创建数据库

CREATEDATABASEtest;打开数据库

USEtest;建立user表(可将脚本复制运行)运行java程序在mysql>下查看结果

SELECT*fromuser;4243示例:importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectionDemo{

//定义MySQL的数据库驱动程序

publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver";

//定义MySQL数据库的连接地址

publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/test";

//MySQL数据库的连接用户名

publicstaticfinalStringDBUSER="root";

//MySQL数据库的连接密码publicstaticfinalStringDBPASS="mysqladmin";publicstaticvoidmain(Stringargs[]){ Connectionconn=null; //数据库连接

//主机名:端口/数据库名44try{Class.forName(DBDRIVER); //加载驱动程序

}catch(ClassNotFoundExceptione){ e.printStackTrace();}try{conn=

DriverManager.getConnection(DBURL,DBUSER,DBPASS);}catch(SQLExceptione){ e.printStackTrace();}System.out.println(conn); //如果此时可以打印表示连接正常

try{conn.close(); //数据库关闭}catch(SQLExceptione){e.printStackTrace();}}}45importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassInsertDemo{publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/test";publicstaticfinalStringDBUSER="root";publicstaticfinalStringDBPASS="mysqladmin";publicstaticvoidmain(Stringargs[])throwsException{ //所有的异常抛出

Connectionconn=null; //数据库连接

Statementstmt=null; //数据库操作

Class.forName(DBDRIVER); //加载驱动程序Stringsql="INSERTINTOuser(name,password,age,sex,birthday)"+ “VALUES(‘张三',‘aaaa',30,'男','2012-08-20')";conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);stmt=conn.createStatement(); //实例化Statement对象

stmt.executeUpdate(sql); //执行数据库更新操作

stmt.close(); //关闭操作conn.close(); //数据库关闭}};插入记录46importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.Statement;publicclassDeleteDemo{publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/test";publicstaticfinalStringDBUSER="root";publicstaticfinalStringDBPASS="mysqladmin";publicstaticvoidmain(Stringargs[])throwsException{ //所有的异常抛出

Connectionconn=null; //数据库连接

Statementstmt=null; //数据库操作intid=2;Class.forName(DBDRIVER); //加载驱动程序

Stringsql=“DELETEFROMuserWHEREid=”+id;//删除

conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);stmt=conn.createStatement(); //实例化Statement对象stmt.executeUpdate(sql); //执行数据库更新操作stmt.close(); //关闭操作conn.close(); //数据库关闭}}删除记录47importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.sql.Statement;importjava.sql.ResultSet;publicclassResultSetDemo01{publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver";publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/test";publicstaticfinalStringDBUSER="root";publicstaticfinalStringDBPASS="mysqladmin";publicstaticvoidmain(Stringargs[])throwsException{

Connectionconn=null; //数据库连接

Statementstmt=null; //数据库的操作对象

ResultSetrs=null; //保存查询结果Stringsql="SELECT*FROMuser";Class.forName(DBDRIVER); //加载驱动程序

conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);stmt=conn.createStatement();

48rs=stmt.executeQuery(sql);

while(rs.next()){ //依次取出数据intid=rs.getInt("id"); //取出id列的内容

Stringname=rs.getString("name"); //取出name列的内容

Stringpassword=rs.getString("password");//取出password列的内容

intage=rs.getInt("age"); //取出age列的内容

Stringsex=rs.getString("sex"); //取出sex列的内容

java.util.Dated=rs.getDate("birthday");//取出birthday列的内容

System.out.print("编号:"+id+";");System.out.print("姓名:"+name+";");System.out.print("密码:"+password+";");System.out.print("年龄:"+age+";");System.out.print("性别:"+sex+";");System.out.println("生日:"+d+";");System.out.println("-----------------------");

}rs.close();stmt.close(); conn.close(); //数据库关闭}}49上例循环内容可简化如下:while(rs.next()){ //依次取出数据

intid=rs.getInt(1); //取出id列的内容Stringname=rs.getString(2); //取出name列的内容

Stringpassword=rs.getString(3);//取出password列的内容

intage=rs.getInt(4); //取出age列的内容

Stringsex=rs.getString(5); //取出sex列的内容

java.util.Dated=rs.getDate(6);//取出birthday列的内容

System.out.print("编号:"+id+";"); System.out.print("姓名:"+name+";"); System.out.print("密码:"+password+";"); System.out.print("年龄:"+age+";"); System.out.print("性别:"+sex+";"); System.out.println("生日:"+d+";"); System.out.println("-----------------------");}首先在SQLServer2000中手工建立一个数据库bookstore,所有参数均取默认值,然后编写Java程序在此数据库中建立一个表books,并实现对books表的管理,表包含的字段如下:12.5SQLServer2000数据库应用功能要求:能够实现建表、删除表、删除全部记录、删除指定记录、修改指定记录的内容、插入新记录和根据字段值插入记录等功能。程序实现:importjava.sql.*;publicclassDBTableManager{//主类,用于表的管理

privatestaticfinalStringDRIVER_NAME="com.microsoft.jdbc.sqlserver.SQLServerDriver";privatestaticfinalStringURL="jdbc:microsoft:sqlserver://localhost:1433;User=sa;Password=sa;DatabaseName=bookstore";publicvoidupdate(intid,Stringname,floatprice,Stringauth){//修改记录

try{//?表示占位符,运行时将会被指定参数替换Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");Connectionconn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;user=sa;passWord=sa;DatabaseName=bookstore");Stringupdate="UpdatebookssetbookName=?,bookPrice=?,bookauthor=?wherebookId=?";PreparedStatementpstm=conn.prepareStatement(update);pstm.setString(1,name);//第1个参数,表示bookNamepstm.setFloat(2,price);//第2个参数,表示bookPricepstm.setString(3,auth);//第3个参数,表示authorpstm.setInt(4,id);//第4个参数,表示bookIDpstm.executeUpdate();//执行更新操作

pstm.close();conn.close();}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}}publicvoidselectId(intid){//根据id号查询输出指定记录

try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");Connectionconn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;user=sa;password=sa;DatabaseName=bookstore");Stringsql="select*frombookswherebookId=?";PreparedStatementpstm=conn.prepareStatement(sql);pstm.setInt(1,id);//替换第1个占位符,表示bookIDResultSetsr=pstm.executeQuery();//建立结果集

while(sr.next()){//逐一读出各记录的列,并存贮在变量中

inti=sr.getInt("bookId");Stringname=sr.getString("bookName");intprice=sr.getInt("bookPrice");Stringauth=sr.getString("bookauthor");System.out.printf("%8d\t%8s\t%8d\t%8s\r\n",i,name,price,auth);}}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(SQLExceptione){e.printStackTrace();}}publicvoidselect(){//查询输出表记录

try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");Connectionconn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;user=sa;password=sa;DatabaseName=bookstore");Stringselect="select*frombooks";PreparedStatementptsm=conn.prepareStatement(select);ResultSetrs=ptsm.executeQuery();//记录器

while(rs.next()){intid=rs.getInt("bookId");Stringname=rs.getString("bookName");intprice=rs.getInt("bookPrice");Stringauth=rs.getString("author");System.out

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论