jsp中java数据库_JSP中数据库的一些操作
发布日期:2021-06-24 10:43:25 浏览次数:4 分类:技术文章

本文共 14343 字,大约阅读时间需要 47 分钟。

1. JDBC驱动程序的类型  目前比较常见的JDBC驱动程序可分为以下四个种类:

(1)JDBC-ODBC桥加ODBC驱动程序

JavaSoft桥产品利用ODBC驱动程序提供JDBC访问。注意,必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。因此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装不是主要问题),或者是用Java编写的三层结构的应用程序服务器代码。

(2)本地API

这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。注意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。

(3)JDBC网络纯Java驱动程序

这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的JDBC驱动程序。有可能所有这种解决方案的提供者都提供适合于Intranet用的产品。为了使这些产品也支持Internet访问,它们必须处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。几家提供者正将JDBC驱动程序加到他们现有的数据库中间件产品中。

(4)本地协议纯Java驱动程序

这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。由于许多这样的协议都是专用的,因此数据库提供者自己将是主要来源,有几家提供者已在着手做这件事了。

据专家预计第(3)、(4)类驱动程序将成为从JDBC访问数据库的首方法。第(1)、(2)类驱动程序在直接的纯Java驱动程序还没有上市前会作为过渡方案来使用。对第(1)、(2)类驱动程序可能会有一些变种,这些变种要求有连接器,但通常这些是更加不可取的解决方案。第(3)、(4)类驱动程序提供了Java的所有优点,包括自动安装(例如,通过使用JDBC驱动程序的appletapplet来下载该驱动程序)。

2. JDBC编程的步骤

1)第一步:加载驱动程序

//jdbc-odbc驱动

try{

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

}catch(ClassNotFoundException e){

e.printStackTrace();

}

加载其他各种不同驱动程序的方法如下:

//sqlserver

Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);

//mysql

Class.forName(“org.gjt.mm.mysql.Driver”);

//oracle

Class.forName(Oracle.jdbc.driver.OracleDriver);

//Informix

Class.forName(“com.informix.jdbc.IfxDriver”);

//Sybase

Class.forName(“com.sybase.jdbc2.jdbc.SybDriver”);

//AS400

Class.forName(“com.ibm.as400.access.AS400JDBCConnection”);

2)第二步:将“驱动程序”传递到DriverManager,然后获得“连接”。

DriverManager类的getConnection(String rul,String user,String password)方法用于建立与某个数据库的连接。每个JDBC驱动程序使用一个专门的JDBC URL作为自我标识的一种方法。

JDBC URL的格式为:jdbc::,子协议与子名称和JDBC驱动程序有关。

//建立JDBC-ODBC驱动的连接

try{

String url=”jdbc:odbc:myodbc”;

Connection con=DriverManager.getConnection(url);

//或者

//Connection con=DriverManager.getConnection(url,user,password);;

} catch(SQLException e){

e.printStackTrace();

}

以下是连接各种不同的数据库的URL编写方法:

//sqlserver

DriverManger.getConnection(“jdbc:Microsoft:sqlserver://主机:端口号;DatabaseName=数据库名”,”用户名”,”密码”)

//mysql

DriverManger.getConnection(“jdbc:mysql://主机:端口号:数据库名”,”用户名”,”密码”)

//oracle

DriverManger.getConnection(“jdbc:Oracle:thin:@主机:端口号:数据库名”,”用户名”,”密码”)

//Informix

DriverManger.getConnection(“jdbc:informix-sqli://主机:端口号/数据库名:INFORMIXSERVER=informix服务名”,”用户名”,”密码”)

//Sybase

DriverManger.getConnection(“jdbc:sybase:Tds:主机:端口号/数据库名”,”用户名”,””密码)

//AS400

DriverManger.getConnection(“jdbc:as400://主机”,”用户名”,”密码”)

3)第三步:创建语句,Statement、PreparedStatement或CallableStatement,并将它们用于更新数据库或执行查询。

4)第四步:查询并返回包含有已请求数据的ResultSet,该ResuletSet是按类检索的。

5)显示数据或根据得到的查询结果完成业务逻辑处理。

6)第六步:最后关闭ResultSet(结果集)、Statement(语句对象)、Conection(数据库连接)。

3. 数据库各种连接方式实例分析

1)通过ODBC建立与数据库的连接,创建数据源的过程略掉,数据源的名称为myodbc,代码:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page language="java"contentType="text/html; charset=GBK"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page import="java.sql.*"%>4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png通过ODBC建立连接
4f1150b881333f12a311ae9ef34da474.png
4f1150b881333f12a311ae9ef34da474.png
1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png   Connection con=null;

