JDBC入门(1)—— 入门案例

   JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

一、Java连接数据库示例:

1、步骤:

  • 导jar包:驱动。
  • 加载驱动类:Class.forName("类名");
  • 给出url、username、password,其中url背下来。
  • 使用DriverManager类来得到Connection对象。
 1 public class Demo1 {
 2     /**
 3      * ClassNotFoundException:
 4      * 没有导入驱动包
 5      *
 6      * SQLException:
 7      *  检查三个参数:url、username、password是否正确
 8      *  检查是否开启了mysql服务器。
 9      *
10      */
11     @Test
12     public void fun1() throws ClassNotFoundException,SQLException{
13         /**
14          * jdbc四大配置参数
15          *   driverClassName:com.mysql.jdbc.Driver
16          *   url:jdbc:mysql://localhost:3306/数据库名
17          *   username:root
18          *   password:
19          */
20         Class.forName("com.mysql.jdbc.Driver");//加载驱动类(注册驱动)
21 
22         //使用url、username、password,得到连接对象
23         Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb_1","root","");
24  System.out.println(con); 25  } 26 }

2、基本异常

未导驱动包:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver ;

数据库不存在:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'mydb';

端口错误:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure;

密码错误:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES);

用户不存在:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES);

二、JDBC原理

Class.forName("com.mysql.jdbc.Driver");//此据等同于以下面两句,与最后一句的逻辑关系
com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver;
DriverManager.registerDriver(driver);
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb_1","root","");

  所有的java.sql.Driver实现类,都提供了static块,块内的代码就是把自己注册到DriverManage中,如com.mysql.jdbc.Driver中的部分源码:

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    //
    // Register ourselves with the DriverManager
    //
    static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } } /** * Construct a new driver and register it with DriverManager * * @throws SQLException * if a database error occurs. */ public Driver() throws SQLException { // Required for Class.forName().newInstance()  } }

  JDBC 4.0之后,每个驱动jar包中,在META-INF/services目录下提供了一个名为java.sql.Driver的文件,文件的内容就是该接口的实现类名称。连接数据库例子中,第20行“Class.forName("com.mysql.jdbc.Driver");”可省略不写。

三、使用JDBC对数据库进行简单的增删改查操作示例

  1 package demo2;
  2 
  3 import org.junit.Test;
  4 import java.sql.*;
  5 
  6 public class Demo2 {
  7     /*
  8     * 对数据库进行增、删、改操作
  9     * */
 10  @Test 11 public void fun1() throws ClassNotFoundException,SQLException { 12 /* 13 * 一、得到Connection 14 * 1、准备四个参数 15 * 2、加载驱动类 16 * 3、得到Connection 17 * */ 18 19 String driverClassName = "com.mysql.jdbc.Driver"; 20 //jdbc协议的格式,jdbc:工商的名称:子协议(由工商自己来规定) 21 //对mysql而言,它的子协议结构://主机:端口号/数据库名称 22 String url = "jdbc:mysql://localhost:3306/mydb1"; 23 String username = "root"; 24 String password = ""; 25 //加载驱动类 26  Class.forName(driverClassName); 27 //使用DriverManager,以及剩下的三个参数,得到Connection 28 Connection con = DriverManager.getConnection(url, username, password); 29 /* 30 * 二、对数据库做增删改 31 *1、通过Connection对象创建Statement 32 * Statement 语句的发送器,它的功能就是向数据库发送sql语句, 33 *2、调用它的int executeUpdate(String sql),它可以发送DML、DDL 34 * */ 35 Statement stmt = con.createStatement(); 36 // String sql = "INSERT INTO stu VALUES('0003','wangwu',88,'male')"; 37 // String sql = "UPDATE stu SET name='zhaoliu',age=22,gender='female' WHERE " 38 // "number='0003'"; 39 String sql = "DELETE FROM stu"; 40 int r = stmt.executeUpdate(sql); 41  System.out.println(r); 42  } 43 /* 44 * 执行查询操作 45 * */ 46  @Test 47 public void fun2() throws ClassNotFoundException,SQLException { 48 49 /* 50 * 一、得到Connection 51 * 二、得到Statement,发送select语句 52 * 三、对查询返回的"表格"进行解析 53 * */ 54 /* 55 * 一、得到连接 56 * */ 57 String driverClassName = "com.mysql.jdbc.Driver"; 58 String url = "jdbc:mysql://localhost:3306/mydb1"; 59 String username = "root"; 60 String password = ""; 61 62  Class.forName(driverClassName); 63 Connection con = DriverManager.getConnection(url,username,password); 64 /* 65 * 二、得到Statement,执行select语句 66 * */ 67 Statement stmt = con.createStatement(); 68 /* 69 *调用Statement的ResultSet rs = executeQuery(String querySql); 70 * */ 71 ResultSet rs = stmt.executeQuery("SELECT * FROM emp"); 72 /* 73 * 三、解析ResultSet 74 * 1、把行光标移动到第一行,可以调用next()方法完成。 75 * */ 76 while (rs.next()) { //把光标向下移动一行,并判断下一行是否存在 77 int empno = rs.getInt(1);//通过列编号来获取该列的值 78 String ename = rs.getString("ename");//通过列名称来获取该列的值 79 double sal = rs.getDouble("sal"); 80 81 System.out.println(empno "," ename "," sal); 82  } 83 /* 84 * 四、关闭资源 85 * 倒关 86 * */ 87  rs.close(); 88  stmt.close(); 89 con.close();//必须关,不关就死。 90  } 91 //规范化 92  @Test 93 public void fun3() throws Exception { 94 Connection con = null;//定义引用 95 Statement stmt = null; 96 ResultSet rs = null; 97 try { 98 //一、得到Connection 99 String driverClassName = "com.mysql.jdbc.Driver"; 100 String url = "jdbc:mysql://localhost:3306/mydb1"; 101 String username = "root"; 102 String password = ""; 103  Class.forName(driverClassName); 104 con = DriverManager.getConnection(url,username,password);//实例化 105 //二、创建Statement 106 stmt = con.createStatement(); 107 String sql = "SELECT * FROM emp"; 108 rs = stmt.executeQuery(sql);//实例化 109 //三、循环遍历rs,打印其中数据 110 //getString()和getObject()是通用的 111 int count = rs.getMetaData().getColumnCount(); 112 while (rs.next()) { 113 for (int i = 1; i <= count; i ) { 114  System.out.print(rs.getString(i)); 115 if (i<count) { 116 System.out.print(","); 117  } 118  } 119  System.out.println(); 120  } 121 122 } catch (Exception e) { 123 throw new RuntimeException(e); 124 } finally { 125 //为了防止空指针异常发生,使用判断语句 126 if(rs != null) rs.close(); 127 if(stmt != null) stmt.close(); 128 if(con != null) con.close(); 129  } 130  } 131 }

 四、注意:数据库的列号是从1开始计算的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值