JDBC入门

JDBC技术

JAVA程序连接数据库的两种方式:

1.JDBC-ODBC桥接方式:使用ODBC提供的数据库连接技术访问数据库,在开发中此方法肯定不用,因为性能较低,可移植性不好。

2.JDBC驱动链接:由各数据库生产厂家提供驱动程序。

 

首先,简单说明一下JDBC-ODBC桥接方式的使用。建立好数据库和表后,要配置ODBC数据源,数据源名称是程序中真正使用的名称,ODBC通过一个数据源名称来访问数据库。

JDBC-ODBC的驱动由SUN提供:sun.jdbc.odbc.JdbcOdbcDriver

连接的URL固定:jdbc:odbc:数据源名称

 

我们主要需要掌握并应用的是JDBC连接数据库的方式。

JDBC操作步骤:

1.       加载驱动程序:

Class.forName("数据库驱动程序")      //由数据库厂商提供

驱动程序放在tomcatlib文件夹下

2.       连接数据库

Connection conn = DriverManager.getConnection("数据库连接地址","用户名","密码")

3.       操作数据库,使用StatementPreparedStatement

4.       关闭数据库

Oracle10g为例:

Oracle驱动程序名称:oracle.jdbc.driver.OracleDriver

Oracle的连接地址:jdbc:oracle:thin:@localhost:1521:全局数据库名

 

MySQL为例:

MySQL驱动程序名称:com.mysql.jdbc.Driver

MySQL的连接地址:jdbc:mysql://localhost:3306/数据库名

 

另外,使用Statement对象执行SQL语句有两种方法

stmt.executeUpdate(sql)INSERT,DELETE,UPDATE

stmt.executeQuery(sql)SELECT使用,返回ResultSet实例化对象

 

所有的数据库连接在操作完之后必须关闭,释放资源,关闭顺序为:

ResultSet  Statement  Connection

 

连接Oracle10g范例:

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>

<%--

       使用JDBC连接Oracle数据库

       使用TESTDB数据库

       用户名:imti

       密码:123456

--%>

<%

       String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

       String DBURL = "jdbc:oracle:thin:@localhost:1521:TESTDB" ;

       String DBUSER = "imti" ;

       String DBPASSWORD = "123456" ;

       Connection conn = null ;

       Statement stmt = null ;

%>

<%

       try

       {

              Class.forName(DBDRIVER) ;

              conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

              stmt = conn.createStatement() ;

              out.println("数据库连接成功");

              stmt.close() ;

              conn.close() ;

       }

       catch(Exception e)

       {

              out.println(e) ;

       }

%>

 

连接MySQL范例:

<%@page contentType="text/html;charset=gb2312" import="java.sql.*"%>

<HTML>

       <HEAD>

              <TITLE>JDBC连接</TITLE>

       </HEAD>

       <BODY>

       <%--

              使用JDBC连接MySQL数据库

              数据库名:test

              用户名:niexin

              密码:niexin

       --%>

       <%

              String DBDRIVER = "com.mysql.jdbc.Driver" ;

              String DBURL = "jdbc:mysql://localhost:3306/test" ;

              String DBUSER = "niexin" ;

              String DBPASSWORD = "niexin" ;

              Connection conn = null ;

              Statement stmt = null ;

       %>

       <%

              try

              {

                     Class.forName(DBDRIVER) ;

                     conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

                     stmt = conn.createStatement() ;

                     out.println("数据库连接成功");

                     stmt.close() ;

                     conn.close() ;

              }

              catch(Exception e)

              {

                     out.println(e) ;

              }

       %>

       </BODY>

</HTML>

 

上例的运行可以成功连接上数据库,但对于SELECTSQL语句,要使用ResultSet处理查询数据库结果。

// 查询返回的结果集对象

           ResultSet rs = null ;

stmt = conn.createStatement() ;

              // 编写查询的SQL语句

              sql = "SELECT sno,sname,ssex,sage,sdept FROM student" ;

              // 查询数据库,此方法返回ResultSet对象

              rs = stmt.executeQuery(sql) ;

              while(rs.next())

              {

                     String no = rs. getString (1) ;

                     String name = rs.getString(2) ;

                     String sex = rs.getString(3) ;

                     int age = rs.getInt(4) ;

            String dept = rs.getString(5) ;

        }

使用getXXX()方法可以得到不同类型的结果值,参数可以是字段名或编号

查询记录

范例:查询表中的记录并使用表格来处理显示结果。

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>

<%--

       使用JDBC连接Oracle数据库

       使用TESTDB数据库

       用户名:imti

       密码:123456

--%>

