2013-12-10 50 views
1

我想做一个简单的JSP片段来执行对oracle数据库的查询并显示结果。查询可以是任何选择,删除,更改,更新等。我需要帮助制作一个通用代码来显示查询结果和错误。如何在JSP中显示oracle(10g)查询结果?

这是我迄今编码:

<%@ page language="java" import="java.sql.*" %> 
<%@page import="oracle.jdbc.driver.*" %> 
<%@page import="oracle.sql.*;" %> 

<% 

Connection conn = null; 
Statement stmt = null; 
ResultSet rset = null; 

try { 
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); 
    conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.22:1521:orcl", 
             "test", "testpass"); 
    stmt = conn.createStatement(); 

    String que = request.getParameter("q"); 
    rset = stmt.executeQuery (que); 

} catch (SQLException e) { 
    out.println("<P> SQL error: <PRE> " + e + " </PRE> </P>\n"); 
} finally { 
    if (rset!= null) rset.close(); 
    if (stmt!= null) stmt.close(); 
    if (conn!= null) conn.close(); 
} 

%> 

我的问题是:

  1. 怎么能当我执行类似的查询“,选择我自动显示所有列和行* FROM EMP ”。
  2. 如何检查删除/更新查询是否正常工作。
  3. 如何使用JSP查看和更改Oracle触发器。

回答

1

1.使用ResuletSetMetaData

Class.forName("oracle.jdbc.driver.OracleDriver"); 
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/XE","scott","tiger"); 
Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery("SELECT * FROM emp"); 
if(rs.next()){ 
    // print column names 
    ResultSetMetaData rsmd = rs.getMetaData(); 
    int columnCount = rsmd.getColumnCount(); 
    for(int i=1; i<= columnCount; i++) 
     System.out.print(rsmd.getColumnName(i) + "\t"); 
    System.out.println(); 
    // print rows 
    do { 
     for(int i=1; i<=columnCount; i++) 
      System.out.print(rs.getString(i) + "\t"); 
     System.out.println(); 
    } while(rs.next()); 
} 
conn.close(); 

2.Statement的方法executeUpdate()返回受影响的行为INT。

3(a)。创建触发器

Class.forName("oracle.jdbc.driver.OracleDriver"); 
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/XE","scott","tiger"); 
Statement stmt = conn.createStatement(); 
stmt.executeUpdate("CREATE OR REPLACE TRIGGER yourtrigger BEFORE DELETE ON emp FOR EACH ROW BEGIN dbms_output.put_line('row deleted..'); END;");   
conn.close(); 

3(b)。查看触发器

Class.forName("oracle.jdbc.driver.OracleDriver"); 
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/XE","scott","tiger"); 
Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery("select text from user_source where name = 'YOURTRIGGER'"); 
if(rs.next()) 
    System.out.println(rs.getString(1)); 
conn.close(); 
+0

谢谢,请您简单介绍一下第三点?示例代码将非常有帮助。 – ITFreak

+0

完美。非常感谢。 – ITFreak