Download presentation
Presentation is loading. Please wait.
Published by又愚 国 Modified 7年之前
1
7.1 Java的数据库编程 Java中专门设置了一个java.sql包,定义了很多用来实现SQL功能的类,使用这些类,编程人员就可以很方便地开发数据库前端的应用。 因为SQL是一种直接对数据库进行操作的非过程扫描语言,不适合整个数据库应用程序的前端编程,所以需要其他语言来实现SQL语言的功能以完成对数据库的操作。
2
7.1.1 数据库编程基础知识 (1)Java数据类型与数据表中的字段对应 (2)创建数据源(ODBC) (3)常用的数据库操作SQL语句
3
(1)Java数据类型与数据表中的字段对应
数据库 字符类属性 数值类属性 Access 文本( char 、 String) 数字(int、long、float、double) 其中“字节”只可数字 SQL—Server char 字母占1位 汉字占2位 int 、bigint varchar smallint、tinyint nchar 汉字占1位 float nvarchar numeric Text ntext 保存不定长字符串数据 real
4
char、varchar、text和nchar、nvarchar、ntext辨析
所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度; 而变长字符数据则不会以空格填充; text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
5
后面三种多了个字母“n”,它表示存储的是Unicode数据类型的字符。它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。
nchar、nvarchar的长度是在1到4000之间。 和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。 可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
8
(2)创建数据源 以ACCESS为例—— 任务栏“开始” →设置→控制面板→管理工具 →数据源(ODBC) →系统DSN→添加
→Microsoft Access Driver(*.mdb) →完成 →输入数据源名字→选择→在对话框中找到所需要的数据库→ ( 高级→ 输入用户名→密码) →确定
9
以SQL Server 2000为例—— 先在数据库里建立一个帐户、密码,指定其可以访问的数据库,再点任务栏“开始”按钮→设置→控制面板→管理工具→数据源(ODBC) →系统DSN→添加 → SQL Server →完成 →输入数据源的名称→选择下拉列表中的服务器→下一步 → 点选输入ID和密码的验证 →输入用户名和密码→下一步→(如果正常的话会提示连接成功,否则提示失败) →完成
10
ODBC 数据源管理中的用户DSN和系统DSN有什么区别??
用户DSN是与用户相关的,不同用户建立的DSN相互不可见; 而系统DSN与用户无关,所有用户都可见 ; 用户DSN保存在注册表中的'HKEY_CURRENT_USER\Software\ODBC'项下(不包括ODBC驱动) 系统DSN保存在注册表中的'HKEY_LOCAL_MACHINE\Software\ODBC'项下
11
(3)常用的数据库操作SQL语句 SELECT语句——查询记录 INSERT语句——插入记录 UPDATE语句——更新记录
DELETE语句——删除记录 CREATE语句——创建表
12
语句功能 语法格式 建立数据表 CREATE TABLE 数据表名 (字段名1 数据类型(长度), 字段名2 数据类型(长度),……) 举例:create table student(xh text(9), xm text(8) , cj single(4), nl integer(2)) 建立含有xh、xm、cj、nl 4个字段的student表 添加字段 ALTER TABLE 数据表名 ADD COLUMN 字段名 数据类型(长度) 举例:alter table student add column xb text(2) '在学生表中添加性别字段 删除字段 ALTER TABLE 数据表名 DROP COLUMN 字段名 举例: alter table student drop column nl '将学生表中的年龄字段删除
13
数据查询 SELECT 字段名表 FROM 子句 WHERE 子句 GROUP BY 子句HAVING 子句 ORDER BY 子句 INTO 子句 举例:select xh, xm from student where xb="男" order by xh 从学生表中查询性别为男的学生,显示其学号和姓名并使结果按学号升序排列。 添加记录 INSERT INTO 数据表名(字段名1,字段名2……) VALUES(数据1,数据2……) 举例:insert into student (xh, xm, xb) values(" ", "王小二", "男") 删除记录 DELETE FROM 数据表名 WHERE 条件表达式 举例:delete from student where xb="男" 更新记录 UPDATE 数据表名 SET 新数据值 WHERE 条件表达式 举例:update student set cj=cj+5 where xb="女"
14
7.1.2 JDBC的概念 JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API,由一组用Java语言编写的类和接口组成,可以为多种关系数据库提供统一访问,即用Java实现的数据库接口技术。 辅助Java程序实现数据库功能的配套支持技术通称为JDBC。 JDBC的用途: (1)与数据库建立连接 (2)发送SQL语句 (3)处理结果
15
示例: //与数据库建立连接 Connection con=DriverManager.getConnection(“jdbc:odbc:student”,”user”,”pwd”); //发送SQL语句,从数据库中提取记录 Statement stmt=con.createStatement(); ResultSet rs=stmt.excuteQuery(“select id,name,score from table_student ”); //对读出的记录结果进行处理赋给变量 While (rs.next()){ int sid=rs.getInt(“id”); String sname=rs.getString(“name”); Float scj=rs.getFloat(“score”); }
16
JDBC 和数据库的通信路径 负责与java应用程序通信,向java应用程序提供数据 Java 应用程序 JDBC API
JDBC Driver API 供应商提供的JDBC驱动程序 JDBC/ODBC桥 负责与具体数据环境的连接 ODBC驱动程序 数据库 数据库 JDBC 和数据库的通信路径
17
四类JDBC驱动程序 第一类把JDBC转换成ODBC,靠ODBC驱动程序与数据库通信
第二类其源代码由两部分组成,一部分是java语言代码,另一部分是本地代码,这类驱动程序和一个数据库客户的API通信; 第三类是一个纯Java客户库,它使用一个独立于数据库的协议,把数据库请求传送给一个服务器组件,这个组件把数据库请求转换成指定数据库协议接受的请求; 第四类是一个纯Java库,直接把JDBC请求转换成指定数据库协议接受的请求。 数据库厂商一般都为其数据库提供第三或第四类驱动程序。
18
JDBC-ODBC桥的概念 ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。 ODBC的最大优点是能以统一的方式处理所有的数据库。
19
JDBC-ODBC桥是一个JDBC驱动程序,它通过将JDBC操作转换为ODBC操作来实现JDBC操作。
通过odbc子协议,使用URL打开JDBC连接即可使用桥,建立连接前必须将桥驱动程序类sun.jdbc.odbc.JdbcOdbcDriver添加到名为jdbc.drivers的java,lang.System属性中,或者用代码显示加载: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
20
7.1.3 用JDBC连接数据库 1. 建立数据源 加载Java应用程序所用的数据库的驱动程序。
以JDBC-ODBC桥为例:控制面板→管理工具→数据源(ODBC)→系统DSN→添加→选择后台数据库: SQL server(或MS Access Driver)→ 给出数据源名和服务器名→选择SQL验证方式、输入用户名和密码→选择需要连接的数据库→确定。 例: Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); String url=”jdbc:odbc:student”;
21
2. 建立连接 DriverManager类用来处理驱动程序的调入,并且对新的数据库连接提供支持.
2. 建立连接 DriverManager类用来处理驱动程序的调入,并且对新的数据库连接提供支持. 与数据库建立连接的标准方法是调用方法创建对象: Connection con= DriverManager.getConnection ( String url, String user, String password); 访问数据源的用户名 访问数据源的密码 数据源的位置
22
3. 执行SQL语句 JDBC提供了Statement接口来发送SQL语句,Statement接口的对象由createStatement方法创建; SQL语句发送后返回的结果通常存放在一个ResultSet接口的对象中; ResultSet可以看作一个表,这个表包含由SQL返回的列名和相应的值, ResultSet对象中维持了一个指向当前行的指针,通过一系列getxxx方法检索当前行的各个列,从而显示出来。
23
4. 关闭连接 statement.close(); connection.close();
24
7.1.4 JDBC编程 在Java中用JDBC编程主要是对JDBC API的应用,在JDBC API中对数据库的应用主要是对DriverManager类、 Connection、 Statement 、PreparedStatement和 ResultSet这几个接口的应用。 DriverManager类 是JDBC的管理层,跟踪可用的驱动程序,并在数据库和应用程序之间建立连接。通过调用Class.forName()方法可显示地加载驱动程序,然后自动在DriverManager类中注册。
25
例: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:CardAccess"; Connection conn = DriverManager.getConnection(url,”uid”,”pwd”);
26
Statement接口 Statement对象用于将SQL语句发送到数据库中。 Statement接口提供了三种执行SQL语句的方法: executeQuery(String )——用于执行select语句 executeUpdate(String)——用于执行insert 、update、 delete语句及数据定义语句(如create table) execute()——用于执行返回多个结果集、多个更新等复杂功能。 例: Statement stm= conn. createStatement() ; ResultSet rs=stm.executeQuery(“select * from xs”);
27
PreparedStatement接口 PreparedStatement 代表一个预编译的SQL语句,是从Statement接口继承而来的,与Statement不同之处: (1) PreparedStatement实例包含已编译好的SQL语句,执行速度比Statement快,需要多次执行的SQL语句经常创建为PreparedStatement对象; (2) 包含在PreparedStatement中的SQL语句中可以具有一个或者多个IN参数,SQL语句中的参数先用 ? 号作占位符. 一般Statement用于SELECT语句,PreparedStatement用于UPDATE语句,ResultSet用于SELECT的结果集。
28
例:ResultSet rs=stm.executeQuery(“select xh,xm,nl from tb”);
ResultSet包含符合SQL语句中条件的所有行,并通过一套get方法访问当前行中的不同列。 ResultSet.next()方法用于移动到记录集中的下一行,并使下一行成为当前行。 列是从左到右编号的,从列1开始。用getXXX方法输入列名时不区分大小写。 例:ResultSet rs=stm.executeQuery(“select xh,xm,nl from tb”); String no= rs.getString(“xh”); String name= rs.getString(“xm”); int age= rs.getInt(3);
29
用JDBC-ODBC 连接数据库示例 import java.sql.*; public class TestJDBC {
public static void main(String args[]) Statement stm; ResultSet rs; Connection conn; PreparedStatement sql2,sql3; String url = "jdbc:odbc:CardAccess"; String user=" "; String password=" "; try {// 使用jdbc与odbc桥创建数据库连接 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 使用getConnection()方法建立连接,第2个参数定义用户名,第3个参数定义密码 conn = DriverManager.getConnection(url,user,password); stm=conn.createStatement();
30
sql2= conn.prepareStatement(“update STUDENT set 性别=‘男’
where 姓名='Jane'"); sql3= conn.prepareStatement(“insert into STUDENT(学号,姓名, 性别) values('1006','Alice','男')"); sql2.executeUpdate(); //执行更新 // sql3.executeUpdate(); //执行插入 String sql1="select * from STUDENT"; rs=stm.executeQuery(sql1); //得到查询结果并打印数据库原始记录 System.out.print("学号 "); System.out.print("姓名 "); System.out.println("性别"); while(rs.next()){ System.out.print(rs.getLong(1)+" | "); System.out.print(rs.getString(2)+" | "); System.out.println(rs.getString(3)); }
31
rs.close(); stm.close(); conn.close(); } catch(SQLException sqle) { System.out.println(1+sqle.toString()); catch(Exception e) System.out.println(2+e.toString());
Similar presentations