JDBC连接数据库概述

直接介绍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         <tr>
25             <td><%=application.getAttribute("id") %></td>
26             <td><img src="<%=application.getAttribute("goodspic") %>"><%=application.getAttribute("goods_name") %></td>
27             <td>¥<%=application.getAttribute("goods_pri") %></td>
28             <td><input type="text" name="<%=application.getAttribute("goods_name_en") %>" id="" value="" placeholder="0"></td>
29         </tr>
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 = conn
11                     .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     <label>顾客信息</label>
18     <table border="1">
19         <tr>
20             <td>姓名:</td>
21             <td>密码:</td>
22         </tr>
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         <tr>
32         <%--     <td><%=new String(rs.getString("name")).getBytes("iso-8859-1")%></td> --%>
33             <td><%=rs.getString("name")    %></td>
34             <td><%=rs.getString("password") %></td>
35         </tr>
36         <%
37             }
38         %>
39     </table>
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值