JDBC连接数据库BaseDao通用类(可以调用存储过程)
JDBC链接数据库的步骤
JDBC链接数据库的步骤JDBC链接数据库的步骤此文列出了JDBC链接数据库的4个步骤,供大家参考下:JDBC:JAVA访问数据库的解决方案。
几个步骤:1.加载驱动类;2.与数据库建立连接;3.执行SQL语句4.处理结果集5.关闭连接1. 第一步:加载驱动类:需要留意:不同的数据库,参照的字符串不同,ORACLE的连接为:Class.forName(oracle.jdbc.driver.OracleDriver); 这一步执行后,程序可能会抛出: ClassNotFoundException,缘由一般有:a. 数据库的驱动jar包没有导入到环境变量中b. Class.forName中的字符串拼写不正确2. 其次步:通过DriverManager与数据库建立连接:其静态方法getConnection用来猎取连接。
通常需要传入三个参数参数1:数据库的地址及端口(不同数据库字符串内容不相同)oracle的地址:jdbc:oracle:thin:@host:port:sid 参数2:数据库的用户名参数3:数据库对应用户名的密码Connection conn = DriverManager.getConnect(jdbc:oracle:thin:@host:port:oracle,user, psd);3.第三步:java.sql.Statement 执行SQL语句并猎取结果Statement state = conn.createStatement();String sql=/*这里面是SQL语句*/ ;Statement针对不同的SQL语句供应了不同的执行方法:ResultSet executeQuery(String sql)* 该方法特地用来执行DQL语句,返回的ResultSet表示查询出来的结果集int executeUpdate(String sql)* 该方法特地用来执行DML语句,返回的数字表示执行该语句影响了表中多少条数据boolean execute(String sql)* 该方法理论上什么语句都可以执行了,但是由于DQL,DML都有特地的方法执行了,所以该方法通常用来执行DDL语句ResultSet rs = state.executeQuery(sql);输出查询结果:while(rs.next()){ 输出语句 }ResultSet供应用于遍历结果集的方法:boolean next()*该方法有两个作用,首先当我们查询出结果集后rs的指针指向第一条数据之上,所以我们需要先调用一次next()使其指针移动到第一条数据上并表示该条数据。
跟我学Java JDBC数据库访问操作技术——应用JDBC实现对MySQL数据库中的存储过程进行调用的应用实例
connectDBBean=new MySQLConnectDBBean();
con=connectDBBean.getConnection();
/* 在 MySQL 数据库 webbank 中设计一个名称为“getUserInfos”的存储过程。
给出二个参数(作者的名和密码)
*/
storeProcStatement=con.prepareCall("{call getUserInfos(?,?)}",
//给存储过程的第二个输入参
数赋值
rs=storeProcStatement.executeQuery();
//执行该存储过程
}
ResultSetMetaData metaData;
String[] columnNames = {};
杨教授工作室,版权所有5 ,盗版必究, 5/10 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
பைடு நூலகம்
this.addWindowListener(this);
contentPanel = new JPanel();
contentPanel.setLayout(new BorderLayout());
this.setContentPane(contentPanel);
}
Connection con=null;
杨教授工作室,版权所有4 ,盗版必究, 4/10 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
this.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width
-
FrameWidth)
jdbc 调用存储过程
jdbc 调用存储过程
JDBC调用存储过程是Java程序员经常会用到的技能。
存储过程是一种存储在数据库中的预定义程序,可以让我们像执行 SQL 语句一样调用它。
在 Java 中,我们可以使用 JDBC API 来调用存储过程。
调用存储过程需要以下步骤:
1.连接到数据库
连接到数据库需要使用 JDBC 的 DriverManager 类来获取数据库连接。
在获取连接之前,需要知道数据库的 URL、用户名和密码。
2.创建 CallableStatement
在获取到连接之后,可以使用 Connection 接口的 prepareCall 方法创建一个 CallableStatement 对象。
这个对象用来调用存储过程。
3.设置参数
在创建 CallableStatement 对象之后,可以使用 set 方法设置存储过程的参数。
存储过程的参数可以是输入参数、输出参数或输入输出参数。
4.执行存储过程
设置完参数之后,可以使用 CallableStatement 对象的execute 方法来执行存储过程。
5.获取结果
存储过程执行完毕后,可以使用 get 方法获取输出参数的值。
以上就是调用存储过程的基本步骤。
需要注意的是,不同的数据
库对存储过程的支持不一样,需要根据不同数据库的文档来了解具体支持情况。
jdbc数据库连接流程
jdbc数据库连接流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!JDBC(Java Database Connectivity)是 Java 语言中用于连接数据库的一种 API。
jdbc连接数据库
jdbc连接数据库
JDBC连接数据库
Abstract:
本文详细介绍了JDBC(Java数据库连接)的功能、使用和操作方法。
JDBC是Java平台的一种标准接口,用于连接和操作各种关系型数据库。
通过该接口,开发人员可以在Java应用程序中实现对数据库的读取、写入和更新等操作。
本文将重点讲解如何使用JDBC 连接数据库、执行SQL语句以及处理查询结果。
作者:智能助手
1. 简介
JDBC(Java数据库连接)是Java平台上一种用于连接和操作各种关系型数据库的标准接口。
开发人员可以使用JDBC在Java应用程序中实现与数据库的交互,进行数据的读取、写入和更新等操作。
JDBC可以连接各种数据库,包括MySQL、Oracle、SQL Server 等。
通过使用不同的数据库驱动程序,开发人员可以通过JDBC与不同的数据库进行交互。
2. JDBC驱动程序
JDBC驱动程序是用来连接特定类型数据库的软件库。
每种数据库都有自己独立的JDBC驱动程序。
在使用JDBC之前,需要先下载并安装适用于目标数据库的JDBC驱动程序。
例如,如果要连接MySQL数据库,可以下载并安装MySQL的JDBC驱动程序。
然后,开发人员可以通过在Java代码中加载驱动程序来连接MySQL数据库。
加载驱动程序的代码示例:
```java
Class.forName(\。
【免费下载】JDBC连接数据库的步骤
JAVA 连接数据库的方式有多种,根据所需要的不同数据库驱动分,分为四种:
1:1 类驱动。这就是 JDBC-ODBC 桥的方式。但这种方式不适合程序的重用 与维护,不推荐使用。需要数据库的 ODBC 驱动。
2:2 类驱动。这就是 JDBC+厂商 API 的形式。厂商 API 一般使用 C 编写,所 以,这种方式也不长使用。
} 成功加载后,会将 Driver 类的实例注册到 DriverManager 类中。 2、提供 JDBC 连接的 URL - 连接 URL 定义了连接数据库时的协议、子协议、数据源标识。 - 书写形式:协议:子协议:数据源标识 协议:在 JDBC 中总是以 jdbc 开始 子协议:是桥连接的驱动程序或是数据库管理系统名称。 数据源标识:标记找到数据库来源的地址与连接端口。 例如:(MySql 的连接 URL)
String url = "jdbc:mysql://localhost:3306/test" ; String username = "root" ; String password = "root" ; try{ Connection con=DriverManager.getConnection(url,username,password); }catch(SQLException se){ System.out.println("数据库连接失败!"); se.printStackTrace() ;
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); }catch(ClassNotFoundException e){ System.out.println("找不到驱动程序类 ,加载驱动失败!"); e.printStackTrace() ;
JDBC操作存储过程、存储函数、out参数使用游标
JDBC操作存储过程、存储函数、out参数使⽤游标JDBC⼯具类public class JDBCUtils {private static String driver = "oracle.jdbc.OracleDriver";private static String url = "jdbc:oracle:thin:@192.168.79.128:1521/orcl";private static String user = "scott";private static String password = "tiger";static{//注册驱动//DriverManager.registerDriver(driver)try {Class.forName(driver);} catch (ClassNotFoundException e) {throw new ExceptionInInitializerError(e);}}public static Connection getConnection(){try {return DriverManager.getConnection(url, user, password);} catch (SQLException e) {e.printStackTrace();}return null;}public static void release(Connection conn,Statement st,ResultSet rs){if(rs != null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}finally{rs = null; ///-----> 原因:Java GC: Java的GC不受代码的控制}}if(st != null){try {st.close();} catch (SQLException e) {e.printStackTrace();}finally{st = null;}}if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}finally{conn = null;}}}}存储过程--存储过程create or replace procedure queryEmpInformation(eno in number,pename out varchar2,psal out number,pjob out varchar2)isbeginselect ename,sal,job into pename,psal,pjob from emp where empno = eno;end queryEmpInformation;java代码@Testpublic void testProcedure(){//jdbc调⽤存储过程sql语句://{call <procedure-name>[(<arg1>,<arg2>, ...)]}String sql = "{call queryEmpInformation(?,?,?,?)}";Connection conn = null;CallableStatement call = null;try{conn = JDBCUtils.getConnection();call = conn.prepareCall(sql);//输⼊参数赋值call.setInt(1, 7839);//输出参数,声明为输出参数call.registerOutParameter(2, OracleTypes.VARCHAR);call.registerOutParameter(3, OracleTypes.NUMBER);call.registerOutParameter(4, OracleTypes.VARCHAR);//执⾏call.execute();//获取值String name = call.getString(2);double sal = call.getDouble(3);String job = call.getString(4);System.out.println(name+"\t"+sal+"\t"+job);}catch (Exception e){e.printStackTrace();}finally{JDBCUtils.release(conn, call, null);}}存储函数--存储函数create or replace function queryEmpIncome(eno in number) return numberispsal emp.sal%type;pcomm m%type;beginselect sal,comm into psal,pcomm from emp where empno = eno; return psal*12+nvl(pcomm,0);end queryEmpIncome;java代码@Testpublic void testFuntion(){//jdbc调⽤存储函数sql语句://{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}String sql = "{? = call queryEmpIncome(?)}";Connection conn = null;CallableStatement call = null;try{conn = JDBCUtils.getConnection();call = conn.prepareCall(sql);//注册输出参数call.registerOutParameter(1, OracleTypes.NUMBER);//输⼊参数call.setInt(2, 7839);//执⾏call.execute();//取出返回值double income = call.getDouble(1);System.out.println("年薪:"+income);}catch (Exception e){e.printStackTrace();}finally{JDBCUtils.release(conn, call, null);}}out参数游标--创建包头create or replace package mypackageis--定义⼀个cursor类型变量type empcursor is ref cursor;procedure queryEmpList(dno in number,empList out empcursor); end mypackage;--创建包体create or replace package body mypackage isprocedure queryEmpList(dno in number,empList out empcursor) asbeginopen empList for select*from emp where deptno = dno;end;end mypackage;java代码@Testpublic void testCursor(){String sql = "call mypackage.queryEmpList(?,?)";Connection conn = null;CallableStatement call = null;ResultSet rs = null;try{conn = JDBCUtils.getConnection();call = conn.prepareCall(sql);call.setInt(1, 20);call.registerOutParameter(2, OracleTypes.CURSOR);call.execute();rs = ((OracleCallableStatement)call).getCursor(2);while(rs.next()){String name = rs.getString("ename");double sal = rs.getDouble("sal");System.out.println(name+"\t"+sal);}}catch (Exception e){e.printStackTrace();}finally{JDBCUtils.release(conn, call, null);}}。
JDBC连接数据库
JDBC连接数据库JDBC(Java Database Connectivity)是一种用于Java编程语言的API,用于连接和操作各种类型的数据库。
通过JDBC,我们可以在Java程序中与数据库进行交互,执行SQL语句并获取结果。
下面是一个示例,演示了如何使用JDBC连接到数据库并执行一些基本的数据库操作:1. 引入JDBC相关的类库。
在Java程序中,我们需要使用数据库供应商提供的JDBC驱动程序。
例如,如果我们要连接MySQL数据库,我们需要下载并引入MySQL 的JDBC驱动程序。
2. 加载JDBC驱动程序。
在Java程序中,我们需要在使用JDBC之前加载指定数据库的驱动程序。
通过调用`Class.forName()`方法并传递驱动程序的名称,我们可以动态加载相应的驱动程序。
3. 建立数据库连接。
通过调用`DriverManager.getConnection()`方法,并传递数据库URL、用户名和密码,我们可以建立与数据库的连接。
```javaimport java.sql.*;public class JDBCDemo {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/mydb";String username = "root";String password = "123456";try {Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection(url, username, password);// 执行SQL语句Statement statement = connection.createStatement();String sql = "SELECT * FROM users";ResultSet resultSet = statement.executeQuery(sql);// 处理结果集while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");int age = resultSet.getInt("age");System.out.println("id: " + id + ", name: " + name + ", age: " + age);}// 关闭连接resultSet.close();statement.close();connection.close();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}}```以上示例使用MySQL数据库作为示例,连接到名为"mydb"的数据库,并查询"users"表中的数据。
jdbc调用存储过程
jdbc调用存储过程随着数据库的广泛应用,存储过程作为一种高效的数据库编程方式,越来越受到开发者的青睐。
在Java应用程序中,JDBC是与数据库交互的重要途径,而调用存储过程是JDBC开发中的一个重要环节。
本文将介绍JDBC调用存储过程的基本流程、注意事项和示例代码。
一、JDBC调用存储过程的基本流程1.注册数据库驱动在使用JDBC连接数据库之前,需要先注册数据库驱动。
常见的数据库驱动有MySQL、Oracle、SQL Server等,不同的数据库需要使用不同的驱动。
以MySQL为例,注册驱动的代码如下:```Class.forName('com.mysql.jdbc.Driver');```2.连接数据库在注册驱动之后,需要连接数据库。
连接数据库需要指定数据库的URL、用户名和密码。
代码如下:```String url = 'jdbc:mysql://localhost:3306/test';String user = 'root';String password = '123456';Connection conn = DriverManager.getConnection(url, user, password);```其中,url是数据库的连接地址,test是数据库的名称,localhost是数据库所在的服务器地址,3306是MySQL数据库的默认端口号。
user和password是连接数据库的用户名和密码。
3.创建CallableStatement对象在连接数据库之后,需要创建CallableStatement对象,用于调用存储过程。
CallableStatement对象是PreparedStatement对象的子类,用于执行带有IN、OUT和INOUT参数的SQL语句。
代码如下: ```String sql = '{call procedure_name(?, ?, ?)}';CallableStatement cstmt = conn.prepareCall(sql);```其中,procedure_name是存储过程的名称,?是占位符,表示存储过程的参数。
jdbc连接数据库BaseDao类
jdbc连接数据库BaseDao类package com.dao.impl;import java.sql.*;import javax.servlet.jsp.jstl.sql.Result;import javax.servlet.jsp.jstl.sql.ResultSupport;public class BaseDao {private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl2";private static final String USRENAME = "zhangsan";private static final String PASSWORD = "123";// 仅作为返回ResultSet查询时使用private Connection conn = null;private PreparedStatement pst = null;private ResultSet rs = null;/*** 返回连接** @return Connection*/private Connection getConnection() {try {Class.forName(DRIVER);conn = DriverManager.getConnection(URL, USRENAME, PASSWORD);} catch (Exception e) {e.printStackTrace();}return conn;}/*** 返回ResultSet,需每次实例化一个BaseDao,然后调用CloseALL 方法关闭对象** @param sql* 预编译的SQL 语句* @param param* 预编译的SQL 语句中的‘?’参数的字符串数组**/public ResultSet executeQuerySQL(String sql, Object... param) { try {conn = getConnection(); // 得到数据库连接pst = conn.prepareStatement(sql); // 得到PreparedStatement 对象if (param != null) {for (int i = 0; i < param.length; i++) {pst.setObject(i + 1, param[i]); // 为预编译sql设置参数}}rs = pst.executeQuery(); // 执行SQL语句} catch (Exception e) {e.printStackTrace(); // 处理ClassNotFoundException异常}return rs;}/*** 添,删,改** @param sql* @param param* @return*/public int executeUpdate(String sql, Object... param) { conn = getConnection();int row = 0;try {pst = conn.prepareStatement(sql);if (param != null) {for (int i = 0; i < param.length; i++) {pst.setObject(i + 1, param[i]);}}row = pst.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {closeALL(null, pst, conn);}return row;}/*** 返回Result** @param sql* @param param* @return*/public Result executeQuery(String sql, Object... param) {Connection conn = null;PreparedStatement pst = null;ResultSet rs = null;Result rst = null;try {conn = getConnection(); // 得到数据库连接pst = conn.prepareStatement(sql); // 得到PreparedStatement 对象if (param != null) {for (int i = 0; i < param.length; i++) {pst.setObject(i + 1, param[i]); // 为预编译sql设置参数}}rs = pst.executeQuery(); // 执行SQL语句rst = ResultSupport.toResult(rs);// 关闭连接对象rs.close();pst.close();conn.close();} catch (Exception e) {e.printStackTrace(); // 处理ClassNotFoundException异常}return rst;}/*** 查询单个值,如count,sum,max,avg等** @param sql* @param param* @return*/public Object executeScalar(String sql, Object... param) { Connection conn = getConnection(); PreparedStatement pst = null;ResultSet rs = null;Object obj = null;try {pst = conn.prepareStatement(sql);if (param != null) {for (int i = 0; i < param.length; i++) {pst.setObject(i + 1, param[i]);}}rs = pst.executeQuery();obj = rs.getObject(1);} catch (SQLException e) {e.printStackTrace();} finally {closeALL(null, pst, conn);}return obj;}// 关闭ResultSet查询时的对象public void closeALL() {try {if (rs != null)rs.close();if (pst != null)pst.close();if (conn != null)conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 关闭连接** @param conn* Connection*/public void closeALL(ResultSet rs, Statement pst, Connection conn) { try {if (rs != null) {rs.close();}if (pst != null) {pst.close();}if (conn != null && (!conn.isClosed())) {conn.close();}} catch (SQLException sqlEx) {sqlEx.printStackTrace();}}}。
jdbc调用达梦存储过程
jdbc调用达梦存储过程要通过JDBC调用达梦存储过程,您需要执行以下步骤:1. 导入必要的JDBC库文件:从达梦官方网站下载并导入适用于您的Java版本和达梦数据库版本的JDBC 驱动程序。
2. 建立数据库连接:使用驱动程序管理器类(`DriverManager`),使用提供的JDBC URL、用户名和密码建立与达梦数据库的连接。
例如:```javaString jdbcUrl = "jdbc:dmi://localhost:5236/dmdb";String username = "your_username";String password = "your_password";Connection connection =DriverManager.getConnection(jdbcUrl, username, password);```3. 创建可调用的语句对象:使用连接对象(`connection`)创建`CallableStatement`对象,并准备调用存储过程。
例如:```javaString callStatement = "{callyour_stored_procedure(?, ?)}"; CallableStatement callableStatement = connection.prepareCall(callStatement);```4. 设置输入和输出参数:根据存储过程定义,使用`callableStatement`的`setXXX`方法设置输入参数的值,以及注册输出参数的类型。
例如,如果存储过程有两个参数,一个输入参数和一个输出参数:```javacallableStatement.setString(1, "input_value"); callableStatement.registerOutParameter(2, Types.INTEGER);```5. 执行存储过程:使用`callableStatement`的`execute()`方法执行存储过程。
使用JDBC API直接调用存储过程
6. 调用 CallableStatement.getXXX 方法从输出参数 (OUT) 或者输入输出参数 (INOUT) 取值。
7. 使用完 CallableStatement 对象后,使用 CallableStatement.close 方法关闭 CallableStatement 对象。
int silvernumber = cstmt.getInt(4);
String errorinfo = cstmt.getString(5);
cstmt.close();
当存储过程返回一个结果集时,只需遍历该结果集便可以得到存储过程执行的所有结果。具体例子见清单2。
清单 2.
* ResultSet CallableStatement.executeQuery: 存储过程返回一个结果集。
* Boolean CallableStatement.execute: 存储过程返回多个结果集。
* int[] CallableStatement.executeBatch: 提交批处理命令到数据库执行。
使用 CallableStatement 对象调用存储过程的过程如下:
1. 使用 Connection.prepareCall 方法创建一个 CallableStatement 对象。
2. 使用 CallableStatement.setXXX 方法给输入参数(IN)赋值。
System.out.println(buffer.toString());
while (rs.next()) {
buffer.setLength(0);
for (int i = 1; i <= rsmd.getColumnCount(); i++)
java jdbc mysql 调用存储过程写法 -回复
java jdbc mysql 调用存储过程写法-回复Java JDBC MySQL 调用存储过程写法在Java开发中,使用JDBC连接MySQL数据库是一种常见的做法。
当需要执行一些复杂的数据库操作时,使用存储过程可以提高数据库操作的效率和安全性。
本文将详细介绍在Java中使用JDBC调用MySQL存储过程的写法,涵盖以下内容:1. 准备工作2. 创建存储过程3. 使用JDBC调用存储过程1. 准备工作在开始之前,确保你已经完成以下准备工作:- 安装和配置Java JDK和MySQL数据库- 创建Java项目并导入JDBC驱动程序首先,我们需要在Java项目中导入MySQL的JDBC驱动程序,以便能够连接和操作MySQL数据库。
你可以从MySQL官方网站下载并导入JDBC 驱动程序。
在项目的构建路径下创建lib文件夹,将驱动程序的JAR文件复制到该文件夹中。
然后,右键点击JAR文件,选择Build Path -> Add to Build Path,将其添加到项目的构建路径中。
2. 创建存储过程在MySQL中,存储过程是一组预编译的SQL语句组成的块,它们按照特定的顺序执行,可以带有参数,并且可以通过调用来执行。
下面是一个简单的示例存储过程,用于从一个名为customer的表中获取所有客户的信息:DELIMITERCREATE PROCEDURE GetAllCustomers ()BEGINSELECT * FROM customer;ENDDELIMITER ;上述存储过程使用DELIMITER关键字来改变MySQL的语句分隔符,默认情况下分隔符为分号。
在存储过程内部,我们使用SELECT语句从customer表中获取所有的客户信息。
3. 使用JDBC调用存储过程在Java中使用JDBC调用MySQL存储过程需要以下几个步骤:3.1 创建数据库连接首先,我们需要使用JDBC创建与数据库的连接。
JDBC连接数据库步骤
JDBC连接数据库步骤 JDBC(Java Data Base Connectivity,java数据库连接)是⼀种⽤于执⾏SQL语句的Java API,可以为多种关系数据库提供统⼀访问,它由⼀组⽤Java语⾔编写的类和接⼝组成。
JDBC为数据库开发⼈员提供了⼀个标准的API,据此可以构建更⾼级的⼯具和接⼝,使数据库开发⼈员能够⽤纯 Java API 编写数据库应⽤程序,并且可跨平台运⾏,并且不受数据库供应商的限制。
try {//准备四⼤参数String driverClassName = "com.mysql.jdbc.Driver";//对mysql⽽⾔,他的⼦协议结构://主机:端⼝号/数据库名称String url = "jdbc:mysql://localhost:3306/basic_project?serverTimezone=Asia/Shanghai";String usename = "root";String password = "root";String sql = "select * from user";//todo 1.指定连接类型————初始化驱动,加载想要连接的数据库的驱动到JVM(Java虚拟机)Class.forName(driverClassName);//todo 2.获取连接————要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表⼀个数据库的连接Connection conn = DriverManager.getConnection(url, usename, password);//todo 3.准备执⾏SQL语句————要执⾏SQL语句,必须获得java.sql.Statement实例PreparedStatement pst = conn.prepareStatement(sql);//todo 4.执⾏SQL语句,得到结果集ResultSet ret = pst.executeQuery(); //查询(查)while (ret.next()) {String uid = ret.getString(1);String ufname = ret.getString(2);String ulname = ret.getString(3);String udate = ret.getString(4);System.out.println(uid + "\t" + ufname + "\t" + ulname + "\t" + udate);}//显⽰数据//todo 5.关闭连接————操作完成以后要把所有使⽤的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反ret.close();pst.close();conn.close();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException throwables) {throwables.printStackTrace();}修改(改)String sql = "update user set nickname = 'xxxx' where id = 'fdf1f49f76524895b10160ddb3deae39'";int est = pst.executeUpdate();System.out.println(est);插⼊(增)String sql = "insert into user (id,nickname,username) values(?,?,?)";pst.setString(1, "fdf2349f76524895b10160ddb3deae39");pst.setString(2, "JDBC2");pst.setString(3, "JDBC3");int i = pst.executeUpdate();System.out.println(i);删除(删)String sql = "delete from user where nickname = 'JDBC2'";int i = pst.executeUpdate();System.out.println("resutl: " + i);步骤详解1、初始化驱动,加载JDBC驱动程序在连接数据库之前,⾸先要初始化驱动,加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过ng.Class类的静态⽅法forName(String className)实现。
使用JDBC连接数据库(一)
使⽤JDBC连接数据库(⼀)JDBC是由java编程语⾔编写的类及接⼝组成,同时它为程序开发⼈员提供了⼀组⽤于实现对数据库访问的JDBC API,并⽀持SQL语⾔。
利⽤JDBC可以将JAVA代码连接到oracle、DB2、SQLServer、MYSQL等数据库,从⽽实现对数据库中的数据操作的⽬的。
⼀、JDBC简介JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统⼀的访问。
JDBC是sun开发的⼀套数据库访问编程接⼝,是⼀种SQL级的API。
它是由java语⾔编写完成,所以具有很好的跨平台特性,使⽤JDBC编写的数据库应⽤程序可以在任何⽀持java的平台上运⾏,⽽不必在不同的平台上编写不同的应⽤程序。
JDBC的主要功能如下:(1)建⽴与数据库或者其他数据源的链接(2)向数据库发送SQL命令(3)处理数据库的返回结果⼆、JDBC中常⽤类和接⼝连接到数据库(Connection)、建⽴操作指令(Statement)、执⾏查询指令(executeQuery)、获得查询结果(ResultSet)等。
1、驱动程序管理类(DriverManager)DriverManager类是JDBC的管理类,作⽤于⽤户和驱动程序之间。
它跟踪在可⽤的驱动程序,并在数据库和相应驱动程序之间建⽴连接。
另外,DriverManager类也处理诸如驱动程序登陆时间限制及登录和跟踪消息的显⽰事务。
对于简单的应⽤程序,⼀般程序员需要在此类中直接使⽤唯⼀的⽅法时DriverManager.getConnection()。
该⽅法将建⽴与数据库的链接。
JDBC允许⽤户调⽤DriverManager的⽅法getDriver()、getDrivers()和registerDriver()及Driver的⽅法connect().2、声明类(Statement)Statement对象⽤于将SQL语句发送到数据库中。
jdbc调用Oracle数据库存储过程
/blog/1582331 Java jdbc调用Oracle数据库存储过程一、了解CallableStatement接口1.callablestatement接口提供了两种调用形式{?= call <procedure-name>[(<arg1>,<arg2>, ...)]} //包含结果参数的调用形式如:函数(funciton){call <procedure-name>[(<arg1>,<arg2>, ...)]} //不包含结果参数的调用形式如:存储过程(procedure)2.callablestatement接口提供的方法Java代码1.void registerOutParameter(int parameterIndex, int sqlType)2.throws SQLException; //在调用存储过程的时候设置输出参数的类型,用于接收输出结果registerOutParameter接口中有四个该方法的重载实现,具体的可以查看源码了解Java代码1.setXXX(int parameterIndex,XXX x) //主要用于设置过程调用时候需要的输入参数信息其中XXX代表对应类型Java代码1.getXXX(int x) //主要用于获取过程调用后返回的参数的信息3.callablestatement接口产生的异常提示如下源码:Java代码1./*2.* @exception SQLFeatureNotSupportedException if<code>sqlType</code> is3.* a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>,4.* <code>DATALINK</code>, <code>JAVA_OBJECT</code>,<code>NCHAR</code>,5.* <code>NCLOB</code>, <code>NVARCHAR</code>,<code>LONGNVARCHAR</code>,6.* <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code>7.* or <code>STRUCT</code> data type and the JDBC driver does notsupport8.* this data type9.* @see Types10.*/11.void registerOutParameter(int parameterIndex, int sqlType)12.ows SQLException;当我们使用registerOutParameter方法设置输出参数类型的时候,需要注意对于某一些类型是不能够进行设置的如上中所以提到的类型都会引发SQLFeatureNotSupportedException异常,对于能够支持的类型可以查看java.sql.Types和oracle.jdbc.OracleTypes如下源码:Java代码1./*2.* java.sql.SQLException: 不允许的操作: Ordinal binding and Namedbinding cannot be3.* combined! at4.*oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at5.*oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) at6.* oracle7.* .jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java8.* :4219) at9.*org.viancent.call.procedure.CallProcedure.main(CallProcedure.ja va:36)10.*/当我们在给过程设置参数信息的时候,不能够同时使用下标和名称来指定对应参数的。
使用JDBC调用数据库的存储过程
使⽤JDBC调⽤数据库的存储过程 本篇讲述如何使⽤JDBC来调⽤MySQL数据库中的存储过程。
建议在学习如何使⽤JDBC调⽤存储过程前,请先了解如何在数据库中使⽤存储过程。
存储过程是指在数据库系统中,⼀组为了完成特定功能的SQL语句集,存储在数据库中,经过第⼀次编译后以后再调⽤任意次都不需要重新编译了。
说⽩了就是⼀堆SQL语句的合并,中间加了点逻辑控制,俗称为数据库中的函数。
在⼀些⾦融等⼤型企业中,基本都是由内部⼈员编写好存储过程,然后由外部程序员调⽤存储过程,因为内部数据逻辑处理⽅式涉及商业机密等等。
也就是说我们现在有两种⽅式来处理数据库中的数据,⼀是通过JDBC从数据库中取出数据然后通过业务层编写处理数据的逻辑代码;⼆是在数据库中定义数据的存储过程,在这个存储过程中完成对数据的逻辑操作,就好⽐数据库中的函数,⽽我们在Java程序中只要调⽤数据库中的这个存储过程即可。
操作: 在MySQL数据库中确定要调⽤哪个存储过程,包括确定该存储过程的参数列表为哪些SQL类型。
在JDBC中通过链接Connection对象,调⽤prepareCall(…)⽅法,在prepareCall⽅法中的参数为字符串,内容应该为”{call 存储过程名(?(占位符,个数根据存储过程参数来定)...)}”,调⽤这个⽅法后返回CallableStatement对象。
通过返回的CallableStatement对象对于传⼊类型的参数(IN),如PreparedStatement对象⼀样设置占位符的替代参数,⽽对于占位符对应的参数是输出类型(INOUT),则调⽤CallableStatement对象的registerOutParameter(…)⽅法,该⽅法第⼀个参数指明替代第⼏个占位符,第⼆个参数指明该存储过程的输出参数在数据库中的SQL类型,在Java程序中可以使⽤Types类的字段指定。
最后通过CallableStatement对象的execute()⽅法执⾏存储过程,即可通过getXXX⽅法获取prepareCall⽅法参数中占位符类型为输出的参数值。
JDBC连接数据库步骤流程
JDBC连接数据库步骤流程JDBC(Java Database Connectivity)是Java语言操作数据库的一种标准API。
下面是JDBC连接数据库的步骤流程,包括导入所需的类、加载数据库驱动程序、建立数据库连接、执行SQL语句等。
1.导入所需的类在Java代码中,首先需要导入JDBC相关的类和接口。
通常会导入java.sql及javax.sql包中的类。
```javaimport java.sql.*;```2.加载数据库驱动程序在使用JDBC之前,需要预先加载适当的数据库驱动程序。
不同的数据库有不同的驱动程序,具体可以查看相应数据库的官方文档。
一般来说,数据库驱动程序是通过使用Class.forName(方法来加载的。
```java```3.建立数据库连接连接到数据库需要指定数据库的URL、用户名和密码。
首先需要创建一个Connection对象,然后使用DriverManager类的getConnection(方法来建立数据库连接。
```javaString url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";Connection conn = DriverManager.getConnection(url, username, password);```4.创建执行SQL语句的对象对数据库进行操作前,需要创建一个Statement或PreparedStatement对象。
Statement对象用于执行静态的SQL语句,而PreparedStatement对象用于执行动态的SQL语句,可以通过占位符传递参数。
```javaStatement stmt = conn.createStatement(;PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM mytable WHERE id = ?");```5.执行SQL语句可以使用Statement的execute(、executeQuery(或executeUpdate(方法来执行SQL语句。
JDBC调用存储过程
JDBC调用存储过程如果想要使用JDBC执行存储过程,应该使用CallableStatement接口。
CallableStatement接口继承自PreparedStatement接口。
所以CallableStatement接口包含有Statement接口和PreparedStatement接口定义的全部方法,但是并不是所有的方法我们都要使用,主要使用的方法如表-1所示。
execute()方法可以用来执行存储过程。
CallableStatement为所有的数据库提供了一种统一的标准形式调用存储过程。
所以,你将会看到我们使用execute()调用存储过程的语法与在SQLServer中会所有不同。
为了获得存储过程或函数的返回值,我们需要使用 registerOutParameter()方法将返回的参数注册为SQL的类型。
registerOutParameter()方法的第一个参数是参数的序号,第一个为1,第二个为2,以此类推。
第二个参数需要一个int值,用来标记SQL的类型,我们可以使用java.sql.Types类中的常量来设置这个参数。
比如VARCHAR、DOUBLE等类型。
如果类型不够用,也可以从具体数据库的驱动中寻找合适的类型常量。
如果存储过程或函数有返回值,这个方法是必须要调用的,否则无法得到返回值,甚至会发生异常。
CallableStatement接口中定义了很多get方法,表格中的“Type”是指各种基本数据类型和String、Date、Time、Timestamp、Object等类型,用于获取存储过程返回的值,根据值的类型不同,你可以使用不同get方法,比如getInt()、getString()、getDouble()等等。
我们看一下使用CallableStatement接口执行存储过程和函数的语法格式。
语法:存储过程:{call <procedure-name>[(<arg1>,<arg2>, ...)]}函数:{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}如果要调用存储过程,则使用第一种语法,就是开头不带问号的语法,call后面是过程名,如果没有参数,可以省略小括号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
listResult.add(cs.getResultSet().getObject(num)); }
} } } }
/**
* 执行增删改存储过程
* @param procName 存储过程名称
* @param list
参数集合
* @return
影响行数
*/
public int executeUpdate(String procName,Lisurn * @throws Exception
file:///C|/Documents and Settings/Administrator/桌面/JDBC连接数据库BaseDao通用类(可以调用存储过程).txt[2011-6-9 23:40:30]
*/ private Connection openConnection()throws Exception{
Result result=null; try {
connection=openConnection(); cs=connection.prepareCall("{call "+procName+"}");
file:///C|/Documents and Settings/Administrator/桌面/JDBC连接数据库BaseDao通用类(可以调用存储过程).txt[2011-6-9 23:40:30]
file:///C|/Documents and Settings/Administrator/桌面/JDBC连接数据库BaseDao通用类(可以调用存储过程).txt[2011-6-9 23:40:30]
....
cs = conn.prepareCall(sql); cs.setString(1, "xxx") ;//设置输入参数值 cs.registerOutParameter(2, Types.CHAR); //将第2个参数设为输出 cs.execute(); String res = cs.getString(2) ;// 获得执行后的输出值*/
System.out.println("关闭错误: "+e.getMessage()); }
}
/** * 通用赋值 * @param cs 预编译对象 * @param list 参数集合 * @throws Exception */ private void SetValues(CallableStatement cs,List list)throws Exception{
int row=0;
try {
connection=openConnection();
cs=connection.prepareCall("{call "+procName+"}");
this.SetValues(cs, list); row=cs.executeUpdate();
/*String sql = "{call pro_name(?, ?)}"; //调用pro_name,两个参数,假设第 1个参数为输入,第二个为输出
} }
/** * 获取存储过程输出参数的值 * @param cs 执行预计对象 * @param list 参数集合 * @param listResult 输出结果集合 * @throws Exception */ private void GetValue(CallableStatement cs,List list,List listResult)throws Exception{
this.SetValues(cs, list); rs=cs.executeQuery(); result=ResultSupport.toResult(rs); } catch (Exception e) { System.out.println("执行带查询的存储过程错误:"+e.getMessage()); }finally{ this.closeAll(null, cs, connection); } return result; } }
import java.util.ArrayList; import java.util.List;
import javax.servlet.jsp.jstl.sql.Result; import javax.servlet.jsp.jstl.sql.ResultSupport;
public class BaseDaoOutput { private static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver"; private static final String URL="jdbc:sqlserver://localhost:1433;databaseName=bankdb"; private static final String USER="sa"; private static final String PASSWORD="sa"; Connection connection=null; CallableStatement cs=null; ResultSet rs=null;
file:///C|/Documents and Settings/Administrator/桌面/JDBC连接数据库BaseDao通用类(可以调用存储过程).txt[2011-6-9 23:40:30]
if(list!=null){ if(list.contains("outputParameter")){ for(int num=0;num<list.size();num++){ if(list.get(num).equals("outputParameter")){
try { if(rs!=null) { rs.close(); rs=null; } if(cs!=null){ cs.close(); cs=null; } if(con!=null){ con.close(); con=null; }
} catch (Exception e) {
file:///C|/Documents and Settings/Administrator/桌面/JDBC连接数据库BaseDao通用类(可以调用存储过程).txt[2011-6-9 23:40:30]
if(cs!=null && list!=null){ for(int count=0;count<list.size();count++){ if(!list.get(count).equals("outputParameter")){ cs.setObject(count+1, list.get(count)); } }
Class.forName(DRIVER); return DriverManager.getConnection(URL,USER,PASSWORD); }
/** * 关库 * @param rs 结果集 * @param cs 执行对象 * @param con 连接对象 * @throws Exception */ private void closeAll(ResultSet rs,PreparedStatement cs,Connection con){
package pany.atm.dao;
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet;
file:///C|/Documents and Settings/Administrator/桌面/JDBC连接数据库BaseDao通用类(可以调用存储过程).txt[2011-6-9 23:40:30]
} catch (Exception e) { System.out.println("执行增删改错误:"+e.getMessage());
}finally{ this.closeAll(null, cs, connection);
} return row; }
/** * 执行带查询的存储过程 * @param procName 存储过程名 * @param list 参数集合 * @return 返回查询结果 */ public Result executeQuery(String procName,List list) {