<%

       String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

       String DBURL = "jdbc:oracle:thin:@localhost:1521:TESTDB" ;

       String DBUSER = "imti" ;

       String DBPASSWORD = "123456" ;

       Connection conn = null ;

       Statement stmt = null ;

       ResultSet rs = null ;

       String sql = null ;

%>

<%

       try

       {

              Class.forName(DBDRIVER) ;

              conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

              stmt = conn.createStatement() ;

              sql = "SELECT sno,sname,ssex,sage,sdept FROM student" ;

              rs = stmt.executeQuery(sql) ;

%>

<table border="1" width="80%">

       <tr>

              <td>学号</td>

              <td>姓名</td>

              <td>性别</td>

              <td>年龄</td>

              <td>院系</td>

       </tr>

<%

              while(rs.next())

              {

            String no = rs. getString (1) ;

                     String name = rs.getString(2) ;

                     String sex = rs.getString(3) ;

                     int age = rs.getInt(4) ;

            String dept = rs.getString(5) ;

 

%>

                     <tr>

                            <td><%=no%></td>

                            <td><%=name%></td>

                            <td><%=sex%></td>

                            <td><%=age%></td>

                            <td><%=dept%></td>

                     </tr>

<%

              }

%>

       </table>

 

    <%

              rs.close() ;

              stmt.close() ;

              conn.close() ;

       }

       catch(Exception e)

       {

              out.println(e) ;

       }

%>

添加记录

范例:用户填写表单,提交数据存入数据库

<form action="index.jsp" method="post">

学号<input type="text" name="no"><br>

姓名:<input type="text" name="name"><br>

性别<input type="text" name="sex"><br>

年龄:<input type="text" name="age"><br>

院系<input type="text" name="dept"><br>

<input type="submit" value="增加">

</form>

 

index.jsp

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>

<%--

       使用JDBC连接Oracle数据库

       使用TESTDB数据库

       用户名:imti

       密码:123456

--%>

<%

       String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

       String DBURL = "jdbc:oracle:thin:@localhost:1521:TESTDB" ;

       String DBUSER = "imti" ;

       String DBPASSWORD = "123456" ;

       Connection conn = null ;

       Statement stmt = null ;

       ResultSet rs = null ;

       String sql = null ;

%>

<%  // 接收表单参数

       // 处理乱码

       request.setCharacterEncoding("gb2312") ;

       String no = request.getParameter("no") ;

       String name = request.getParameter("name") ;

       String sex = request.getParameter("sex") ;

       String age = request.getParameter("age") ;

       String dept = request.getParameter("dept") ;

       int iage = Integer.parseInt(age) ;

 

       try

       {

              Class.forName(DBDRIVER) ;

              conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

              stmt = conn.createStatement() ;

              sql = "INSERT INTO student VALUES ('"+no+"','"+name+"','"+sex+"',"+iage+",'"+dept+"')" ;

              System.out.println(sql) ;

              stmt.executeUpdate(sql) ;

              stmt.close() ;

              conn.close() ;

       }

       catch(Exception e)

       {

              out.println(e) ;

       }

%>

删除记录

范例:用户输入想删除的记录,执行删除

<form action="index.jsp" method="post">

学号<input type="text" name="no"><br>

<input type="submit" value="删除">

</form>

 

index.jsp

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>

<%--

       使用JDBC连接Oracle数据库

       使用TESTDB数据库

       用户名:imti

       密码:123456

--%>

<%

       String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

       String DBURL = "jdbc:oracle:thin:@localhost:1521:TESTDB" ;

       String DBUSER = "imti" ;

       String DBPASSWORD = "123456" ;

       Connection conn = null ;

       Statement stmt = null ;

       ResultSet rs = null ;

       String sql = null ;

%>

<% 

       String no = request.getParameter("no") ;

       try

       {

              Class.forName(DBDRIVER) ;

              conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

              stmt = conn.createStatement() ;

              sql = "DELETE FROM student WHERE sno='"+no+"'" ;

              System.out.println(sql) ;

              stmt.executeUpdate(sql) ;

              stmt.close() ;

              conn.close() ;

       }

       catch(Exception e)

       {

              out.println(e) ;

       }

%>

修改记录

范例:用户输入想修改的学生信息。

<form action="index.jsp" method="post">

学号<input type="text" name="no"><br>

院系<input type="text" name="dept"><br>

<input type="submit" value="修改">

</form>

 

index.jsp

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>

<%--

       使用JDBC连接Oracle数据库

       使用TESTDB数据库

       用户名:imti

       密码:123456

--%>

<%

       String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

       String DBURL = "jdbc:oracle:thin:@localhost:1521:TESTDB" ;

       String DBUSER = "imti" ;

       String DBPASSWORD = "123456" ;

       Connection conn = null ;

       Statement stmt = null ;

       ResultSet rs = null ;

       String sql = null ;

