博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC连接数据库概述
阅读量:6982 次
发布时间:2019-06-27

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

直接介绍JDBC连接数据库的流程及其原理

创建一个以JDBC连接数据库的程序,包含7个步骤

1、加载JDBC数据库驱动

 在连接数据库之前,首先要加载想要连接的数据库的驱动,就是数据库厂商提供的jar包,将它加载到JVM(Java虚拟机)中,这通过java.lang.Class类的静态方法forName(String className)实现。

 

例如:

 

01
try{
 
 
03
//加载MySql的驱动类
04
//不同的数据库提供的驱动包是不一样的,在下面大家将会看到常用的驱动类。
05
Class.forName("com.mysql.jdbc.Driver") ;
06
System.out.println("成功加载驱动");
 
 
08
}catch(ClassNotFoundException e){
 
 
10
System.out.println("找不到驱动程序类 ,加载驱动失败!");
 
 
12
e.printStackTrace() ;
 
 
14
}

 

 成功加载后,会将Driver类的实例注册到DriverManager类中,我们在下一步中,就可以直接调用类中的方法。

 

2、提供JDBC连接的URL

•连接URL定义了连接数据库时的协议、子协议、数据源标识。

•书写形式:协议:子协议:数据源标识

协议:在JDBC中总是以jdbc开始

子协议:是桥连接的驱动程序或是数据库管理系统名称。

数据源标识:标记找到数据库来源的地址与连接端口。

1 String url = "jdbc:mysql://127.0.0.1:3301/shopcar";//数据库连接字符串2 String usename = "root";3 String password = "123456";

3、创建数据库的连接

•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。

•使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。

1 try{2 Connection conn = DriverManager.getConnection(url,usename,password);//创建Connection连接3 4 }catch(SQLException se){5     System.out.println("数据库连接失败!");6     se.printStackTrace() ;7 }

4、创建一个Statement

•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:

1、执行静态SQL语句。通常通过Statement实例实现。

2、执行动态SQL语句。通常通过PreparedStatement实例实现。

3、执行数据库存储过程。通常通过CallableStatement实例实现。

具体的实现方式:

1
Statement stmt = con.createStatement() ;
2
PreparedStatement pstmt = con.prepareStatement(sql) ;
3
CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ;

5、执行SQL语句

Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate

和execute

1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。

2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或

DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等

3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。

具体实现的代码:

 

1
ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
2
int rows = stmt.executeUpdate("INSERT INTO ...") ;
3
boolean flag = stmt.execute(String sql) ;

 

6、处理结果

两种情况:

1、执行更新返回的是本次操作影响到的记录数。

2、执行查询返回的结果是一个ResultSet对象。

• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。

• 使用结果集(ResultSet)对象的访问方法获取数据:

1 while(rs.next()){2 String name = rs.getString("name") ;3 String pass = rs.getString(1) ; // 此方法比较高效4 }
 

(列是从左到右编号的,并且从列1开始)

7、关闭JDBC对象

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:

1、关闭记录集

2、关闭声明

3、关闭连接对象

1 if(rs != null){ // 关闭记录集 2 try{ 3     rs.close(); 4 }catch(SQLException e){ 5     e.printStackTrace(); 6  } 7 } 8  9 if(srmt != NULL){
//关闭申明10 try{11   stmt.close();12 }catch(SQLException e){13 e.printStackTrace();14 }15 }16 17 if(conn != null){
//关闭连接对象18 try{19   conn.close();20 }catch(SQLException e){21 e.printStackTrace();22 }23 }

总结:在此,完整的演示一个连接数据库的实例

 

1 try{ 2     Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动,注册到驱动管理器 3     String url = "jdbc:mysql://127.0.0.1:3301/shopcar";//数据库连接字符串 4     String usename = "root"; 5     String password = "123456"; 6     Connection conn = DriverManager.getConnection(url,usename,password);//创建Connection连接 7     // statement用来执行SQL语句 8     Statement stmt = conn.createStatement(); 9     // 结果集10     ResultSet rs = stmt.executeQuery("select * from `goods1`");11     // student 为你表的名称12     while (rs.next()) {13         application.setAttribute("id", rs.getString("id"));14         application.setAttribute("goods_name", rs.getString("goods_name"));15         application.setAttribute("goodspic", rs.getString("goodspic"));16         application.setAttribute("goods_pri", rs.getString("goods_pri"));17         application.setAttribute("goods_name_en", rs.getString("goods_name_en"));18         /* String id = (rs.getString("id"));19         String goods_name = (rs.getString("goods_name"));20         String goodspic = (rs.getString("goodspic"));21         String goods_pri = (rs.getString("goods_pri"));22         String goods_name_en = (rs.getString("goods_name_en")); */23 %>24         25             <%=application.getAttribute("id") %>26             "><%=application.getAttribute("goods_name") %>27             ¥<%=application.getAttribute("goods_pri") %>28             " id="" value="" placeholder="0">29         30 <%        31         32         }33 34     }catch(ClassNotFoundException e){35         e.printStackTrace();36     }catch(SQLException e){37         e.printStackTrace();38     }

 

 

 

1     <% 2         try { 3             Class.forName("com.mysql.jdbc.Driver"); 4             String url = "jdbc:mysql://127.0.0.1:3301/test"; 5             String username = "root"; 6             String password = "123456"; 7             Connection conn = DriverManager.getConnection(url, username, 8                     password); 9 10             PreparedStatement preStmt = conn11                     .prepareStatement("SELECT name,password FROM user WHERE name like ? ");12 13             String pram = request.getParameter("parm");14             preStmt.setString(1, "%"+pram+"%");//给参数(?)赋值15             ResultSet rs = preStmt.executeQuery();//执行SQL语句16     %>17     18     
19
20
21
22
23 24 <%25 while (rs.next()) {26 String name = new String(rs.getString("name").getBytes(27 "iso-8859-1"));28 name += new String(rs.getString("password").getBytes(29 "iso-8859-1")); 30 %>31
32 <%--
--%>33
34
35
36 <%37 }38 %>39
姓名: 密码:
<%=new String(rs.getString("name")).getBytes("iso-8859-1")%> <%=rs.getString("name") %> <%=rs.getString("password") %>
40 41 <%42 } catch (SQLException e) {43 e.toString();44 } finally {45 if (rs != null)46 try {47 rs.close();48 } catch (SQLException e) {49 out.print(e.toString());50 } finally {51 try {52 if (preStmt != null)53 preStmt.close();54 } catch (SQLException e) {55 e.toString();56 } finally {57 try {58 if (conn != null)59 conn.close();60 } catch (SQLException e) {61 e.toString();62 }63 }64 } 65 }66 %>

 

 

 

转载于:https://www.cnblogs.com/xs-yqz/p/4930456.html

你可能感兴趣的文章
ondblog 修改informix日志模式
查看>>
ipvsadm命令参考
查看>>
网站排名下降的原因
查看>>
公司内部exchange2010 下删除误发邮件
查看>>
利用gevent实现异步执行任务
查看>>
我的友情链接
查看>>
Unix数据中心主宠儿
查看>>
有点小高兴
查看>>
linux svn使用方法
查看>>
linux入门(三)常见Linux指令及其用法
查看>>
php-fpm慢执行日志
查看>>
Course
查看>>
[UML]UML系列——包图Package
查看>>
jquery 获取Select option 选择的Text和Value
查看>>
后海日记(8)
查看>>
HTML5学习之二:HTML5中的表单2
查看>>
CSS盒模型及边距问题
查看>>
UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索
查看>>
AlexNet 网络详解及Tensorflow实现源码
查看>>
day07 -文件的基本操作
查看>>