JDBC(Java Database Connectivity)是一种用于执行SQL语句的JavaAPI,可以为多种关系型数据库提供统一访问,他是由一组用Java语言编写的类和接口组成。 2、本质
java官方提供的一套规范,用于帮助开发人员快速实现不同关系型数据的连接。
实际上就是SUN公司为了满足程序员便利,提供了很多供程序员使用来 *** 作数据库的接口,而这些接口的具体实现则在每个数据库公司去单独实现。使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
如果没有JDBC,java程序调用数据库需要实现每个数据库的不同方法。
采用JDBC后:
- 导入jar包注册驱动 (告诉java程序,即将连接的是哪个品牌的数据库)获取数据库连接 (表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级,使用完之后一定要关闭)获取执行者对象 (专门执行sql语句的对象)执行sql语句并返回结果处理结果 (只有上一步执行的是select语句,才会处理数据)释放资源 (java和数据库是进程间的通信)
由 Driver接口实现:
java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。
在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。
Oracle的驱动:oracle.jdbc.driver.OracleDriver
mySql的驱动: com.mysql.jdbc.Driver
具体代码实现:
下面这段代码写在了 Driver类的静态代码块中了,只需要让类加载即可以执行静态代码块,因此可以通过反射机制进行类的加载,即上面代码。 不需要返回值,只需要他的类加载动作。
//通过创建数据库驱动来实现Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //通过反射机制加载类实现静态代码段 //Class.forName("com.mysql.cj.jdbc.Driver");4.2 URL
- url: 统一资源定位符(网络中某个资源的绝对路径)URL包括: 协议 IP PORT 资源名http:// 通信协议 182.61.200.7 IP地址 80 端口号 index.html 服务器上的某个资源名
没有返回结果集,stat调用的是 executeUpdate方法,返回的结果是对数据的进行DML *** 作的记录条数。count==1则表示对一条数据进行DML *** 作,返回3则是处理记录条数为3。
package com.java; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JdbcDemo { public static void main(String[] args) throws Exception { //1.导入jar包 //2.注册驱动 //Class.forName("com.mysql.cj.jdbc.Driver"); //下面这段代码写在了 Driver类的静态代码块中了,只需要让类加载即可以执行静态代码块,因此可以通过反射机制 //进行类的加载,即上面代码。 不需要返回值,只需要他的类加载动作。 DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //3.获取连接 Connection con= DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest1","root","root"); //4.获取执行者对象 (数据库 *** 作对象) Statement stat = con.createStatement(); //5.执行sql语句 String sql = "insert into user(id,name,age) values (20,'aaa',20)"; // ResultSet rs=stat.executeQuery(sql); //处理结果 int count = stat.executeUpdate(sql); if(count==1){ System.out.println("保存成功"); } stat.close(); con.close(); } }5.2 实现DQL语句 (查询语句)
执行的是 executeQuery方法,返回的是处理集,然后对处理集进行遍历,则可以列出数据。
package com.java; import java.sql.*; public class Jdbcselect { public static void main(String[] args) { Connection conn = null; Statement stat = null; ResultSet rs = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest1","root","root"); stat = conn.createStatement(); String sql = "select * from user"; rs = stat.executeQuery(sql); while (rs.next()){ //getString方法就是将获取到的数据全部转换为String类型 //当然还有其他类型 getInt getDouble ==》可以直接对结果进行数据 *** 作 //通过列号获取不健壮 // String id = rs.getString(1);//根据列号开始获取数据,JDBC列号从1开始 // String name = rs.getString(2); // String age = rs.getString(3); //通过列名称获取数据,列名称是查询结果集的列名称 String id = rs.getString("id");// String name = rs.getString("name"); String age = rs.getString("age"); System.out.println(id+" "+name+" "+age); } }catch (Exception e){ e.printStackTrace(); }finally { //释放资源 if(rs!=null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stat!=null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }5.3 优质方法—配置文集存放字符串
在对应的src下创建一个配置文件jdbc.properties其中的内容如下:
className=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/mytest1 user=root password=root
使用配置文件的好处:
- 实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码 ,解耦。如果修改了配置信息,省去重新编译的过程。编写的java程序在部署到服务器上时,需要打包。如果java代码修改过,就需要重新打包。使用配置文件的方式,如果配置信息修改,并没有导致代码的修改。所以不需要重写打包。
Properties properties = new Properties(); //加载资源的路径:默认为src下 InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties"); properties.load(is); String className = properties.getProperty("className"); String url = properties.getProperty("url"); String user = properties.getProperty("user"); String password = properties.getProperty("password"); //加载驱动 Class.forName(className); //获取连接 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)