d18c02628675d0a2c816449d98bda930.png        try {

d18c02628675d0a2c816449d98bda930.png//加载ODBC驱动

d18c02628675d0a2c816449d98bda930.png            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

d18c02628675d0a2c816449d98bda930.png//通过驱动管理器(DriverManager)获得连接

d18c02628675d0a2c816449d98bda930.png            con=DriverManager.getConnection("jdbc:odbc:myodbc",

d18c02628675d0a2c816449d98bda930.png"sa","");

d18c02628675d0a2c816449d98bda930.png//如果连接不成功,就会出现异常,不会执行下面这个语句

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.png            out.println("

");

d18c02628675d0a2c816449d98bda930.png            out.println("通过ODBC数据源连接数据库成功!");

d18c02628675d0a2c816449d98bda930.png            out.println("");

d18c02628675d0a2c816449d98bda930.png        } catch (Exception e) {//如果出现异常,会打印堆栈里异常的信息

d18c02628675d0a2c816449d98bda930.png            e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png        } finally {//用完后,关闭连接,释放资源

d18c02628675d0a2c816449d98bda930.png            try {

d18c02628675d0a2c816449d98bda930.pngif(con !=null)//防止出现内存泄露

d18c02628675d0a2c816449d98bda930.png                    con.close();

d18c02628675d0a2c816449d98bda930.png            } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png                e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png            }

d18c02628675d0a2c816449d98bda930.png        }  

8f1ba5b45633e9678d1db480c16cae3f.png%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

2)通过sqlserver提供驱动程序获得连接,需要3个jar文件:msbase.jar、mssqlserver.jar、msutil.jar,设置class环境变量,或者配置到WEB中,jar文件部署,和所有的jar文件一样,想在整个WEB服务器(我指Tomcat)中使用,就拷贝到Tomcat 6.0\lib目录下,若在当前WEB应用中使用,拷贝到WEB应用的WEB-INF\lib目录下。代码:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page language="java"contentType="text/html; charset=GBK"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page import="java.sql.*"%>4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png通过Sqlserver純驱动程序建立连接
4f1150b881333f12a311ae9ef34da474.png
4f1150b881333f12a311ae9ef34da474.png
1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png   Connection con=null;

d18c02628675d0a2c816449d98bda930.png    try {

d18c02628675d0a2c816449d98bda930.png//加载SQLSERVER的驱动程序            

d18c02628675d0a2c816449d98bda930.png        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

d18c02628675d0a2c816449d98bda930.png//通过驱动来获得一个连接

d18c02628675d0a2c816449d98bda930.png        con=DriverManager.getConnection(

d18c02628675d0a2c816449d98bda930.png"jdbc:microsoft:sqlserver://localhost:1433;"d18c02628675d0a2c816449d98bda930.png+"databasename=pubs","sa","");    

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png//如果连接不成功,就会出现异常,不会执行下面这个语句

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png        out.println("

");

d18c02628675d0a2c816449d98bda930.png        out.println("通过SQLServer纯驱动程序连接数据库成功!

 con="+con);

d18c02628675d0a2c816449d98bda930.png        out.println("");

d18c02628675d0a2c816449d98bda930.png    } catch (Exception e) {//如果出现异常,会打印堆栈里异常的信息

d18c02628675d0a2c816449d98bda930.png        e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png    } finally {//用完后,关闭连接,释放资源

d18c02628675d0a2c816449d98bda930.png        try {

d18c02628675d0a2c816449d98bda930.pngif(con !=null)//防止出现内存泄露

d18c02628675d0a2c816449d98bda930.png                con.close();

d18c02628675d0a2c816449d98bda930.png        } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png            e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png        }

d18c02628675d0a2c816449d98bda930.png    }  

8f1ba5b45633e9678d1db480c16cae3f.png%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

3)通过Oracle提供驱动程序获得连接,需要用到一个classes12.jar文件,配置同上。代码:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page language="java"contentType="text/html; charset=GBK"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page import="java.sql.*"%>4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png通过oracle純驱动程序建立连接
4f1150b881333f12a311ae9ef34da474.png
4f1150b881333f12a311ae9ef34da474.png
1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png   Connection con=null;

