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方法,该方法用于产生单个结果集的语句,
*返回结果及ResultSet
*/
及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;