电子商务系统建设与管理.ppt
jdbc数据库访问,对外经济贸易大学信息学院,内容,JDBC概述JDBC环境常用访问数据库类介绍,Jdbc概述,JDBC(Java DataBase Connectivity)是Java访问数据库的一种技术标准,许多数据库厂商为其数据库提供了JDBC驱动程序,这使得开发者可以编写几乎完全不依赖数据库的代码。JDBC可以帮助开发者建立与数据库的连接、发送 SQL语句给数据库去执行和获取处理数据库执行结构做进一步的处理。另外,JavaSoft 和 Intersolv 已开发了一种称为 JDBC-ODBC Bridge 的产品,可使得开发者可以连接还没有直接提供的JDBC驱动程序的数据库。,JDBC环境,数据库服务器数据库管理工具JDBC驱动程序,1、Mysql数据库Server安装,如果应用程序需要访问数据库,那么需要安装数据库服务器。下载适合的数据库(比如Oracle,MicroSoft SQL Server, MySql等)服务器并安装.比如MySql,数据库服务器版本为5.XXX,安装比较简单,执行Setup安装程序按照提示安装即可。安装为windows服务 缺省管理员为root,记住自己设置的口令,2 、JDBC驱动程序准备,使用JDBC访问MySql数据库,需要下载对应的数据库厂商提供自己的数据库JDBC驱动程序如mysql为 mysql-connector-java-5.1.16-bin.jar,3 MySql客户端访问工具,为操作数据库方便,安装图形化的MySql客户端访问工具(SQLYog),通过该工具可以以图形界面的方式管理MySql数据库Server。可以使用它创建数据表,进行数据表的增加、删除、修改和查询等操作。,当前操作的数据库,当前操作的数据库test,user表的数据,数据表test,这个区域可输入各种sql语句进行执行执行结果在下面的区域查看,执行sql语句的按钮,数据操作各种按钮,user表数据列表选项卡,4 Mysql客户端访问工具的使用,一般事先做好以下工作,然后使用程序去操作数据表1 )创建数据库 2)创建数据表3)在表里面准备些数据另外,经常使用该工具查看程序执行后,数据表里面的数据是否如预料那样变化,常用访问数据库类,import java.io.*;import java.util.*;import java.sql.*; /jdbc下表中列出常用的和访问操作数据库相关的类。,一般步骤,确认驱动程序名,加载 jdbc-odbc 桥驱动程序 String driverName = com.mysql.jdbc.Driver; Class.forName(driverName);2 定义JDBC URL URL 语法可能因数据库类型的不同而变化极大,一般步骤续:Mysql连接数据库URL,String userName = root; /密码 String userPasswd = ; /数据库名 String dbName = test; /连接字符串 String url = jdbc:mysql:/localhost:3306/ + dbName + user= +userName + ,一般步骤(续),/得到与数据库的连接 Connection con = DriverManager.getConnection(url);/显示URL和连接信息(可选,为调试用) System.out.println(URL: + url); System.out.println(Connection: + con);/得到一个Statement对象 stmt = con.createStatement();执行相应的SQL语句(更新或者查询) stmt.executeUpdate(DROP TABLE DemoTable); stmt.executeUpdate(INSERT INTO DemoTable ( + test_id, test_val) VALUES(1,一); ResultSet rs = stmt.executeQuery(SELECT * from DemoTable ORDER BY test_id);,一般步骤(续),7 显示表中的所有记录(如果是查询) while (rs.next( ) ) int theInt = rs.getInt(test_id); String str = rs.getString(test_val); System.out.println(ttest_id= + theInt + tstr = + str);,1 Class类,使用JDBC驱动程序之前,必须先将驱动程序加载Class.forName(String driver); Class.forName(com.mysql.jdbc.Driver); /加载了MySql的JDBC驱动程序。,2 DriverManager类,DriverManager类管理JDBC驱动程序。使用JDBC驱动程序之前,必须先将驱动程序加载(Class.forName方法)并向DriverManager注册后才可以使用,它同时提供方法来建立与数据库的连接。静态方法getConnection返回一个连接,基于该连接可以访问数据库。该方法定义如下。 Static Connection getConnection(String url,String user,String password) 其中特别注意url参数的语法,URL 语法可能因数据库类型的不同而变化极大。url的语法格式是:jdbc:subprotocol:subname其中第一组字符代表连接协议,并且始终是 jdbc。还可能有一个子协议,在此处,子协议被指定为 odbc。它规定了一类数据库的连通性机制。如果要连接其它机器上的数据库服务器,可能也要指定该机器和一个子目录: jdbc:bankServer/doggie/elliott 最后,可能要指定用户名和口令,作为连接字符串的一部分: jdbc: bankServer /doggie/elliot;UID=sa;PWD=admin 下面给出一个获取连接的例子: String url = jdbc:odbc:accessdb; Connection con = DriverManager.getConnection(url);注意上面使用的accessdb是在windows操作系统下 ODBC 设置面板中配置的数据源名称。,3 Connection,Connection负责维护数据库程序和数据库之间的连接。可以建立Statement和PreparedStatement类对象执行sql语句。常用的方法有: (1)建立Statement类对象 Statement createStatement( )(2)建立PreparedStatement类对象 PreparedStatement prepareStatement(String sql) 其他:commit, rollback void close()关闭数据库的连接 一旦连接到数据库,就可以请求表名以及表列的名称和内容等信息,而且可以运行 SQL 语句来查询数据库或者添加或修改其内容。,4 Statement类,(1)ResultSet executeQuery(String sql) /使用SELECT命令对数据库进行查询 (2)int executeUpdate(String sql) /使用INSERTDELETEUPDATE对数据库进行新增、删除和修改操作。 (3)void close() throws SQLException /结束Statement类对象对数据库的连接,5 PreparedStatement类1,它和Statement类的不同之处在于PreparedStatement 类对象会将传入的SQL命令事先编好等待使用,当有单一的SQL指令要多次执行时,用PreparedStatement类会比Statement类有效率。,PreparedStatement类2,6 ResultSet 类,ResultSet 类是 JDBC 中最重要的类之一,它负责存储查询数据库的结果.可以通过Statement 对象或者PreparedStatement对象的查询方法执行获取记录集。ResultSet类提供一系列的方法对数据库进行新增、删除和修改操作。也负责维护一个记录指针(Cursor),记录指针指向数据表中的某个记录,通过适当的移动记录指针,可以随心所欲的存取数据库,加强程序的效率。 有时候,在使用 ResultSet 之前,需要知道它包含多少个列。此信息存储在 ResultSetMetaData 对象中,getMetaData方法可以得到该对象,ResultSet 类方法,常用方法如下: boolean absolute(int row) throws SQLException /移动记录指针到指定的记录 void beforeFirst() throws SQLException /移动记录指针到第一笔记录之前 void afterLast() throws SQLException /移动记录指针到最后一笔记录之后 boolean first() throws SQLException /移动记录指针到第一笔记录 boolean last() throws SQLException /移动记录指针到最后一笔记录 boolean next() throws SQLException /移动记录指针到下一笔记录 boolean previous() throws SQLException /移动记录指针到上一笔记录 void deleteRow() throws SQLException /删除记录指针指向的记录 void moveToInsertRow() throws SQLException /移动记录指针以新增一笔记录 void moveToCurrentRow() throws SQLException /移动记录指针到被记忆的记录 void insertRow() throws SQLException /新增一笔记录到数据库中 void updateRow() throws SQLException /修改数据库中的一笔记录 void update类型(int columnIndex,类型 x) throws SQLException /修改指定字段的值 其中类型可以是Java数据类型,和数据库字段相关。类型 get类型(int columnIndex) throws SQLException /取得指定字段的值 ResultSetMetaData getMetaData() throws SQLException /取得ResultSetMetaData类对象,ResultSet常用方法,boolean next() throws SQLException /移动记录指针到下一笔记录返回类型 get类型(String 列名)返回类型 get类型(int columnIndex) throws SQLException /取得指定字段的值 int theInt = rs.getInt(test_id); String str = rs.getString(test_val);int theInt = rs.getInt(1); String str = rs.getString(2);,ResultSetMetaData类,该类的对象保存了所有ResultSet类对象中关于字段的信息,提供许多方法来取得这些信息。 int getColumnCount() throws SQLException 取得ResultSet类对象的字段个数 int getColumnDisplaySize() throws SQLException 取得ResultSet类对象的字段长度 String getColumnName(int column) throws SQLException 取得ResultSet类对象的字段名称 String getColumnTypeName(int column) throws SQLException 取得ResultSet类对象的字段类型名称 String getTableName(int column) throws SQLException 取得ResultSet类对象的字段所属数据表的名称 boolean isCaseSensitive(int column) throws SQLException 测试ResultSet类对象的字段是否区分大小写 boolean isReadOnly(int column) throws SQLException 测试ResultSet类对象的字段是否为只读,回顾SQL语句的语法,CREATE TABLE DemoTable (test_id int , test_val char(15) not null)DROP TABLE DemoTableINSERT INTO DemoTable1(test_id, test_val) VALUES(1,面向对象)UPDATE DemoTable1 SET test_val =数据结构1 WHERE test_id = 1;SELECT * from DemoTable ORDER BY test_id 在程序中都是通过变量和常量的字符串连接形成这些语句的,JDBC 连接访问数据库,例1,演示如何使用各种类例2,演示独立的DAO访问类,可提供数据访问能力,/ test 数据库下user数据表,id,pwd,address,sdate字段、/ 字段分别为varchar,varchar,varchar,Date类型,代表用户标识,口令,地址,注册日期/ 注册日期由系统自动产生,使用用户注册时的系统服务器的当前时间/ user表记录用户注册的基本信息,建表sql语句如下/CREATE TABLE test.user( id VARCHAR(16) NOT NULL , pwd VARCHAR(16) , address VARCHAR(64) , sdate DATE , PRIMARY KEY (id) );,下载右侧ppt中的jdbc驱动程序,点击下载右侧的例子代码例子1代码 firstJDBCDemo.java例子2代码 jdbcDaoDemo.javaUser.javaUserDAO.java,