d18c02628675d0a2c816449d98bda930.png    try {

d18c02628675d0a2c816449d98bda930.png//加载ORACLE9i的驱动程序

d18c02628675d0a2c816449d98bda930.png            Class.forName("oracle.jdbc.driver.OracleDriver");

d18c02628675d0a2c816449d98bda930.png//获得连接 oracle数据库的端口号:1521数据服务器的名字叫ora921

d18c02628675d0a2c816449d98bda930.png//登陆的用户名为system,密码为:itjob (默认密码为manager)

d18c02628675d0a2c816449d98bda930.png            con=DriverManager.getConnection(

d18c02628675d0a2c816449d98bda930.png"jdbc:oracle:thin:@127.0.0.1:1521:ora921", 

d18c02628675d0a2c816449d98bda930.png"system","itjob");    

d18c02628675d0a2c816449d98bda930.png//如果连接不成功,就会出现异常,不会执行下面这个语句        

d18c02628675d0a2c816449d98bda930.png        out.println("

");

d18c02628675d0a2c816449d98bda930.png        out.println("通过ora921纯驱动程序连接数据库成功!

 con="+con);

d18c02628675d0a2c816449d98bda930.png        out.println("");

d18c02628675d0a2c816449d98bda930.png    } catch (Exception e) {//如果出现异常,会打印堆栈里异常的信息

d18c02628675d0a2c816449d98bda930.png        e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png    } finally {//用完后,关闭连接,释放资源

d18c02628675d0a2c816449d98bda930.png        try {

d18c02628675d0a2c816449d98bda930.pngif(con !=null)//防止出现内存泄露

d18c02628675d0a2c816449d98bda930.png                con.close();

d18c02628675d0a2c816449d98bda930.png        } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png            e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png        }

d18c02628675d0a2c816449d98bda930.png    }  

8f1ba5b45633e9678d1db480c16cae3f.png%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4)通过数据库连接池获得连接,连接池将通过连接的重用,降低开销。

以oracle数据库为例,配置Tomcat6.0的连接池。

§将classes12.jar拷到Tomcat 6.0\lib目录下,并修改Tomcat 6.0\conf目录下的context.xml文件,在文件的标记前面加上如下代码:

4f1150b881333f12a311ae9ef34da474.pngWEB-INF/confweb.xml4f1150b881333f12a311ae9ef34da474.pngmaxIdle="30"maxWait="10000"username="scott"password="tiger"driverClassName="oracle.jdbc.driver.OracleDriver"4f1150b881333f12a311ae9ef34da474.pngurl="jdbc:oracle:thin:@127.0.0.1:1521:wzz"/>

保存并重启Tomcat。

§编辑jsp文件pool_connection.jsp,代码如下:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page language="java"contentType="text/html; charset=GBK"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page import="java.sql.*,javax.naming.*,javax.sql.*"%>4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png通过数据库连接池建立连接
4f1150b881333f12a311ae9ef34da474.png
4f1150b881333f12a311ae9ef34da474.png
1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png   Connection con=null;