%>

<% 

    request.setCharacterEncoding("gb2312") ;

       String no = request.getParameter("no") ;

       String dept = request.getParameter("dept") ;

       try

       {

              Class.forName(DBDRIVER) ;

              conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

              stmt = conn.createStatement() ;

              sql = "UPDATE student SET sdept='"+dept+"' WHERE sno='"+no+"'" ;

              System.out.println(sql) ;

              stmt.executeUpdate(sql) ;

              stmt.close() ;

              conn.close() ;

       }

       catch(Exception e)

       {

              out.println(e) ;

       }

%>

批处理操作

可以让一个Statement同时处理多个SQL语句

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import="java.sql.*"%>

<%--

       使用JDBC连接Oracle数据库

       使用TESTDB数据库

       用户名:imti

       密码:123456

--%>

<%

       String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

       String DBURL = "jdbc:oracle:thin:@localhost:1521:TESTDB" ;

       String DBUSER = "imti" ;

       String DBPASSWORD = "123456" ;

       Connection conn = null ;

       Statement stmt = null ;

%>

<% 

       try

       {

              Class.forName(DBDRIVER) ;

              conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

              stmt = conn.createStatement() ;

              // 取消自动提交

              conn.setAutoCommit(false) ;

              stmt.addBatch("INSERT INTO student VALUES ('9909129','王五','',18,'信息工程')") ;

              stmt.addBatch("INSERT INTO student VALUES ('9909120','李斯','',18,'信息工程')") ;

              stmt.addBatch("INSERT INTO student VALUES ('9909122','王莽','',18,'信息工程')") ;

              // 执行批处理语句

              stmt.executeBatch() ;

              // 提交事务,真正向数据库中插入数据

              conn.commit() ;

              stmt.close() ;

              conn.close() ;

       }

       catch(Exception e)

       {

              // 将数据库回滚

              try

              {

                     conn.rollback() ;

              }

              catch(Exception e1)

              {}

              out.println("操作数据库失败!!!") ;

       }

%>

登录案例

登录页面login.jsp

<%@page contentType="text/html;charset=gb2312"%>

<html>

<head>

       <title>登陆</title>

</head>

<body>

<center>

       <h1>登陆范例</h1>

       <hr>

       <br>

       <br>

       <form action="login_conf.jsp" method="post">

       <table>

              <tr>

                     <td colspan="2">用户登陆</td>

              </tr>

              <tr>

                     <td>用户名:</td>

                     <td><input type="text" name="uname"></td>

              </tr>

              <tr>

                     <td>&nbsp;&nbsp;码:</td>

                     <td><input type="password" name="upassword"></td>

              </tr>

              <tr>

                     <td colspan="2">

                     <input type="submit" value="登陆">

                     <input type="reset" value="重置">

                     </td>

              </tr>

       </table>

       </form>

</center>

</body>

</html>

登录验证页login_conf(Statement).jsp

<%@ page contentType="text/html;charset=gb2312"%>

<%-- 导入java.sql包,表示要使用数据库操作 --%>

<%@ page import="java.sql.*"%>

<html>

<head>

       <title>登陆</title>

</head>

<body>

<center>

       <h1>登陆范例</h1>

       <hr>

       <br>

       <br>

       <%

              // 接收请求的内容

              String name = request.getParameter("uname") ;

              String password = request.getParameter("upassword") ;

              // 定义变量,如果用户是合法用户,则将此标记变为true

              boolean flag = false ;

       %>

       <%

              // 定义数据库操作的常量、对象

              // 数据库驱动程序

              final String DBDRIVER  = "oracle.jdbc.driver.OracleDriver" ;

              // 数据库连接地址

              final String DBURL        = "jdbc:oracle:thin:@localhost:1521:TESTDB" ;

              // 数据库用户名

              final String DBUSER             = "imti" ;

              // 数据库连接密码

              final String DBPASSWORD   = "123456" ;

              // 声明一个数据库连接对象

              Connection conn                  = null ;

              // 声明一个数据库操作对象

              Statement stmt                     = null ;

              // 声明一个结果集对象

              ResultSet rs                  = null ;

              // 声明一个SQL变量,用于保存SQL语句

              String sql = null ;

       %>

       <%

              // 进行数据库操作

              try

              {

                     // 加载驱动程序

                     Class.forName(DBDRIVER) ;

                     // 连接数据库

                     conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

                     // 实例化数据库操作对象

                     stmt = conn.createStatement() ;

                     // 编写SQL语句

                     sql = "SELECT name FROM person WHERE id='"+name+"' and password='"+password+"'" ;

                     System.out.println(sql) ;

                     // 查询记录

                     rs = stmt.executeQuery(sql) ;

                     // 判断是否有记录

                     if(rs.next())

                     {

                            // 如果有记录,则执行此段代码

                            // 用户是合法的,可以登陆

                            flag = true ;

                     }

                     // 依次关闭

                     rs.close() ;

                     stmt.close() ;

                     conn.close() ;

              }

              catch(Exception e)

              {}

       %>

       <%

              // 判断用户名及密码

              if(flag)          

              {

                     // 合法用户

       %>

                     <jsp:forward page="login_success.jsp"/>

       <%

              }

              else

              {

                     // 非法用户

       %>

                     <jsp:forward page="login_failure.jsp"/>

       <%

              }

       %>

