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

java数据库连接)是一种用于执行SQL语句的Java,一、Java连接数据库示例,java数据库连接)是一种用于执行SQL语句的Java,一、Java连接数据库示例,java数据库连接)是一种用于执行SQL语句的Java,一、Java连接数据库示例,SUN提供的规范命名为JDBC,而JDBC驱动才是接口的实现

JDBC入门(1),jdbc入门

   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 }

 

JDBC(Java DataBase
Connectivity,java数据库连续)是一种用于实施SQL语句的Java
API,可认为八种关周到据库提供统一访问,…

  • 导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 }

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

1 什么是JDBC(接口,达成为使得)

  JDBC(Java DataBase
Connectivity)便是Java数据库连接,说白了就是用Java语言来操作数据库。原本作者们操作数据库是在调节台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

 

  全部的java.sql.Driver达成类,都提供了static块,块内的代码便是把团结注册到DriverManage中,如com.mysql.jdbc.Driver中的部分源码:

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","");

JDBC入门

l  导jar包:驱动!

l  加载驱动类:Class.forName(“类名”);

l  给出url、username、password,

l  使用DriverManager类来博取Connection对象!

 

 

 

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原理

3 JDBC核心类(接口)介绍

JDBC中的主旨类有:DriverManager、Connection、Statement,和ResultSet!

DriverManger(驱动管理器)的法力有三个:

l  注册驱动:那可以让JDBC知道要运用的是哪个驱动;


获取Connection:假设可以赢获得Connection,那么评释已经与数据库连接上了。

 

Connection对象表示连接,与数据库的通信都是经过那些目的进行的:

l  Connection最为首要的四个措施便是用来博取Statement对象;

 

Statement是用来向数据库发送SQL语句的,那样数据库就能履行发送过来的SQL语句:

l  void executeUpdate(String
sql):实行更新操作(insert、update、delete等);

l  ResultSet executeQuery(String
sql):实践查询操作,数据库在实行查询后会把询问结果,查询结果正是ResultSet;

 

ResultSet对象表示查询结果集,唯有在施行查询操作后才会有结果集的发出。结果集是一个二维的报表,有行有列。操作结果集要学习活动ResultSet内部的“行光标”,以及得到当前行上的每一列上的数量:

l  boolean next():使“行光标”移动到下一行,并再次回到移动后的行是还是不是留存;

l  XXX getXXX(int
col):获取当前行钦命列上的值,参数便是列数,列数从1发端,并非0。

 

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

1、步骤:

2 JDBC原理

最初SUN公司的天赋们想编写一套能够接连天下全数数据库的API,不过当他俩刚刚初叶时就意识那是不可实现的职责,因为各类商家的数据库服务器差别太大了。后来SUN初始与数据库厂家们商议,最终得出的下结论是,由SUN提供一套访问数据库的科班(便是一组接口),并提供连接数据库的磋商正式,然后千家万户数据库香港中华厂商联合会服从SUN的正规化提供一套访问本身公司的数据库服务器的API出现。SUN提供的正规命名称为JDBC,而一一厂家提供的,遵从了JDBC规范的,能够访问自个儿数据库的API被称之为驱动!

 

JDBC是接口,而JDBC驱动才是接口的贯彻,未有驱动不能够形成数据库连接!各个数据库商家都有本人的驱动,用来连接自个儿集团的数据库。

道理当然是那样的还应该有第三方集团专门为某一数据库提供驱动,那样的驱动往往不是开源无需付费的!

 

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

三、使用JDBC对数据库实行简要的增加和删除改查操作示例

4 Hello JDBC

 

上边开头编写制定第一个JDBC程序

4.1 mysql数据库的驱动jar包:mysql-connector-java-5.1.13-bin.jar;

4.2 获取连接

获取连接必要两步,一是使用Driver
Manager来注册驱动,二是应用DriverManager来获取Connection对象。

  1. 挂号驱动

看领悟了,注册驱动就独有一句话:Class.forName(“com.mysql.jdbc.Driver”),上边包车型大巴剧情都以对这句代码的分解。今后大家的代码中,与注册驱动相关的代码唯有这一句。

DriverManager类的registerDriver()方法的参数是java.sql.Driver,但java.sql.Driver是一个接口,完毕类由mysql驱动来提供,mysql驱动中的java.sql.Driver接口的完成类为com.mysql.jdbc.Driver!那么注册驱动的代码如下:

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

地点代码尽管能够注册驱动,可是现身硬编码(代码信赖mysql驱动jar包),假使以后想连接Oracle数据库,那么必必要修改代码的。而且实际这种注册驱动的秘技是注册了一遍驱动!

JDBC中分明,驱动类在被加载时,须求团结“主动”把温馨注册到DriverManger中,上面大家来拜谒com.mysql.jdbc.Driver类的源代码:(有静态代码块)

com.mysql.jdbc.Driver.java

public class Driver extends NonRegisteringDriver implements java.sql.Driver {

    static {

       try {

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

       } catch (SQLException E) {

           throw new RuntimeException("Can’t register driver!");

       }

    }

……

}

 

com.mysql.jdbc.Driver类中的static块会创建本类对象,并登记到DriverManager中。那注明只要去加载com.mysql.jdbc.Driver类,那么就能够实践那个static块,进而也就能够把com.mysql.jdbc.Driver注册到DriverManager中,所以能够把注册驱动类的代码修改为加载驱动类

Class.forName(“com.mysql.jdbc.Driver”);

 

  1. 收获连接

赢得连接的也唯有一句代码:DriverManager.getConnection(url,username,password),在那之中username和password是登陆数据库的用户名和密码,假诺自个儿没说错的话,你的mysql数据库的用户名和密码分别是:root、123。

