描述 |
问题描述 详细描述问题的状况,字数在800以内。 |
Slide 1:
Slide 2:
Slide 3:
Slide 4:
Slide 5:
Slide 6:
Slide 7: 1、桥接器提供通过JDBC API存取ODBC的接口,而每个本地(client)端的数据库必须要装载ODBC。利用此桥接器,能与以ODBC(存取微软数据库共通接口)为资料来源的数据库相连接。因为安装上程序繁琐,所以现行的应用程序很少使用此驱动方式。
2、 JDBC通过调用数据库端的应用程序及通过ODBC与数据库连接。此种方式与桥接器作法类似。
3、利用数据库制造商所提供的DBMS协议(Data Base Management System-Protocol)编写JDBC应用程序,而数据库制造商也必须将JDBC技术附加于该数据库中。
4、
Slide 8:
Slide 9: 下图来表示应用程序
Slide 10: 由数据库连接到查询结果大致可分为三个阶段:数据库驱动含连接、SQL语句产生、查询结果。
Slide 11:
Slide 12:
Slide 13:
Slide 14:
Slide 15:
Slide 16:
Slide 17:
Slide 18: 补充资料
Slide 19:
Slide 20:
Slide 21:
Slide 22:
Slide 23:
Slide 24:
Slide 25:
Slide 26:
Slide 27:
Slide 28:
Slide 29:
Slide 30:
Slide 31:
Slide 32:
Slide 33:
Slide 34:
Slide 35:
Slide 36:
Slide 37:
Slide 38:
Slide 39:
Slide 1: Java与数据库
Slide 2: 课程内容
MySQL数据库简介
SQL语句
JDBC简介
主要JDBC类
工作步骤:
实例
Slide 3: SQL语句(1)
(1)SELECT[ALL|DISTINCT|DISTINCTROW|TOP]
{*|talbe.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}
FROM tableexpression[,…][IN externaldatabase]
[WHERE…]
(2)更新查询语法:
UPDATE 表名
SET新值
WHERE 准则
(3)DELETE子句的语法:
DELETE [表名.*]
FROM来源表
WHERE 准则
(4)INSERT子句的语法:
INSETR INTO目的表或查询(字段1,字段2,…)
valueS(数值1,数值2,…)
Slide 4: SQL语句(2)
(5)建立第一个表
create table 表名(字段名);
(6)删除表
drop table 表名;
Slide 5: JDBC简介(1)
•JDBC(JAVA DataBase Connectivity)主要的功能是
作为连接数据库与JAVA应用程序的接口
(interface)。
•JDBC的出现,让应用程序在转换数据库上作最
简单的修改(只需一行代码),再加上JAVA的跨平
台机制,使得数据库资间也有了共通的接口。
•JDBC在应用程序与数据库之间的关系,可以利用下图来
说明:
Slide 6: JDBC在应用程序与数据库之间的关系
Slide 7: JDBC简介(2)
• JDBC驱动程序依连接方式不同可分为以
下四类:
1.JDBC-ODBC桥接器驱动程序
2.采用部分JAVA代码所编写的驱动程序
3.JAVA网络协议驱动程序(Net-protocol fully
Java technology-enabled Driver):
4.Java原始协议驱动程序(Native-protocol
fully Java technology-enabled Driver):
JDBC直接使用DBMS协议连接数据库。
各数据库制造商依据JAVA数据库存取协
议提供相对应的驱动程序。
Slide 8: 连接数据库
• 由数据库连接到查询结果大致可分为三个阶段:
数据库驱动含连接、SQL语句产生、查询结果。
在资料取得的过程中,每个阶段皆使用相对的
方法产生下一个阶段的对象,直到最后取得资
料结果。这样的流程就像程序式中的程序编写
一样,步骤指令与步骤指令之间环环相扣,只
是现在把每个步骤指令作成对象,步骤之间再
利用对象所属方法产生下一个步骤的对象。
Slide 9: 主要JDBC类(1)
• Driver类:用来与数据库通信的软件.
• DriverManager类:是JDBC基础,用来管理和卸
载JDBC驱动程序.该类有一个getConnection()
方法,用于验证JDBC数据源,并返回Connection
对象.
• Connection类:该类的CreateStatement()方法连
接JDBC数据源,返回Statement对象.
Slide 10: 主要JDBC类(2)
• Statement类:将SQL行为封装起来交给数据库
引擎,调用该类的execute()等方法,执行SQL语句,
返回resultSet对象.
• ResultSet类:封装了一个由SQL查询返回的结果.
该类的getString(),getInt()等方法获得一栏数据
的存取,next()方法到下一行.
Slide 11: 工作步骤:
(1)加载JDBC Driver:
Class.forName(驱动程序名称字符串); //加载驱动程序
驱动程序名称字符串的格式如下:
jdbc:subprotocol name:other stuff
注:
• 子协议名称(subprotocol name):选择数据库所使用
的驱动程序。以本章所使用驱动程序其名称为:
"acs.jdbc.Driver"。
• 其他要素(other stuff):依DBMS厂商所提供的驱动
程序说明而定。
Slide 12: • //加载驱动程序
• public class TestDriver{
•
•
•
•
•
•
"+strDriver);
•
•
•
•
•
•
•
• }
}
catch(Exception e){
}
}
System.out.println("驱动程序加载失败");
public static void main(String[] args){
//驱动程序类名称
String strDriver=" com.mysql.jdbc.Driver ";
try{
System.out.println("加载驱动程序...");
System.out.println("驱动程序字符串:
Class.forName(strDriver);
System.out.println("驱动程序加载成功");
Slide 13: 工作步骤:
(2)建立与数据库连接:
Connection可以建立应用程序与数据库的链接,语法如下:
• Connection conDatabase=null;
• conDatabase=DriverManager.getConnection(URL字符串);
建立conDatabase对象
JDBC的URL语法如下:
Jdbc:数据库厂商(驱动程序)名称:数据库主机地址:输出入端口:
数据库文件完整路径名称
"jdbc:mysql:localhost:3306:/hotel";
//声明一个Connection接口
//
Slide 14: • import java.sql.*;
• public class ConnectDB{
•
•
•
•
•
•
"+strDriver);
•
•
•
•
•
•
•
public static void main(String[] args){
//加载驱动程序
String strDriver="com.mysql.jdbc.Driver";
try{
System.out.println("加载驱动程序...");
System.out.println("驱动程序字符串:
Class.forName(strDriver);
}catch(Exception e){
}
System.out.println("驱动程序加载成功");
System.out.println("驱动程序加载失败");
e.printStackTrace();
Slide 15: • //连接数据库
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Connection conDatabase=null;
String strURL="jdbc:mysql://localhost:3306/hotel";
try{
System.out.println("连接数据库...");
System.out.println("数据库URL:"+strURL);
conDatabase=DriverManager.getConnection(strURL,”root”,”123”);
System.out.println("数据库连接成功");
}catch(SQLException e){
if(conDatabase!=null){
try{conDatabase.close();
}catch(SQLException e2){
e2.printStackTrace();}
}
System.out.println("数据库连接失败");
e.printStackTrace();
return;
}}}
Slide 16: 工作步骤:
(3)读取表:
a.数据库连接后,接着要打开表(table),开起表时需要先建立Statement对
象,方法如下:
• Statement dbState=null;
//产生一个空的Statement参考变量。
• dbState=conDatabase.createStatement();
createStatement方法建立对象。
//利用Connention对象的
b.通过这个对象执行SQL指令才能打开表,方法如下:
• dbState.execute(SQL语句); //通过execute方法执行SQL指令。
c.当Statement对象执行完SQL指令后,还需要ResultSet对象来存放表的
资料。方法如下:
• ResultSet dbRS=null;
dbRS=dbState.getResultSet();
//产生一个空的ResultSet参考变量。
//利用Statement对象的
getResultSet()方法建立对象。
Slide 17: •
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
//加载驱动程序
//连接数据库
//读取表
Statement dbState=null;
ResultSet dbRS=null;
try{
dbState=conDatabase.createStatement();
dbState.execute(“select * from hotel“);
dbRS=dbState.getResultSet();
System.out.println("表读取成功");
}catch(SQLException e){
System.out.println("表读取失败");
e.printStackTrace();
}
}
}
Slide 18: 实例(1)
//筛选表及显示资料内容
•
import java.sql.*;
•
•
•
public class CH12_04{
public static void main(String[] args){
//加载数据库驱动程序
• String strDriver="acs.jdbc.Driver";
•
•
•
•
try{
Class.forName(strDriver);
}catch(Exception e){
败");
•
}
System.out.println("驱动程序加载失
Slide 19: •
•
•
•
•
•
•
•
•
•
•
•
•
•
//数据库连接
strURL="jdbc:atinav:localhost:7227:C:\\ADDRESS.mdb";
try{
Connection conDatabase=null;
String
conDatabase=DriverManager.getConnection(strURL);
}catch(SQLException e){
if(conDatabase!=null){
e2){e2.printStackTrace();}
}
}
try{conDatabase.close();}
catch(SQLException
System.out.println("数据库连接失败");
e.printStackTrace();
return;
Slide 20: •
•
•
•
•
•
•
•
•
•
•
•
//表加载与表显示
Statement dbState=null;
ResultSet dbRS=null;
ResultSetMetaData接口
try{
ResultSetMetaData dbMD=null;
int intRecCount=0;
//声明Statement接口
//声明ResultSet接口
//声明
dbState=conDatabase.createStatement();
dbState.execute("Select * From ZipCode");
dbRS=dbState.getResultSet();
dbMD=dbRS.getMetaData();
//表区域名称
System.out.print(dbMD.getColumnName(i)+'\t');
System.out.print('\n');
for(int i=2;i<=6;i++)
Slide 21: •
•
•
•
•
•
•
•
•
•
•
•
•
//打印表内容5笔
intRecCount++<=5){
while(dbRS.next() &&
for(int j=2;j<=6;j++){
System.out.print(dbRS.getString(j)+'\t');
}
System.out.print('\n');
}
}catch(SQLException e){
System.out.println("表读取失败");
e.printStackTrace();
}
}
}
?接下来再以此示例改用另外一种写法,让资料查询
依照所自定义的SQL字符串筛选。
Slide 22: 实例(2)
//添加资料至表内
• import java.sql.*;
• public class CH12_06{
•
•
•
•
•
•
•
•
•
SQLException,Exception{
public static void main(String[] args) throws
//加载数据库驱动程序
String strDriver="acs.jdbc.Driver";
Class.forName(strDriver);
//数据库连接
strURL="jdbc:atinav:localhost:7227:C:\\ADDRESS.mdb";
Connection conDatabase=null;
String
conDatabase=DriverManager.getConnection(strURL);
Slide 23: •
•
•
•
•
•
•
//表加载与表显示
Statement dbState=null;
ResultSet dbRS=null;
ResultSetMetaData接口
try{
• //添加资料
•
ResultSetMetaData dbMD=null;
int intRecCount=0;
//声明Statement接口
//声明ResultSet接口
//声明
ZipCode(City,Area) Values('纽约市','JAVA区')");
• //查询及打印资料
•
•
•
Where City='纽约市' and Area='JAVA区'");
dbState=conDatabase.createStatement();
dbState.executeUpdate("Insert Into
dbState.execute("Select * From ZipCode
dbRS=dbState.getResultSet();
dbMD=dbRS.getMetaData();
Slide 24: •
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
• }
//表区域名称
for(int i=2;i<=6;i++)
System.out.print(dbMD.getColumnName(i)+'\t');
System.out.print('\n');
//打印表内容5笔
intRecCount++<=5){
while(dbRS.next() &&
for(int j=2;j<=6;j++)
System.out.print(dbRS.getString(j)+'\t');
}
}catch(SQLException e){
System.out.println("表读取失败");
e.printStackTrace();
}finally{
dbState.close();//关闭Statement对象
conDatabase.close();//关闭Connection对象
}
}
System.out.print('\n');
Slide 25: 11.6实例
(1)安装JDBC驱动程序.
(2)设置classpath参数.
(3)编写以下源代码
import java.applet.*;
import java.sql.*;
public class JDBCExample extends Applet{
Connection myconnection;
Statement mystatement;
ResultSet myset;
Slide 26: public void init(){
Class.forname(“xxxxxx”);//驱动程序名
Mycoonection=DriverManager.getConnection(“jdbc:msql://主机
名:端口/库名”);
Mystatement=myconnection.CreateStatement();
……}
Public void stop(){
mystatement.close();
Myconnection.close();}
Slide 27: public void xxxx(….){
Try {
mystatement.execute(„select * from xxx‟);
myset=mystatement.getResultSet();
While(myset.next())
{int xxx1=myset.getInt(„字段1‟) ;
String xxx2=myset.getString(„字段2“);
……
输出结果;}
}
Catch(SQLException e) {……}
}}
Slide 28: import java.applet.*;
import java.sql.*;
public class JDBCExample {
public static void main(String[] args){
Connection myconnection;
Statement mystatement;
ResultSet myset;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcD
river");//驱动程序名
Slide 29: }
catch(java.lang.ClassNotFoundException e) {}
try {
myconnection=DriverManager.getConnectio
n("jdbc:odbc:exa");
mystatement=myconnection.createStatement
();
myset=mystatement.executeQuery("select *
from s006 where g>22");
Slide 30: System.out.println("select * from s006 where
g>22");
while(myset.next())
System.out.println(myset.getString(3));}
catch(java.sql.SQLException e) {}
}
}
Slide 31: import java.applet.*;
import java.sql.*;
public class JDBCExample1 {
public static void main(String[] args){
Connection myconnection;
Statement mystatement;
ResultSet myset;
Slide 32: try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDri
ver");//驱动程序名
}
catch(java.lang.ClassNotFoundException e) {}
try {
myconnection=DriverManager.getConnectio
n("jdbc:odbc:exa");
mystatement=myconnection.createStatement
();
Slide 33: String ss="select * from s006 where
sno="+args[0];
myset=mystatement.executeQuery(ss);
while(myset.next()){
System.out.println("学
号:"+myset.getString(2));
System.out.println("姓
名:"+myset.getString(3));
System.out.println("分
数:"+myset.getString(9)); }
catch(java.sql.SQLException e) {} }}
}
Slide 34: DatabaseMetaData有关整个数据库的信息:表
名、表的索引、数据库产品的名称和版本、数
据库支持的操作。
ResultSetMetaData 有关ResultSet 中列的名称
和类型的信息。
//从元数据中获得列数
ResultSetMetaData rsmd;
rsmd = results.getMetaData();
numCols = rsmd.getColumnCount();
Slide 35: ResultSetMetaData
您使用getMetaData()方法从ResultSet
中获取ResultSetMetaData
对象。您可以使用此对象获得列的数
目和类型以及每一列的名称。
getColumnCount();
返回ResultSet 中的列数。
getColumnName(int);
返回列序号为int 的列名。
Slide 36: DatabaseMetaData
对象可为您提供整个数据库的信息。您
主要用它获取数据库中表的名称,以及表中列
的名称。
getURL(); 获得您所连接的URL名称。
getDriverName(); 获得您所连接的数据库驱动程
序的名称。
getTables()方法来获取数据库中表的信息。
Slide 37: try { rsmd = results.getMetaData();
numCols = rsmd.getColumnCount();
boolean more = results.next();
while (more)
{ for (i = 1; i <= numCols; i++)
System.out.print(results.getString(i)+"
System.out.println();
more = results.next(); }
results.close();}
catch(Exception e)
{System.out.println(e.getMessage());}
");
Slide 38: private void dumpResults(String head)
{ //这是打印列标头和每列的内容的通用方法
System.out.println(head);
try { //从元数据中获取列数
rsmd = results.getMetaData();
numCols = rsmd.getColumnCount();
//打印列名
for (i = 1; i<= numCols; i++)
System.out.print(rsmd.getColumnName(i)+" ");
System.out.println(); //打印列内容
Slide 39: boolean more = results.next();
while (more)
{ for (i = 1; i <= numCols; i++)
System.out.print(results.getString(i)+"
System.out.println();
more = results.next(); } }
catch(Exception e)
{System.out.println(e.getMessage());}}
";
(1人浏览过)
(1人浏览过)