JDBC
来源:互联网 发布:linux口令长度 编辑:程序博客网 时间:2024/06/06 04:27
JDBC
1. JDBC的概述
JDBC (Java Database Connectivity) 是用于执行SQL语句的Java应用程序接口,由一组用Java语言编写的类和接口组成。
JDBC 是一种 应用编程接口,它制定处理表格数据和常见的关系型数据的标准框架。
2. 数据库的基本概念
数据库本质上是表的“智能”容器。
表是由行组成的容器。
行(概念上)是由列组成的容器。
列是具有名称、类型和值的单个数据项目。
3.主要由以下界面(interface)和类组成:
DriverManager (class):驱动管理类 实现不同的登录方式
getConnection():试图建立给定数据库url的链接
Connection (interface):用于和数据库进行连接
Createstatememt():创建一个statement对象来,将sql语句发送到数据库
Statement (interface):用于执行静态sql语句
ExecuteQuery():执行结定的sql语句,该语句返回单个Resultset对象
PreparedStatement (interface):可以使用?代替原始’’防止sql注入,预先编译sql语句
CallableStatement (interface):用于调用存储过程函数
ResultSet (interface) :游标对象抓取
DatabaseMetaData (interface):可以获取数据库结构信息视图
getURL():返回一个String对象,代表数据库的URL
GetuserName():返回此链接使用的数据库的用户名
isReadOnly():返回一个Boolean值,指示数据库是否允许读操作
getDatabaseProduceName():返回数据库的产品名称
getDatabaseProduceVersion():返回数据库的版本号
getDriverName():返回驱动程序的名称
GetDriversion():返回驱动的版本号
ResultSetMetaData (interface):用于获取查询列的信息
getColumnCount():返回目前Resultest的对象的列数
getColumDisplaySize(int column):返回column指定的列的最宽度
getColumnLabe(intocolumn):返回指定的列的标签
getcolumnName(int column):返回column指定列的列名
4. JDBC中执行SQL的步骤
首先,要将“驱动程序”传递到DriverManager
然后获得“连接”
其次,创建Statement、PreparedStatement、或CallableStatement,并将它们用于更新数
库或执行查询
最后,查询返回包含有已请求数据的ResultSet,ResultSet是按“类型”检索的。 DatabaseMetaData和ResultSetMetaData接口可以用来提供有关数据库或ResultSet的信息。
5. 数据库连接
配置文件:
url=jdbc:mysql://localhost:3306/news
driverClass=com.mysql.jdbc.Driver
userName=root
password=123
注:mysql的url是jdbc:mysql://localhost:3306/数据库名
Oracle的url是jdbc:oracle:thin:@localhost:1521:orcl
连接类:
public class DbUtils {static Properties p=new Properties();static{InputStream is=DbUtils.class.getResourceAsStream("/jdbcmysql.properties");try {p.load(is);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static Connection getConnection() throws ClassNotFoundException, SQLException{String url=p.getProperty("url");String driverClass=p.getProperty("driverClass");String uName=p.getProperty("userName");String password=p.getProperty("password");Class.forName(driverClass);Connection conn=DriverManager.getConnection(url, uName, password);return conn;}}
4. SQL注入
Sql注入:是利用字符串的漏洞来进行数据攻击
‘ or 1=1 or 1=’
例:select * from emp where job ‘’ or 1=1 or 1= ‘’
正常逻辑job=’ or 1=1 偶人1= ’ 不存在数据查询的集合null ‘’ 可以利用字符串’ 来结尾添加 or 1=1这样sql破解查询所有数据
?:在jdbc中叫占位符
5. 事务:
是一个运行的单元 该单元运行的程序必须满acid的持性.
在JDBC中事务是自动提交
将JDBC中的事务设置为手动提交所有方法中的代码在同一个事务中(设置setAutocommit(false))
6. 调用存储过程
/** * 调用存储过程 * {call 存储过程名(?,?,?)} */public void CallProcedure() throws ClassNotFoundException, SQLException{String sql="{call re_mul(?,?,?)}";Connection conn=DbUtils.getConnection();//预先编译sql语句CallableStatement sta=conn.prepareCall(sql);sta.setInt(1, 7411);sta.setInt(2, 39564);sta.registerOutParameter(3, Types.INTEGER);sta.execute();int result=sta.getInt(3);System.out.println(result);}
- jdbc
- JDBC
- jdbc
- JDBC
- jdbc
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- JDBC
- jdbc
- JDBC
- JDBC
- jdbc
- 实现通用化DLL调用模块的设计解析
- C++学习记录16--VS新版本中iostream库的变化
- SpringBoot--配置Druid连接池
- 海航云聊大数据,解密海航科技集团待遇情况
- mysql 获取varchar类型数字最大值
- JDBC
- java如何调用接口
- numpy.expand_dims
- Spring中初始化bean和销毁bean的时候执行某个方法的详解
- php 三元操作符的简化使用 (中间省略一项)
- ascii码简单记录
- Redis
- 最近在排查一个core问题,对dmesg的时间戳,做了一个转化工具
- Java多线程编程-(17)-多线程异步调用之Future模式