jdbc 1.1 什么是jdbc,JDBC入门教程,使用jdbc连接数据库进行增删改查。PreparedStatement解决sql注入。
2021/12/4 19:18:19
本文主要是介绍jdbc 1.1 什么是jdbc,JDBC入门教程,使用jdbc连接数据库进行增删改查。PreparedStatement解决sql注入。,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1具体内容
- 1.1 概念
- 1.2 JDBC API
- 2 JDBC驱动
- 2.1 JDBC 访问数据库的步骤
- PreparedStatement解决sql注入
1具体内容
1.1 概念
JDBC(Java DataBase Connectivity)就是 Java 数据库连接,说白了就是用 Java 语言来操作数据库。原来我们操作数据库是在控制台使用 SQL 语句来操作数据库,JDBC 是用 Java 语言向数据库发送 SQL 语句。JDBC(Java Data Base Connectivity,Java 数据库连接)是一种用于执行 SQL 语句的Java API,可以为多种关系型数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。JDBC 提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。同时,JDBC也是个商标名。 JDBC 屏蔽了底层不同数据库的操作差异,从而使开发者可以通过统一的 Java API 来进行操作不同的数据库,而不必考虑底层具体数据库实现的差异。 所以尽管底层数据库及其驱动有很多种,但 JDBC 是不变的
1.2 JDBC API
由 sun 公司提供,内容为供程序员调用的接口与类,集成在 java.sql 和 javax.sql 包中。JDBC API 可做三件事:与数据库建立连接、执行 SQL 语句、处理结果。
-
DriverManager 类
JDBC 驱动程序管理器 ,是一工厂实现类,用了工厂方法模式。是JDBC的管理层,作用于用户和驱动程序之间。DriverMangerm可以注册和删除加载的驱动程序,可以根据给定的 url 获取符合 url 协议的驱动 Driver 或者是建立 Conenction 连接,进行数据库交互。有两个作用:1)注册驱动:让 JDBC 知道要使用的是哪个驱动所有的驱动程序类必须包含一个静态部分。这个静态部分在加载该实例时由 DriverManager 类进行注册。用户在正常情况下将不会直接调用 DriverManager.regiserDriver 方法,而是在加载驱动程序时由驱动程序自动调用。注册驱动程序:
Class.forName(“com.mysql.jdbc.Driver”);DriverManager.registerDriver(new com.mysql.jdbc.Driver())System.setProperty(“jdbc.drivers”,”com.mysql.jdbc.Driver”);2)获取 Connection:它跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。 -
Dirver 接口
是驱动程序对象的接口,指向具体数据库驱动程序对象
-
connection接口
-
Statement 接口
-
ResultSet接口(结果集)
-
ResultSetMetaData对象
可用于获取关于 ResultSet 对象中列的类型和属性信息的对象
获得ResultSetMetaData对象:
ResultSet对象的getMetaData()方法;
ResultSetMetaData对象的常用方法:
int getColumnCount() : 获得本次查询中的列数
String getColumnName(int column) :获得本次查询中指定列的列名。
String getColumnTypeName(int column) :检索指定列的数据库特定的类型名称。
int getColumnDisplaySize(int column) :指示指定列的最大标准宽度,以字符为单位。
String getTableName(int column) :获取指定列的表名称
存储结果集的结构的:表头列名 数据类型 列数量,没有数据。
// 4获取Statment对象,并执行sql Statement stm=conn.createStatement(); ResultSet rs=stm.executeQuery(sql);//ResultSetMetaData:存储结果ResultSetMetaData metaData=rs.getMetaData();// 5.处理结果: while(rs.next()){//判断有没有下一行,有就指向——便利行 for(int i=1;i<=metaData.getColumnCount();i++){//遍历 System.out.print(metaData.getColumnName(i)+":"+rs.getObject(i)+"\t"); } System.out.println(); }
- PreparedStatement
PreparedStatement 接口继承 Statement接口 PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率 。解决SQL注入(登陆千万不要用statement)。使用PrepareStatement对象 与 Statement对象的区别
1.Statement 可以先行创建, 然后将sql语句写入.执行时传入sql
2.PreparedStatement 在创建时一定要传入 sql语句, 因为它要先运送到数据库执行预编译
3.PreparedStatement 在执行之前 先要设置 语句中的参数. (预处理的sql语句有占位? 执行前需要给?指定参数值,执行时可以直接执行不需要传入sql) PrepareStatement 在执行之前已经 设置好了 sql语句 以及对应参数. 执行方法不需要参数
2 JDBC驱动
Java DataBase Connection:使用java使用连接数据库。 由JDBC驱动直接访问数据库 优点:100% Java,快又可跨平台 缺点:访问不同的数据库需要下载专用的JDBC驱动不同的数据库都得下载不懂jar包,相同的数据库也需要不同的jar(版本不同) 版本不兼容
2.1 JDBC 访问数据库的步骤
(1)加载数据库的驱动:DriverManager.registerDriver(Driver)_Jar DriveManager里面的registerDriver(Driver driver)Class.forName(包名.类名)_驱动类中书写一个静态代码,只要加载这个 (2)创建与数据库的连接 DriverManager里面getConnection(String url, String user, String password) (3)获取Statemnt对象:stm=conn
(4)编写sql语句:Navicat写好
(5)执行sql语句 Statement里面executeQuery(String sql)
(6)处理结果
(7)释放资源(关闭连接):数据库的连接个数是有限。
public static void main(String[] args){ try { Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/casemanage? useUnicode=true&characterEncoding=utf-8&useSSL=false","root","数据库密码"); Statement statement = connection.createStatement(); int i = statement.executeUpdate("insert sc value(2008,2,3)"); System.out.println(i); statement.close(); connection.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }
执行查询:
public static void main(String[] args){ try { Class.forName("com.mysql.jdbc.Driver"); //2连接数据库 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/casemanage?useUnicode=true&characterEncoding=utf-8&UseSSL=false", "root", "数据库密码"); //3statement Statement statement = conn.createStatement(); //4sql String sql = "select * from sc"; //5执行sql ResultSet resultSet = statement.executeQuery(sql); //返回受影响的行数 //6返回结果 //获取查询的总列数 ResultSetMetaData metaData = resultSet.getMetaData(); //获取对象 int columnCount = metaData.getColumnCount();//总列数 System.out.println(metaData.getCatalogName(1)+"\n"); // 获取数据库名 while(resultSet.next()){ // int anInt = resultSet.getInt(1); //第一列数据 for (int i = 1; i <= columnCount; i++) { System.out.print(metaData.getColumnName(i)+ ":"); // 查询这列的列名 System.out.print("\t" + resultSet.getObject(i)+ "\t\t\t"); } System.out.println(""); } //7释放连接 statement.close(); conn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }
PreparedStatement解决sql注入
public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/casemanage? useUnicode=true&characterEncoding=utf-8&UseSSL=false", "root", "数据库密码"); PreparedStatement prepared = conn.prepareStatement("select * from sc where s_no = ?"); prepared.setInt(1,2002); ResultSet resultSet = prepared.executeQuery(); ResultSetMetaData metaData = resultSet.getMetaData();//创建对象 int columnCount = metaData.getColumnCount(); while (resultSet.next()){ for (int i = 1; i <= columnCount ; i++) { System.out.print(resultSet.getObject(i)+"\t"); } System.out.println(""); } }
返回主键
public static void main(String[] args){ try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/casemanage?useUnicode=true&characterEncoding=utf-8&useSSL=false", "root", "1214521"); PreparedStatement prepared = connection.prepareStatement("insert stu(name) value (?)",Statement.RETURN_GENERATED_KEYS); prepared.setString(1,"张飞"); int i1 = prepared.executeUpdate(); System.out.println("受影响的行数"+i1); //返回受影响的行数 ResultSet resultSet = prepared.getGeneratedKeys(); while (resultSet.next()){ System.out.print("新增主键"+resultSet.getObject(1)+"\t"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }
这篇关于jdbc 1.1 什么是jdbc,JDBC入门教程,使用jdbc连接数据库进行增删改查。PreparedStatement解决sql注入。的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01UniApp 中组件的生命周期是多少-icode9专业技术文章分享
- 2024-11-01如何使用Svg Sprite Icon简化网页图标管理
- 2024-10-31Excel数据导出课程:新手从入门到精通的实用教程
- 2024-10-31Excel数据导入课程:新手入门指南
- 2024-10-31RBAC的权限课程:新手入门教程
- 2024-10-31Svg Sprite Icon课程:新手入门必备指南
- 2024-10-31怎么配置 L2TP 允许多用户连接-icode9专业技术文章分享
- 2024-10-31怎么在FreeBSD上 安装 OpenResty-icode9专业技术文章分享
- 2024-10-31运行 modprobe l2tp_ppp 时收到“module not found”消息提醒是什么-icode9专业技术文章分享
- 2024-10-31FreeBSD的下载命令有哪些-icode9专业技术文章分享