d18c02628675d0a2c816449d98bda930.png    try {

d18c02628675d0a2c816449d98bda930.png        Context context=newInitialContext();

d18c02628675d0a2c816449d98bda930.png        DataSource ds=(DataSource)context.lookup("java:/comp/env/jdbc/oracleds");

d18c02628675d0a2c816449d98bda930.png        con=ds.getConnection();

d18c02628675d0a2c816449d98bda930.png        out.println("

");

d18c02628675d0a2c816449d98bda930.png        out.println("第一次通过数据库连接池连接数据库成功!

 con="+con);

d18c02628675d0a2c816449d98bda930.png        out.println("");

d18c02628675d0a2c816449d98bda930.png//con.close();

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png        con=ds.getConnection();        

d18c02628675d0a2c816449d98bda930.png        out.println("

");

d18c02628675d0a2c816449d98bda930.png        out.println("第二次通过数据库连接池连接数据库成功!

 con="+con);

d18c02628675d0a2c816449d98bda930.png        out.println("");

d18c02628675d0a2c816449d98bda930.png        con.close();

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png    } catch (Exception e) {//如果出现异常,会打印堆栈里异常的信息

d18c02628675d0a2c816449d98bda930.png        e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png    } 

8f1ba5b45633e9678d1db480c16cae3f.png%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

其中连接数据库的代码:

4f1150b881333f12a311ae9ef34da474.pngContext context =new InitialContext();

4f1150b881333f12a311ae9ef34da474.png        DataSource ds=(DataSource)context.lookup("java:/comp/env/jdbc/oracleds");

4f1150b881333f12a311ae9ef34da474.png        con=ds.getConnection();

可以修改为如下代码:

4f1150b881333f12a311ae9ef34da474.png        Context initContext = new InitialContext();

4f1150b881333f12a311ae9ef34da474.png        Context envContext  = (Context)initContext.lookup("java:/comp/env");

4f1150b881333f12a311ae9ef34da474.png        DataSource ds = (DataSource)envContext.lookup("jdbc/oracleds");

4f1150b881333f12a311ae9ef34da474.png        con = ds.getConnection();

3. 使用DDL和DML语言对数据进行基本操作

1)创建表并插入、修改数据,代码如下:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page language="java"contentType="text/html; charset=GBK"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page import="java.sql.*,javax.naming.*,javax.sql.*"%>4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png创建表并插入及修改数据
4f1150b881333f12a311ae9ef34da474.png
4f1150b881333f12a311ae9ef34da474.png
1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png   Connection con=null;

d18c02628675d0a2c816449d98bda930.png    try {

d18c02628675d0a2c816449d98bda930.png//通过连接池来获得一个连接

d18c02628675d0a2c816449d98bda930.png            Context initContext=newInitialContext();

d18c02628675d0a2c816449d98bda930.png            Context envContext=(Context)initContext.lookup("java:/comp/env");

d18c02628675d0a2c816449d98bda930.png            DataSource ds=(DataSource)envContext.lookup("jdbc/sqlserver");

d18c02628675d0a2c816449d98bda930.png            con=ds.getConnection();

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png//创建语句对象

d18c02628675d0a2c816449d98bda930.png            Statement st=con.createStatement();

d18c02628675d0a2c816449d98bda930.png//创建表的SQL语句

d18c02628675d0a2c816449d98bda930.pngStringsql="create table student(id int,name char(30),age int)";

d18c02628675d0a2c816449d98bda930.png//执行完SQL语句的结果

d18c02628675d0a2c816449d98bda930.pngbooleanb=st.execute(sql);            

d18c02628675d0a2c816449d98bda930.png            out.println("

创建student表成功!

");

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.png//插入数据到student表

d18c02628675d0a2c816449d98bda930.png            sql="insert into student values(1,'andy',47)"d18c02628675d0a2c816449d98bda930.png+"insert into student values(2,'jacky',53)"d18c02628675d0a2c816449d98bda930.png+"insert into student values(3,'周润发',51)"d18c02628675d0a2c816449d98bda930.png+"insert into student values(4,'谢贤',60)";

d18c02628675d0a2c816449d98bda930.png//执行完SQL语句的结果

d18c02628675d0a2c816449d98bda930.png            b=st.execute(sql);            

d18c02628675d0a2c816449d98bda930.png            out.println("

插入数据成功!

");

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png//更新表数据

d18c02628675d0a2c816449d98bda930.png            sql="update  student set name='刘德华' where id=1";

d18c02628675d0a2c816449d98bda930.pngintrows=st.executeUpdate(sql);

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png//如果更新成功,rows肯定是大于1的值

d18c02628675d0a2c816449d98bda930.pngif(rows>0)

d18c02628675d0a2c816449d98bda930.png                out.println("

修改数据成功!

");

d18c02628675d0a2c816449d98bda930.pngelsed18c02628675d0a2c816449d98bda930.png                out.println("

修改数据失败!

");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png        } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png            e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png        } finally {

d18c02628675d0a2c816449d98bda930.png            try {

d18c02628675d0a2c816449d98bda930.pngif(con !=null)

d18c02628675d0a2c816449d98bda930.png                    con.close();

d18c02628675d0a2c816449d98bda930.png            } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png                e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png            }

d18c02628675d0a2c816449d98bda930.png        }

d18c02628675d0a2c816449d98bda930.png

8f1ba5b45633e9678d1db480c16cae3f.png%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

2)查询数据,代码如下:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page language="java"contentType="text/html; charset=GBK"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page import="java.sql.*,javax.naming.*,javax.sql.*"%>4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png查询数据库数据
4f1150b881333f12a311ae9ef34da474.png
4f1150b881333f12a311ae9ef34da474.png
1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png   Connection con=null;

d18c02628675d0a2c816449d98bda930.png    try {

d18c02628675d0a2c816449d98bda930.png//通过连接池来获得一个连接

d18c02628675d0a2c816449d98bda930.png            Context initContext=newInitialContext();

d18c02628675d0a2c816449d98bda930.png            Context envContext=(Context)initContext.lookup("java:/comp/env");

d18c02628675d0a2c816449d98bda930.png            DataSource ds=(DataSource)envContext.lookup("jdbc/sqlserver");

d18c02628675d0a2c816449d98bda930.png            con=ds.getConnection();

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png            Statement st=con.createStatement();

d18c02628675d0a2c816449d98bda930.pngStringquery="select id,name from student";

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png//获得一个结果集

d18c02628675d0a2c816449d98bda930.png            ResultSet rs=st.executeQuery(query);

d18c02628675d0a2c816449d98bda930.png//获得结果集的元数据(表及相关的信息)

d18c02628675d0a2c816449d98bda930.png            ResultSetMetaData rsmt=rs.getMetaData();

d18c02628675d0a2c816449d98bda930.png//得到结果集有几列

d18c02628675d0a2c816449d98bda930.pngintnum=rsmt.getColumnCount();

d18c02628675d0a2c816449d98bda930.pngString[] columns=newString[num];

d18c02628675d0a2c816449d98bda930.png//列的序号是从1开始的

d18c02628675d0a2c816449d98bda930.pngfor(inti=0; i

d18c02628675d0a2c816449d98bda930.png                columns[i]=rsmt.getColumnName(i+1);            

d18c02628675d0a2c816449d98bda930.png            out.println("

d18c02628675d0a2c816449d98bda930.png            out.println("

");        

d18c02628675d0a2c816449d98bda930.png//先输出列名            

d18c02628675d0a2c816449d98bda930.pngfor(inti=0; i

d18c02628675d0a2c816449d98bda930.png                out.print("

"+columns[i]+"");

d18c02628675d0a2c816449d98bda930.png//输出列名之后换行

d18c02628675d0a2c816449d98bda930.png            out.println("

");

d18c02628675d0a2c816449d98bda930.png//取出结果

d18c02628675d0a2c816449d98bda930.pngwhile(rs.next()) {

d18c02628675d0a2c816449d98bda930.png//输出每一行的值

d18c02628675d0a2c816449d98bda930.png                out.println("

");

d18c02628675d0a2c816449d98bda930.pngfor(inti=1; i<=num; i++) {

d18c02628675d0a2c816449d98bda930.pngStringtemp=rs.getString(i);

d18c02628675d0a2c816449d98bda930.png                    out.print("

"+temp+"");

d18c02628675d0a2c816449d98bda930.png                }

d18c02628675d0a2c816449d98bda930.png                out.println("

");

d18c02628675d0a2c816449d98bda930.png            }            

d18c02628675d0a2c816449d98bda930.png            out.println("

");

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.png        } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png            e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png        } finally {

d18c02628675d0a2c816449d98bda930.png            try {

d18c02628675d0a2c816449d98bda930.png//用完后要关闭连接,释放资源

d18c02628675d0a2c816449d98bda930.pngif(con !=null)

d18c02628675d0a2c816449d98bda930.png                    con.close();

d18c02628675d0a2c816449d98bda930.png            } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png                e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png            }

d18c02628675d0a2c816449d98bda930.png        }

8f1ba5b45633e9678d1db480c16cae3f.png%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

3)使用预编译语句,代码如下:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page language="java"contentType="text/html; charset=GBK"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page import="java.sql.*,javax.naming.*,javax.sql.*"%>4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png预编译的SQL语句
4f1150b881333f12a311ae9ef34da474.png
4f1150b881333f12a311ae9ef34da474.png
1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png   Connection con=null;

d18c02628675d0a2c816449d98bda930.png    try {

d18c02628675d0a2c816449d98bda930.png//通过连接池来获得一个连接

d18c02628675d0a2c816449d98bda930.png            Context initContext=newInitialContext();

d18c02628675d0a2c816449d98bda930.png            Context envContext=(Context)initContext.lookup("java:/comp/env");

d18c02628675d0a2c816449d98bda930.png            DataSource ds=(DataSource)envContext.lookup("jdbc/sqlserver");

d18c02628675d0a2c816449d98bda930.png            con=ds.getConnection();

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.png//创建修改表的PrepareStatement SQL语句

d18c02628675d0a2c816449d98bda930.pngStringsql="update  student set name=? where id=?";

d18c02628675d0a2c816449d98bda930.png//创建预编译语句对象

d18c02628675d0a2c816449d98bda930.png            PreparedStatement pst=con.prepareStatement(sql);

d18c02628675d0a2c816449d98bda930.pngString[] names=newString[] {"梁朝伟","贝壳汗母","小罗","霍元甲"};

d18c02628675d0a2c816449d98bda930.pngfor(inti=0; i

d18c02628675d0a2c816449d98bda930.png                pst.setString(1, names[i]);

d18c02628675d0a2c816449d98bda930.png                pst.setInt(2, i+1);

d18c02628675d0a2c816449d98bda930.png                pst.executeUpdate();

d18c02628675d0a2c816449d98bda930.png            }

d18c02628675d0a2c816449d98bda930.png            pst.close();

d18c02628675d0a2c816449d98bda930.png//打印执行完SQL语句的结果        

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.png            out.println("

修改后的数据库结果

");    

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png            Statement st=con.createStatement();

d18c02628675d0a2c816449d98bda930.pngStringquery="select id,name from student";

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png//获得一个结果集

d18c02628675d0a2c816449d98bda930.png            ResultSet rs=st.executeQuery(query);

d18c02628675d0a2c816449d98bda930.png//获得结果集的元数据(表及相关的信息)

d18c02628675d0a2c816449d98bda930.png            ResultSetMetaData rsmt=rs.getMetaData();

d18c02628675d0a2c816449d98bda930.png//得到结果集有几列

d18c02628675d0a2c816449d98bda930.pngintnum=rsmt.getColumnCount();

d18c02628675d0a2c816449d98bda930.pngString[] columns=newString[num];

d18c02628675d0a2c816449d98bda930.png//列的序号是从1开始的

d18c02628675d0a2c816449d98bda930.pngfor(inti=0; i

d18c02628675d0a2c816449d98bda930.png                columns[i]=rsmt.getColumnName(i+1);            

d18c02628675d0a2c816449d98bda930.png            out.println("

d18c02628675d0a2c816449d98bda930.png            out.println("

");        

d18c02628675d0a2c816449d98bda930.png//先输出列名            

d18c02628675d0a2c816449d98bda930.pngfor(inti=0; i

d18c02628675d0a2c816449d98bda930.png                out.print("

"+columns[i]+"");

d18c02628675d0a2c816449d98bda930.png//输出列名之后换行

d18c02628675d0a2c816449d98bda930.png            out.println("

");

d18c02628675d0a2c816449d98bda930.png//取出结果

d18c02628675d0a2c816449d98bda930.pngwhile(rs.next()) {

d18c02628675d0a2c816449d98bda930.png//输出每一行的值

d18c02628675d0a2c816449d98bda930.png                out.println("

");

d18c02628675d0a2c816449d98bda930.pngfor(inti=1; i<=num; i++) {

d18c02628675d0a2c816449d98bda930.pngStringtemp=rs.getString(i);

d18c02628675d0a2c816449d98bda930.png                    out.print("

"+temp+"");

d18c02628675d0a2c816449d98bda930.png                }

d18c02628675d0a2c816449d98bda930.png                out.println("

");

d18c02628675d0a2c816449d98bda930.png            }            

d18c02628675d0a2c816449d98bda930.png            out.println("

");

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.png        } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png            e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png        } finally {

d18c02628675d0a2c816449d98bda930.png            try {

d18c02628675d0a2c816449d98bda930.png//用完后要关闭连接,释放资源

d18c02628675d0a2c816449d98bda930.pngif(con !=null)

d18c02628675d0a2c816449d98bda930.png                    con.close();

d18c02628675d0a2c816449d98bda930.png            } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png                e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png            }

d18c02628675d0a2c816449d98bda930.png        }

8f1ba5b45633e9678d1db480c16cae3f.png%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4)使用存储过程。存储过程是用来封装一段SQL语句完成一个完整的业务功能,这样可以带来更快的性能和改进的安全性。存储过程可以支持3种类型的参数:IN、OUT、INOUT,这对于存储过程在数据库内部真正能做什么来说,带来了很大的灵活性。不管存储过程是用什么语言编写的,它都能以一种标准的方式从java应用程序调用。首先需要创建一个CallableStatement对象,允许三种类型的调用,调用存储过程StudentList为例:

§|call StudentList|:如果过程不需要参数。

§|call StudentList(?,?)|:如果过程需要两个参数。

§|? =call StudentList(?,?)|:如果参数需要两个参数并返回一个。

首先要创建存储过程,代码如下:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page language="java"contentType="text/html; charset=GBK"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page import="java.sql.*,javax.naming.*,javax.sql.*"%>4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png创建SQLServer存储过程
4f1150b881333f12a311ae9ef34da474.png
4f1150b881333f12a311ae9ef34da474.png
1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png   Connection con=null;

d18c02628675d0a2c816449d98bda930.png    try {

d18c02628675d0a2c816449d98bda930.png//通过连接池来获得一个连接

d18c02628675d0a2c816449d98bda930.png            Context initContext=newInitialContext();

d18c02628675d0a2c816449d98bda930.png            Context envContext=(Context)initContext.lookup("java:/comp/env");

d18c02628675d0a2c816449d98bda930.png            DataSource ds=(DataSource)envContext.lookup("jdbc/sqlserver");

d18c02628675d0a2c816449d98bda930.png            con=ds.getConnection();

d18c02628675d0a2c816449d98bda930.png            Statement stmt=con.createStatement();            

d18c02628675d0a2c816449d98bda930.png//1.创建存储过程show_students

d18c02628675d0a2c816449d98bda930.pngStringcreateProcedure1="create procedure show_students"+"as"+"select id, name,age"+"from student"+"order by id";

d18c02628675d0a2c816449d98bda930.png//删除数据库中存在的同名过程

d18c02628675d0a2c816449d98bda930.png            stmt.executeUpdate("if exists(select name from sysobjects"d18c02628675d0a2c816449d98bda930.png+"where name='show_students'and type='p')"d18c02628675d0a2c816449d98bda930.png+"drop procedure show_students");

d18c02628675d0a2c816449d98bda930.png            stmt.executeUpdate(createProcedure1);

d18c02628675d0a2c816449d98bda930.png            out.println("

第一个存储过程show_students创建成功

");            

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png//2.创建储存过程onestudent

d18c02628675d0a2c816449d98bda930.pngStringcreateProcedure2="create procedure onestudent"d18c02628675d0a2c816449d98bda930.png+"@stu_id int = null,"+"@name varchar(20) output,"d18c02628675d0a2c816449d98bda930.png+"@age  int  output"+"as"+"if @stu_id = null"d18c02628675d0a2c816449d98bda930.png+"BEGIN"d18c02628675d0a2c816449d98bda930.png+"PRINT 'ERROR: You must specify a stu_id value.'"d18c02628675d0a2c816449d98bda930.png+"RETURN"d18c02628675d0a2c816449d98bda930.png+"END"d18c02628675d0a2c816449d98bda930.png+d18c02628675d0a2c816449d98bda930.png//Getthe salesforthe specified cof_nameand"+d18c02628675d0a2c816449d98bda930.png//assign ittothe output parameter."+d18c02628675d0a2c816449d98bda930.png"SELECT @name = name, @age = age"+"FROM student"d18c02628675d0a2c816449d98bda930.png+"WHERE id = @stu_id"+"RETURN";

d18c02628675d0a2c816449d98bda930.png            stmt.executeUpdate("if exists(select name from sysobjects"d18c02628675d0a2c816449d98bda930.png+"where name='onestudent'and type='p')"d18c02628675d0a2c816449d98bda930.png+"drop procedure onestudent");

d18c02628675d0a2c816449d98bda930.png            stmt.executeUpdate(createProcedure2);            

d18c02628675d0a2c816449d98bda930.png            out.println("

第二个存储过程onestudent创建成功

");

d18c02628675d0a2c816449d98bda930.png

d18c02628675d0a2c816449d98bda930.png//3.创建函数

d18c02628675d0a2c816449d98bda930.pngStringcreateProcedure3="CREATE FUNCTION ageofstu"d18c02628675d0a2c816449d98bda930.png+d18c02628675d0a2c816449d98bda930.png//Input cof_name

d18c02628675d0a2c816449d98bda930.png"(@stu_name varchar(20))"d18c02628675d0a2c816449d98bda930.png+"RETURNS int"d18c02628675d0a2c816449d98bda930.png+//return sales

d18c02628675d0a2c816449d98bda930.png"AS"+"BEGIN"+"DECLARE @age int"d18c02628675d0a2c816449d98bda930.png+"SELECT @age = age"+"FROM student"d18c02628675d0a2c816449d98bda930.png+"WHERE name like @stu_name"+"RETURN @age"d18c02628675d0a2c816449d98bda930.png+"END";

d18c02628675d0a2c816449d98bda930.png            stmt.executeUpdate("if exists(select name from sysobjects"d18c02628675d0a2c816449d98bda930.png+"where name='ageofstu')"d18c02628675d0a2c816449d98bda930.png+"drop function ageofstu");

d18c02628675d0a2c816449d98bda930.png            stmt.executeUpdate(createProcedure3);

d18c02628675d0a2c816449d98bda930.png            out.println("

函数ageofstu创建成功

");

d18c02628675d0a2c816449d98bda930.png            stmt.close();

d18c02628675d0a2c816449d98bda930.png//con.close();

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.png        } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png            e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png        } finally {

d18c02628675d0a2c816449d98bda930.png            try {

d18c02628675d0a2c816449d98bda930.png//用完后要关闭连接,释放资源

d18c02628675d0a2c816449d98bda930.pngif(con !=null)

d18c02628675d0a2c816449d98bda930.png                    con.close();

d18c02628675d0a2c816449d98bda930.png            } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png                e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png            }

d18c02628675d0a2c816449d98bda930.png        }

8f1ba5b45633e9678d1db480c16cae3f.png%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

调用存储过程:

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page language="java"contentType="text/html; charset=GBK"%>1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif@ page import="java.sql.*,javax.naming.*,javax.sql.*"%>4f1150b881333f12a311ae9ef34da474.pngHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png调用SQLServer数据库存储过程
4f1150b881333f12a311ae9ef34da474.png
4f1150b881333f12a311ae9ef34da474.png
1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifd18c02628675d0a2c816449d98bda930.png       Connection con=null;

d18c02628675d0a2c816449d98bda930.png//定义调用存储过程和函数的 SQL 语句

d18c02628675d0a2c816449d98bda930.pngStringcallSQL1="{call show_students}";

d18c02628675d0a2c816449d98bda930.pngStringcallSQL2="{call onestudent(?,?,?)}";

d18c02628675d0a2c816449d98bda930.pngStringcallSQL3="{? = call ageofstu(?)}";

d18c02628675d0a2c816449d98bda930.png     

d18c02628675d0a2c816449d98bda930.png    try {

d18c02628675d0a2c816449d98bda930.png//通过连接池来获得一个连接

d18c02628675d0a2c816449d98bda930.png            Context initContext=newInitialContext();

d18c02628675d0a2c816449d98bda930.png            Context envContext=(Context)initContext.lookup("java:/comp/env");

d18c02628675d0a2c816449d98bda930.png            DataSource ds=(DataSource)envContext.lookup("jdbc/sqlserver");

d18c02628675d0a2c816449d98bda930.png            con=ds.getConnection();

d18c02628675d0a2c816449d98bda930.png        

d18c02628675d0a2c816449d98bda930.png//调用第1个存储过程

d18c02628675d0a2c816449d98bda930.png            CallableStatement cs=con.prepareCall(callSQL1);

d18c02628675d0a2c816449d98bda930.png            ResultSet rs=cs.executeQuery();

d18c02628675d0a2c816449d98bda930.png            out.println("

第一个存储过程调用结果

");

d18c02628675d0a2c816449d98bda930.pngwhile(rs.next()) {

d18c02628675d0a2c816449d98bda930.pngStringid=rs.getString(1);

d18c02628675d0a2c816449d98bda930.pngStringname=rs.getString(2);

d18c02628675d0a2c816449d98bda930.pngStringage=rs.getString(3);

d18c02628675d0a2c816449d98bda930.png                out.println(id+""+name+""+age+"

");

d18c02628675d0a2c816449d98bda930.png            }            

d18c02628675d0a2c816449d98bda930.png//调用第2个存储过程

d18c02628675d0a2c816449d98bda930.png            cs=con.prepareCall(callSQL2);

d18c02628675d0a2c816449d98bda930.png            cs.setString(1,"2");

d18c02628675d0a2c816449d98bda930.png            cs.registerOutParameter(2, Types.CHAR);

d18c02628675d0a2c816449d98bda930.png            cs.registerOutParameter(3, Types.INTEGER);

d18c02628675d0a2c816449d98bda930.png            cs.execute();

d18c02628675d0a2c816449d98bda930.pngStringname=cs.getString(2);

d18c02628675d0a2c816449d98bda930.pngintage=cs.getInt(3);

d18c02628675d0a2c816449d98bda930.png            out.println("

第二个存储过程调用结果

");

d18c02628675d0a2c816449d98bda930.png            out.println("This student's name is"+name

d18c02628675d0a2c816449d98bda930.png+"and age is"+age+"

");

d18c02628675d0a2c816449d98bda930.png//调用函数

d18c02628675d0a2c816449d98bda930.png            cs=con.prepareCall(callSQL3);

d18c02628675d0a2c816449d98bda930.png            cs.setString(2,"小罗");

d18c02628675d0a2c816449d98bda930.png            cs.registerOutParameter(1, Types.INTEGER);

d18c02628675d0a2c816449d98bda930.png            cs.execute();

d18c02628675d0a2c816449d98bda930.png            age=cs.getInt(1);

d18c02628675d0a2c816449d98bda930.png            out.println("

函数调用结果

");

d18c02628675d0a2c816449d98bda930.png            out.println("This student's name is"+age+".

");

d18c02628675d0a2c816449d98bda930.png            cs.close();

d18c02628675d0a2c816449d98bda930.png            

d18c02628675d0a2c816449d98bda930.png        } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png            e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png        } finally {

d18c02628675d0a2c816449d98bda930.png            try {

d18c02628675d0a2c816449d98bda930.png//用完后要关闭连接,释放资源

d18c02628675d0a2c816449d98bda930.pngif(con !=null)

d18c02628675d0a2c816449d98bda930.png                    con.close();

d18c02628675d0a2c816449d98bda930.png            } catch (Exception e) {

d18c02628675d0a2c816449d98bda930.png                e.printStackTrace();

d18c02628675d0a2c816449d98bda930.png            }

d18c02628675d0a2c816449d98bda930.png        }

8f1ba5b45633e9678d1db480c16cae3f.png%>4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

注意:在调用存储过程或函数需要使用返回参数时,须使用Call-ableStatement的registerOutParameter(序号,类型)对返回参数进行注册。其中序号是调用语句从左至右顺序号,且起始位置从1计数开始。

转载地址:https://blog.csdn.net/weixin_32256355/article/details/114591770 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:form表单属性名相同java_form表单提交时候有多个相同name 的input如何处理?
下一篇:java蓝桥杯经典题目_蓝桥杯——Java集合练习题

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月14日 06时44分23秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章