JDBC - 数据库连接
JDBC概念:
java数据库的连接,(Java Database Connectivity 简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口。
连接MySQL中的数据库:jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8&useSSL=false";
加载数据库驱动:
//1,加载驱动 Class.forName("com.mysql.cj.jdbc.Driver");
如果加载的是SQL server:Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
建立连接:
数据库URL:URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库。
URL的写法为:"jdbc:mysql://localhost:3306/数据库名称?参数名=参数值..."
常用数据库URL地址的写法:
Oracle:jdbc:oracle:thin:@localhost:2521:数据库名称
SqlServer:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名称
MySQL:jdbc:mysql://localhost:3306/数据库名称
Connection:
jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中的一个最重要的一个对象,客户端与数据库所有交互都是通过Connection对象完成的.
创建方法:Connection conn = DriverManager.getConnection( URL,User,PassWord );
常用方法:
● createStatement();创建向数据库发送sql的statement对象
● prepareStatement(sql);创建向数据库发送预编译sql的PrepareStatement对象
● prepareCall(sql);创建执行存储过程的callableStatement对象
● setAutoCommit(boolean autoCommit);设置事务是否自动提交
● commit();在链接上提交事务
● rollback();在此链接上回滚事务
String url = "jdbc.mysql://localhost:3306/数据库名称"; String username = "用户名"; String password = "用户密码"; Connection conn = null; //2,获取与数据库的链接 conn = DriverManager.getConnection(url,username,password);
执行SQL语句:
Statement:jdbc程序中的Statement对象用于向数据库发送SQL语句。
创建方法:Statement st = conn.createdStatement();
常用方法:
● executeQuery(String sql);用于向数据库发送查询语句
● executeUpdate(String sql);用于向数据库发送insert、update或delete语句
● execute(String sql);用于向数据库发送任意语句
● addBatch(String sql);把多条SQL语句发送到一个批处理中
● executeBatch();向数据库发送一批SQL语句执行。
Statement st = null; //3,获取用于向数据库发送SQL语句的Statement st = conn.createdStatement(); //4,向数据库发送SQL String sql = "select id,name,password,email,birthday from users st.executeQuery();
PreparedStatement:该类是Statement的子类对象
创建方法:PreparedStatement st = conn.preparedStatement();
preparedStatement st = null; String sql = "select * from user where name=? and password = ?"; //3,获取用于向数据库发送SQL语句的preparedStatement st = conn.preparedStatement(sql);//传入SQL语句,进行预编译 st.setString(1,username); st.setString(2,password); //4,向数据库发SQL st.executeQuery();//这里不用传入SQL语句了
Statement与PreparedStatement的区别:
相对于Statement对象而言PreparedStatement可以避免SQL注入的问题。
如:String sql = "select * from admin where loginname=' "+loginName+" ' and loginpwd=' "+loginPwd+" ' ";
在应用中:
- 》请输入账号:
333
- 》请输入密码:
wer'or'1'='1
实际上发送:select * from admin where loginname=' 333 ' and loginpwd=' wer'or'1'='1 ' ,登录成功!
Statement会使数据库频繁编译SQL,可能会造成数据库缓冲区溢出。PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。
并且PreparedStatement对于SQL中的参数,允许只用占位符的形式进行替换,简化了SQL语句的编写。
获取结果:
jdbc程序中的ResultSet用于代表Sql语句的执行效果。ResultSet封装执行结果时,采用的类似于表格的方式,ResultSet对象维护了一个指向表格数据行的游标、初始的时候,游标在第一行之前调用ResultSet.next()方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
获取行:ResultSet提供了对结果集进行滚动的方法
● next();移动到下一行
● Previous();移动到前一行
● absolute(int row);移动到指定行
● beforeFirst();移动到ResultSet的最前面
● afterLast();移动到ResultSet的最后面
获取值:ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法
● 获取任意类型的数据:
getObject(int index);
getObject(String columnName);
● 获取指定类型的数据:
getString(int index);
getString(String columnName);
ResultSet rs = null; //4,向数据库发SQL,并获取代表结果集的ResultSet String sql = "select id,name,password,email,birthday from users"; rs = st.executeQuery(sql); //5,取出结果集的数据 rs.afterLast(); rs.previous(); System.out.println("id=" + rs.getObject("id")); System.out.println("name=" + rs.getObject("name")); System.out.println("password=" + rs.getObject("password")); System.out.println("email=" + rs.getObject("email")); System.out.println("birthday=" + rs.getObject("birthday")); //或者循环取出所有id while(rs.next()){ String id = rs.getString(1);//1代表数据库中表的列数,id在第一列也可以("id")!!! System.out.println("id = "+id); }
原文地址:https://www.cnblogs.com/Dm920/p/11698639.html
- 走进科学:银行ATM机真的安全吗?
- 漏洞科普:对于XSS和CSRF你究竟了解多少
- 巧用Live Template,不仅能提升AS开发效率,还能装逼
- 黑了前男友网站:从找SQL注入到后台权限
- 扩展CakePHP的CacheHelper以使用缓存引擎
- 走进科学:酒店保险箱真的保险么?
- 利用xmlrpc.php对WordPress进行暴力破解攻击
- .Net中如何操作IIS
- Havex:以工控设备为狩猎目标的恶意软件
- 大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践
- 浅谈php安全
- 在统一的分析平台上构建复杂的数据管道
- 隐藏在注册表的恶意软件 – Poweliks
- 数千万WordPress和Drupal站点存在DDoS风险
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 毕业设计之「测试实验及结果分析」(一)
- 【DB笔试面试845】在Oracle中,sqlnet.ora文件的作用是什么?
- 安卓-无敌解决ListView添加标题头无法正常显示的问题(歪门邪道)
- 贪心算法-活动选择问题(Python实现)
- 浅析C语言中一些“令人吃惊”的结构
- 贪心算法-分数背包问题(Python实现)
- 为什么GNE 不做全自动提取列表页的功能
- 百度地图开发如何自定义控件(无敌的解决办法)
- 百度地图如何创建一个属于自己的地图,附加到项目中?
- FreeRTOS系列第9篇---FreeRTOS任务概述基础篇
- 图书管理系统(四)图书管理系统实战(2)
- 源码分析之 FactoryBean接口不为人知的秘密
- 图书管理系统(三)图书管理系统实战(1)
- 图书管理系统(二)整合 SSM,你学会了么
- CellChat:细胞间相互作用分析利器