JSP中操作数据库

 

所有数据库操作都要导入包“java.sql.*

数据库操作(包括关闭操作)都会有异常,应该用try…catch语句捕捉。但是在输出异常时,如果是在实际开发中,则一定不要用out.print()语句打印,因为out.print()是输出到页面,具有严重的安全问题。

所有的数据库在操作之后都必须关闭,必须释放资源。关闭数据库操作的顺序与打开的顺序相反。

 

问题:使用Statement需要一个完整的SQL语句,但是如果输入的内容包含“”,会造成数据输入的不正确。

解决:使用Statement的子接口àPreparedStatement

建议在开发中不要使用Statement对象,而且使用PrepareStatement对象操作数据库。

 

如果登录是基于Statement完成,所有的SQL语句是通过拼凑来完成。那么这将存在安全问题:SQL注入漏洞。例如:

SELECT name FROM person WHETE id=’01’ and password=’asdf’ or ‘x’=’x’

如果登录时,用户名输入“01”,密码输入“asdf’ or ‘x’=’x”一样可以进入。

       在开发中基本上都是使用PreparedStatement来操作数据库。

 

注意JDBC2.0中有个“批处理“操作。

“批处理“操作:一定要人工的结合非自动提交一起控制,因为如果批处理中有一条语句错了,就什么都不管了,也不提交,也不回滚。

 

现在的连接方式建议使用纯JDBC的方式连接,即使用数据库厂商提供的驱动程序。

 

加载数据库驱动程序的方法:

1、  Class.forName(DRIVER);

2、  System.setProperty(“jdbc.drivers”,”DRIVER”);

3、  new oracle.jdbc.driver.OracleDriver();      这儿用new创建一个无名的对象,因为我们以后也用不到这个对象。它一样可以注册到我们的DriverManager

注意:“jdbc.drivers”是约定的属性名,”DRIVER”是完整的驱动程序包层次结构。

如果要在一个程序中加载多种数据库驱动,可以用多个Class.forNameDRIVER);

也可以在System.setProperty()中将驱动程序用冒号分开,即System.setProperty(“jdbc.drivers”,”DRIVER1:DRIVER2”);       如果一行显得太长的话,可以用双引号和加号将字符串打断成多行(双引号里的字符串是不能跨行的)。

 

对结果集更新:(但是在真实的开发中并不建议对结果集更新)

用以下两种形式获得ResultSet对象

1、穷举列名,即使是全部列也要这样,不能用“*”代替全部列名。

ResultSet rs = stmt.executeQuery("select tid,name,salary from teacher");

2、如果是全部列名,可以用“表名.*”。

ResultSet rs = stmt.executeQuery("select teacher.* from teacher");

 

数据库操作基本结构:

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

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

<%!

       // 定义数据库驱动程序

       String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;

       // 定义数据库连接地址

       String DBURL = "jdbc:odbc:mldn" ;

 

       // 定义数据库连接对象,属于java.sql包中的接口

       Connection conn = null ;

 

       // 定义Statement对象,用于操作数据库

       Statement stmt = null ;

 

       // 定义一字符串变量,用于保存SQL语句

       String sql = null ;

%>

<%

       // 1、加载驱动程序

       try

       {

              Class.forName(DBDRIVER) ;

       }

       catch(Exception e)

       {

              // 此处使用out.print是处于演示目的,在实际开发中所有的错误消息,绝对不能够通过out.print打印,否则会存在安全问题

              out.println("数据库驱动程序加载失败!!!") ;

       }

 

       // 2、连接数据库

       try

       {

              conn = DriverManager.getConnection(DBURL) ;

       }

       catch(Exception e)

       {

              out.println("数据库连接失败!!!") ;

       }

 

       // 3、操作数据库

       // 通过Connection对象实例化Statement对象

       try

       {

              stmt = conn.createStatement() ;

              // sql变量赋值

              // 插入语句

              sql = "INSERT INTO person (name,password,age) VALUES ('LXH','zzzzzz',28)" ;

              // 更新语句

              // sql = "UPDATE person SET name='李兴华',password='www.mldn.cn' WHERE id=3" ;

              // ID删除记录

              // sql = "DELETE FROM person WHERE id=4" ;

              // 通过Statement对象执行此SQL语句

              stmt.executeUpdate(sql) ;

       }

       catch(Exception e)

       {

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

       }

       // 4、关闭数据库

       try

       {

              // 关闭操作

              stmt.close() ;

              // 关闭连接

              conn.close() ;

       }

       catch(Exception e)

       {

              out.println("数据库关闭失败!!!") ;

       }

%>

 

你可能感兴趣的:(JSP中操作数据库)