Swing·图书管理系统项目回顾之JDBC

swing图书管理系统项目视频来自这里     http://www.java1234.com/a/yuanchuang/swing/

一.关于JDBC

  JDBC是实现Java程序与数据库系统互连的标准API,由一组Java语言编写的类和接口组成。它允许发送SQL语句给数据库,并处理执行结果。使用JDBC API编写的程序可以很容易实现对不同的数据库的访问。

 

二.编写访问数据库的Java程序主要步骤如下

  注册驱动程序------>建立驱动程序和数据库的连接------>建立语句对象------>利用语句对象执行SQL语句------>处理结果------>关闭对象; 

  本讲因为项目结构原因并未按照上面的步骤加以总结

 

三,驱动程序与数据库的连接及关闭

1).JDBC数据库编程之驱动程序与数据库的连接及关闭的代码实现[很经典的,代码如下]

 1 package com.java1234.util;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 
 6 public class DbUtil {
 7     //想要连接的数据库的地址
 8     private String dbUrl = "jdbc:mysql://localhost:3306/db_book";
 9     //数据库系统用户名
10     private String userName = "root";
11     //数据库系统密码
12     private String password = "123456";
13     //数据库驱动包名
14     private String jdbcName = "com.mysql.jdbc.Driver";
15 
16     //获取连接
17     public Connection getCon() throws Exception{
18                 //注册驱动程序,推荐这种方式,不会对具体的驱动类产生依赖
19         Class.forName(jdbcName);
20    
21                //建立驱动程序与数据库的连接
22         Connection conn = DriverManager.getConnection(dbUrl, userName, password);
23         return conn;
24     }
25     
26 
27     //关闭与数据库的连接
28     public void conClose(Connection conn) throws Exception{
29         if(conn != null){
30             conn.close();            
31         }
32     }
33     
34     public static void main(String args[]) throws Exception{
35         DbUtil dbUtil = new DbUtil();
36         Connection conn = dbUtil.getCon();
37         System.out.println("成功建立驱动程序与数据库的连接");
38         dbUtil.conClose(conn);
39         System.out.println("成功关闭驱动程序与数据库的连接");
40     }
41 }
42     

2)详细解析

  1.数据库的地址   

1 private String dbUrl = "jdbc:mysql://localhost:3306/db_book";

    第一个参数是JDBC URL,格式:  子协议:子名称://主机名:端口/数据库名

  2.参考  Class.forName()详解

      Class.forName(String className)在JDK帮助文档中是这样说的:返回与带有给定字符串名的类或接口相关联的Class对象,

    参数className是所需类的完全限定名;返回值是具有指定名的类的Class对象.如调用

    1 Class.forName(jdbcName);

    将导致名为jdbcName的类被初始化.

    jdk对Driver的说明中有以下一段话:

       When a Driver class is loaded, it should create an instance of itself and register it with the DriverManager

    com.mysql.jdbc的原代码如下:

      1     package com.mysql.jdbc      
     2          
     3     public class Driver extends NonRegisteringDriver implements java.sql.Driver {      
     4      // ~ Static fields/initializers      
     5      // --------------------------------------------- //      
     6      // Register ourselves with the DriverManager      
     7      //      
     8      static {      
     9         t ry {      
    10                   java.sql.DriverManager.registerDriver(new Driver());      
    11               } catch (SQLException E) {      
    12                   throw new RuntimeException("Can't register driver!");      
    13               }      
    14       }      
    15     // ~ Constructors      
    16      // -----------------------------------------------------------      
    17     /**    
    18       * Construct a new driver and register it with DriverManager    
    19       *     
    20       * @throws SQLException    
    21       *             if a database error occurs.    
    22       */     
    23      public Driver() throws SQLException {      
    24          // Required for Class.forName().newInstance()      
    25      }      
    26     }       

    即通过Class.forName(DriverString)会向DriverManager注册该Driver类.所以可以直接调用。 正是因为Class.forName()方法已经    要求JVM查找并加载指定的类(即com.mysql.jdbc.Driver类),

 

    1  java.sql.DriverManager.registerDriver(new Driver());

 

    Connection conn = DriverManager.getConnection(dbUrl, userName, password);

 

   上面这条语句才可以成功获取连接。

 

   3. 关于DriverManager类DriverManager.getConnection()方法

      摘自API:于DriverManager管理一组 JDBC 驱动程序的基本服务,DriverManager类中public static Connection getConnection  ((String url, String user, String password)方法试图建立到给定数据库 URL 的连接。在调用 getConnection 方法时,DriverManager会试着从初始化时加载的那些驱动程序中查找合适的驱动程序。

 

四.建立语句对象并执行SQL语句

  部分Java程序设计课本上建立语句对象时用的是利用Statement对象讲SQL语句发送到数据库中,这里我们用到的是PreparedStatement对象,可参见百度百科对此的介绍http://baike.baidu.com/view/890310.htm

   

 String sql = "select * from t_user where userName = ? and password = ?";
        /**
         *String sql = "insert into t_bookType values(null, ?, ?)";//插入
         *String sql = "update t_bookType set bookTypeName=?,bookTypeDesc=? where id=?";//更新
         *String sql = "delete from t_bookType where id=?";//删除
         */
//创建一个 PreparedStatement 对象来将参数化的  SQL 语句发送到数据库    
PreparedStatement pst = conn.prepareStatement(sql);
//将SQL语句的第 1个参数设定为给定值user.getUserName()
pst.setString(1, user.getUserName());
//将SQL语句的第 2个参数设定为给定值user.getPassword()
pst.setString(2, user.getPassWord());

 

五.处理结果 

/**
* 接口 ResultSet:
* 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成
* ResultSet 对象具有指向其当前数据行的光标。
* 最初,光标被置于第一行之前。next 方法将光标移动到下一行;
* 因为该方法在 ResultSet 对象没有下一行时返回 false
*/

/**
* 接口类同抽象类一样不能用new创建它的实例对象,
* 但可以定义接口引用类型的变量
* 并将它指向实现接口的对象
*/

/**
*查询使用executeQuery方法,该方法用于产生单个结果集的语句,
*返回结果及R
esultSet
*/
ResultSet rs = pst.executeQuery();/*执行sql语句*/
User resultUser = null;
if(rs.next()){
resultUser = new User();//此处需要User的无参构造函数
/**
* String getString(String columnLabel)方法
* 以 Java 编程语言中 String 的形式获取此 ResultSet
* 对象的当前行中指定列columnLabel的值
*/
resultUser.setUserName(rs.getString("userName"));
resultUser.setPassWord(rs.getString("password"));
}
return resultUser;

  

 

  

  

     

转载于:https://www.cnblogs.com/hipk/articles/3107213.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值