url核对复杂一点,它是用来找到要连接数据库“网站”,就好比你要浏览器中搜寻百度时,也亟需提供贰个url。上面是mysql的url:

jdbc:mysql://localhost:3306/mydb1

JDBC规定url的格式由三片段组成,各类部分中档使用冒号分隔。

l  第二盘部是jdbc,那是长久的;

l  第二某些是数据库名称,那么连接mysql数据库,第二有的当然是mysql了;


第三有些是由数据库商家规定的,大家必要掌握各样数据库厂家的渴求,mysql的首盘部各自由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE名称(mydb1)组成。

  

上边是获得连接的言辞:

Connection con =
DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb1”,”root”,”123”);

 

还是能在url中提供参数

jdbc:mysql://localhost:3306/mydb1?useUnicode=true&characterEncoding=UTF8

 

useUnicode参数内定那一个延续数据库的长河中,使用的字节集是Unicode字节集;

characherEncoding参数钦赐穿上连年数据库的历程中,使用的字节集编码为UTF-8编码。请留神,mysql中钦定UTF-8编码是提交的是UTF8,并非UTF-8。要小心了!

 

4.3 获取Statement(createStatement)

在获取Connectoin之后,表达已经与数据库连接上了,上面是经过Connection创设Statement对象的代码:

Statement stmt = con.createStatement();

Statement是用来向数据库发送要实行的SQL语句的!

4.4 发送SQL增、删、改语句(insert  into只会耳闻则诵一行,delete和update
N行)

String sql = “insert into user values(’zhangSan’, ’123’)”;

int m = stmt.executeUpdate(sql);

中间int类型的重临值表示推行那条SQL语句所影响的行数,大家通晓,对insert来说,最终只好影响一行,而update和delete只怕会影响0~n行。

如果SQL语句实行停业,那么executeUpdate()会抛出多个SQLException。

4.5 发送SQL查询语句【ResultSet结果集】

String sql = “select * from user”;

ResultSet rs = stmt.executeQuery(sql);

请留神,实践查询利用的不是executeUpdate()方法,而是executeQuery()方法。executeQuery()方法重回的是ResultSet,ResultSet封装了查询结果,大家称为结果集。

4.6 读取结果聚集的数据

ResultSet就是一张二维的报表,它里面有叁个“行光标”,光标默许的岗位在“第一行上方”,大家得以调用rs对象的next()方法把“行光标”向下活动一行,当第一次调用next()方法时,“行光标”就到了第一行记录的任务,那时就足以采用ResultSet提供的getXXX(int
col)方法来博取内定列的多寡了:

rs.next();//光标移动到第一行

rs.getInt(1);//获取第一行第一列的数据

当你使用rs.getInt(1)方法时,你不能够不可能一定第1列的数据类型正是int类型,如若你无法一定,那么最佳使用rs.getObject(1)。在ResultSet类中提供了一多种的getXXX()方法,相比常用的不二等秘书技有:

Object getObject(int col)

String getString(int col)

int getInt(int col)

double getDouble(int col)

4.7 关闭

与IO流同样,使用后的事物都急需关闭!关闭的顺序是先拿走的后关门,后拿走的先关闭。

rs.close();

stmt.close();

con.close();

 

4.8 代码

 

    public static Connection getConnection() throws Exception {

       Class.forName("com.mysql.jdbc.Driver");

       String url = "jdbc:mysql://localhost:3306/mydb1";

       return DriverManager.getConnection(url, "root", "123");

    }

    @Test

    public void insert() throws Exception {

       Connection con = getConnection();

       Statement stmt = con.createStatement();

       String sql = "insert into user values(‘zhangSan’, ‘123’)";

       stmt.executeUpdate(sql);

       System.out.println("插入成功!");

    }

    @Test

    public void update() throws Exception {

       Connection con = getConnection();

       Statement stmt = con.createStatement();

       String sql = "update user set password=’456′ where username=’zhangSan’";

       stmt.executeUpdate(sql);

       System.out.println("修改成功!");

    }

    @Test

    public void delete() throws Exception {

       Connection con = getConnection();

       Statement stmt = con.createStatement();

       String sql = "delete from user where username=’zhangSan’";

       stmt.executeUpdate(sql);

       System.out.println("删除成功!");

    }

    @Test

    public void query() throws Exception {

       Connection con = getConnection();

       Statement stmt = con.createStatement();

       String sql = "select * from user";

       ResultSet rs = stmt.executeQuery(sql);

       while(rs.next()) {

           String username = rs.getString(1);

           String password = rs.getString(2);

           System.out.println(username + ", " + password);

       }

    }

 

4.9 标准化代码(对于那多少个以及财富的管理,用try catch finally)

所谓规范化代码正是不管是或不是出现万分,都要关闭ResultSet、Statement,以及Connection,假设你还记得IO流的规范化代码,那么下边包车型地铁代码你就清楚什么意思了。

 

    @Test

    public void query() {

       Connection con = null;

       Statement stmt = null;

       ResultSet rs = null;

[c1]     try {

           con = getConnection();[c2] 

           stmt = con.createStatement();

           String sql = "select * from user";

           rs = stmt.executeQuery(sql);

           while(rs.next()) {

              String username = rs.getString(1);

              String password = rs.getString(2);

              System.out.println(username + ", " + password);

           }

       } catch(Exception e) {

           throw new RuntimeException(e);

       } finally {

           try {

              if(rs != null) rs.close();

              if(stmt != null) stmt.close();

              if(con != null) con.close();

        } catch(SQLException e) {}

       }

    }