</center>

</body>

</html>

 

注意,forward属于服务器端跳转,forward之后的代码不再被执行

 

以上代码是基于Statement编写,存在安全漏洞,因为这时SQL语句是拼凑出来的

SELECT name FROM person WHERE id='sss' and password='www'or'x'='x'

如果输入为www'or'x'='x,则会拼凑出合法的SQL

 

在实际开发中应该使用PreparedStatement

login_conf(PreparedStatement).jsp

<%@ page contentType="text/html;charset=gb2312"%>

<%-- 导入java.sql包,表示要使用数据库操作 --%>

<%@ page import="java.sql.*"%>

<html>

<head>

       <title>登陆</title>

</head>

<body>

<center>

       <h1>登陆范例</h1>

       <hr>

       <br>

       <br>

       <%

              // 接收请求的内容

              String name = request.getParameter("uname") ;

              String password = request.getParameter("upassword") ;

              // 定义变量,如果用户是合法用户,则将此标记变为true

              boolean flag = false ;

       %>

       <%

              // 定义数据库操作的常量、对象

              // 数据库驱动程序

              final String DBDRIVER  = "oracle.jdbc.driver.OracleDriver" ;

              // 数据库连接地址

              final String DBURL        = "jdbc:oracle:thin:@localhost:1521:TESTDB" ;

              // 数据库用户名

              final String DBUSER             = "imti" ;

              // 数据库连接密码

              final String DBPASSWORD   = "123456" ;

              // 声明一个数据库连接对象

              Connection conn                  = null ;

              // 声明一个数据库操作对象

              PreparedStatement pstmt       = null ;

              // 声明一个结果集对象

              ResultSet rs                  = null ;

              // 声明一个SQL变量,用于保存SQL语句

              String sql = null ;

       %>

       <%

              // 进行数据库操作

              try

              {

                     // 编写SQL语句

                     sql = "SELECT name FROM person WHERE id=? and password=?" ;

                     // 加载驱动程序

                     Class.forName(DBDRIVER) ;

                     // 连接数据库

                     conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

                     // 实例化数据库操作对象

                     pstmt = conn.prepareStatement(sql) ;

                     // 设置pstmt的内容

                     pstmt.setString(1,name) ;

                     pstmt.setString(2,password) ;

                     // 查询记录

                     rs = pstmt.executeQuery() ;

                     // 判断是否有记录

                     if(rs.next())

                     {

                            // 如果有记录,则执行此段代码

                            // 用户是合法的,可以登陆

                            flag = true ;

                     }

                     // 依次关闭

                     rs.close() ;

                     pstmt.close() ;

                     conn.close() ;

              }

              catch(Exception e)

              {}

       %>

       <%

              // 判断用户名及密码

              if(flag)          

              {

                     // 合法用户

       %>

                     <jsp:forward page="login_success.jsp"/>

       <%

              }

              else

              {

                     // 非法用户

       %>

                     <jsp:forward page="login_failure.jsp"/>

       <%

              }

       %>

</center>

</body>

</html>

login_success.jsp

<%@page contentType="text/html;charset=gb2312"%>

<html>

<head>

       <title>登陆</title>

</head>

<body>

<center>

       <h1>登陆范例</h1>

       <hr>

       <br>

       <br>

       <h2>登陆成功</h2>

       <h3>欢迎<font color="red" size="15">

              <%=request.getParameter("uname")%>

       </font>光临!!!</h3>

</center>

</body>

</html>

login_failure.jsp

<%@page contentType="text/html;charset=gb2312"%>

<html>

<head>

       <title>登陆</title>

</head>

<body>

<center>

       <h1>登陆范例</h1>

       <hr>

       <br>

       <br>

       <h2>登陆失败</h2>

       <h3>错误的用户名及密码!!!</h3>

       <a href="login.jsp">重新登陆</a>

</center>

</body>

</html>

经过以上的讲解,我们应该掌握了JDBC使用的基本技术,在以后的项目开发环境中,PreparedStatement应该成为我们的规范化的执行语句标准。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值