一:访问数据库
首先介绍一下基本的概念:
DBC的英文全称是 Java Database Connectivity 。
JDBC的主要作用是 连接Java程序和数据库的纽带 。
为什么需要JDBC :JDBC是Java数据库连接技术的简称,向Java应用程序提供连接各种常用数据库的能力
(1)JDBC API
提供者:sun公司
内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:
1.DriverManager类 2. Connection接口
3.Statement接口 4.ResultSet接口
(2)DriverManager
提供者:sun公司
作用:载入各种不同的JDBC驱动
(3)JDBC 驱动
提供者:数据库厂商
作用:负责连接各种不同的数据库
JDBC API
JDBC API可做三件事:与数据库建立连接、执行SQL 语句、处理结果
JDBC API中类和接口的作用:
DriverManager :依据数据库的不同,管理JDBC驱动
Connection :负责连接数据库并担任传送数据的任务
Statement :由 Connection 产生、负责执行SQL语句
ResultSet:负责保存Statement执行后所产生的查询结果
JDBC API: 主要位于java.sql包中
Driver接口和DriverManager类:驱动器,驱动管理器
Connection 接口:数据库连接
Statement 接口:负责执行sql语句
PreparedStatement接口:负责执行预准备的sql语句
ResultSet接口:表示sql查询语句返回的结果集
再进行上面类和各接口的详解:
1.Driver接口和DriverManager类
所有的JDBC驱动器都必须实现Driver接口,在编写访问数据库的java程序时,比较把驱动器包括进来。
DriverManager类用来建立和数据库的连接及管理JDBC驱动器
getConnection(String url,String user,String pwd):
建立和数据库的连接,并返回表示数据库连接的connection对象
2. Connection 接口
createStatement():创建并返回Statement对象
prepareStatement(String sql):创建并返回PreparedStatement对象
3. Statement接口
execute(String sql):执行各种SQL语句。
executeUpdate(String sql):执行SQL的insert,update,delete语句
executeQuery(String sql):执行SQL的select语句,返回一个表示查询结果的ResultSet对象,
4.PreparedStatement接口
继承了Statement接口 ,用来执行预准备的SQL语句,数据库只需对这种SQL语句编译一次,然后就可以多次执行。
con.prepareStatement()生成对象。
setXXX()方法,给参数负值
try {Class.forName(JDBC驱动类);
} catch (ClassNotFoundException e) {System.out.println("无法找到驱动类");
}
try {Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码);Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");while (rs.next()) {int x = rs.getInt("a");String s = rs.getString("b");float f = rs.getFloat("c");}con.close();
} catch (SQLException e) {e.printStackTrace();
}
try {Class.forName(JDBC驱动类);
} catch (ClassNotFoundException e) {System.out.println("无法找到驱动类");
}
try {Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码);String sql = "SELECT userid,name FROM tuser WHERE
userid=? AND password=?" ;PreparedStatement pstmt = conn.prepareStatement(sql) ;pstmt.setString(1, rid) ;pstmt.setString(2,pass) ;rs = pstmt.executeQuery() ;
while (rs.next()) {int x = rs.getInt("a");String s = rs.getString("b");float f = rs.getFloat("c");}con.close();
5.ResultSet接口
表示select查询语句得到的结果集。
next()方法:定位到结果集中的下一条记录。
JDBC驱动 5-1
JDBC驱动由数据库厂商提供
在个人开发与测试中,可以使用JDBC-ODBC桥连方式
在生产型开发中,推荐使用纯Java驱动方式
JDBC驱动 5-2
桥连
将对JDBC API的调用,转换为对另一组数据库连接API的调用
优点:可以访问所有ODBC可以访问的数据库
缺点:执行效率低、功能不够强大
JDBC驱动 5-4
纯Java驱动
由JDBC驱动直接访问数据库
优点:100% Java,快又可跨平台
缺点:访问不同的数据库需要下载专用的JDBC驱动
JDBC驱动 5-5
使用纯Java驱动方式进行直连
1、下载数据库厂商提供的驱动程序包
2、将驱动程序包引入工程中
3、编写代码,通过纯Java驱动方式与数据库建立连接
------语法------Class.forName(“com.mysql.jdbc.Driver”); //数据库名称String url="jdbc:mysql://localhost:3306/usesql?user=root&password=admin";
Connection conn=DriverManager.getConnection(url);
注意:
在使用纯Java驱动方式进行数据库连接时,如果程序在运行时抛出异常:
java.sql.SQLException: No suitable driverfound for jdbc:sqlserver://localhost:1433;DatabaseName=news
那么出错的原因是
找不到合适的驱动类,原因:没有把数据库驱动包引入工程
最后:编写访问数据库程序的步骤
(1)获得要访问数据库的类库,把它放到classpath中。
(2)在程序中加载并注册JDBC驱动器
class.forName(“com.mysql.jdbc.Driver”);
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
实验一:
实验内容:
1)创建数据库及表格存放用户名和密码
2)开发静态网页文件login.htm,用于输入用户名和密码
3)开发check.jsp文件,用于连接数据库实现用户名密码验证
4)验证成功转入success.jsp显示登陆成熟,否则转入failure.jsp显示 check.jsp
<%&#64; page import&#61;"java.sql.*"%>
<%!public static final String DBDRIVER &#61; "com.mysql.jdbc.Driver" ;public static final String DBURL &#61; "jdbc:mysql://localhost:3306/logindemo1?user&#61;root&password&#61;123456" ;%>
<%Connection conn &#61; null ;PreparedStatement pstmt &#61; null ;ResultSet rs &#61; null ;boolean flag &#61; false ; // 表示登陆成功或失败的标记
%>
<%String userid &#61; request.getParameter("userid") ; // 接收表单参数String password &#61; request.getParameter("password") ; // 接收表单参数try{Class.forName(DBDRIVER) ;conn &#61; DriverManager.getConnection(DBURL) ;String sql &#61; "SELECT userid,name FROM tuser WHERE userid&#61;? AND password&#61;?" ;pstmt &#61; conn.prepareStatement(sql) ;pstmt.setString(1,userid) ;pstmt.setString(2,password) ;rs &#61; pstmt.executeQuery() ;if(rs.next()){// 如果有内容&#xff0c;则此处执行&#xff0c;表示查询出来&#xff0c;合法用户flag &#61; true ;}}catch(Exception e){}finally{try{conn.close() ; // 连接一关闭&#xff0c;所有的操作都将关闭}catch(Exception e){}}
%>
<%if(flag){ // 登陆成功&#xff0c;应该跳转到success.jsp
%>
<%}else{ // 登陆失败&#xff0c;跳转到failure.jsp
%>
<%}
%>
login.html
success.jsp
<%&#64; page contentType&#61;"text/html;charset&#61;GBK"%>
登陆成功&#xff0c;欢迎光临&#xff01;
failure.jsp
<%&#64; page contentType&#61;"text/html;charset&#61;GBK"%>
登陆失败&#xff0c;请重新登陆&#xff01;
还是顺着老师的课件复习吧&#xff01;&#xff01;