Java数据进阶知识(二)JDBC
作者:互联网
Java数据进阶知识(二)JDBC
首先,JDBC是什么? JDBC是Java数据库连接。其实在Java中,JDBC是一个帮我们去连接数据库的一个“东西”。在Java中JDBC指的就是Java的一套标准的连接数据库的接口。驱动程序包是由个数据库厂商来实现的,也就是说由数据库厂商来编写JDBC的实现类,我们只需要根据JDBC指定的接口去使用即可。
一、一个JDBC程序
- 1、导包(必备)
- 2、代码实现
//说明:SUN公司定义的JDBC只是一些接口,我们想要去操作数据库,需要先把数据库的驱动,就是JDBC的实现类拿到程序里来,这个操作称之为注册驱动。定义使用DriverManager类来完成确定程序的注册
1.注册加载驱动:DriverManager.registerDriver(new Driver)//这里的 new Driver 其实就是 new com.jdbc.mysql.Driver() com.jdbc.mysql 导入的mysql驱动包
2.获取连接:驱动注册后 就可以创建于数据的连接 Connection:其实就是数据库连接对象
Connection con = DriverManager.getconnection(String url,String username,String password); // 实际项目中 这些数据库相关信息基本都放在配置文件中。
3.获取Statement对象 Statement:用来执行sql语句
Statement statement = con.createStatement();
4.执行sql语句
Result result = statement.executeQuery(String sql) ;//用来执行查询语句
int st = statement.executeUpdate(String sql) ;//用来执行增删改语句
//还有一种state.execute(String sql) 增删改查均可执行 没怎么用过 不做细讲
5.解析结果集
//如果是executeUpdate 返回为影响行数
//如果是executeQuery 返回值数据类型是Result,采用的类似于表格的方式
while(st.next()){ //next 游标下移
st.getInt("columnName") //获取结果元素
st.getString("columnName")
}
6.最后断开连接
st.close;
connection.close;
二、API详解
1.DriverManager对象:
registerDriver/getConnection
2.Connection对象:
jdbc程序中的Connection,它用于代表数据库的连接(桥梁),Connection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的。
createStatement/prepareStatement/setAutoCommit/commit/rollback 后三个为事务相关的。
3.Statement对象:
Jdbc程序中的Statement对象用于向数据库发送SQL语句。
executeQuery/executeUpdate/execute
4.ResultSet:
jdbc程序中的ResultSet用于代表Sql语句的执行结果.Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据
next()/previous() 游标上下移动 beforeFirst()/afterLast()移动到第一行之前/移动到第一行之后 getObject/getString ... 获取不同类型的数据
三、数据库的访问过程
*1.客户端与mysql建立连接
2.客户端向数据库发送数据库请求
3.数据库响应请求,并返回结果数据给客户端
4.客户端接收数据库返回的数据,并且对数据进行处理使用
5.释放资源
四、数据库的注入问题
数据注入问题产生的原因:是因为SQL语句的字符串拼接。当用户输入的一些包含SQL关键字的字符的时候,通过字符拼接以后可能会改变SQL语句的格式,进而引发安全问题.
根本原因:Mysql把用户输入的参数卡看做关键字解析了。
如何解决数据库注入问题呢?
- PreparedStatement(预编译的PreparedStatement)
在创建PreparedStatement的时候,PreparedStatement会把当前没有参数的sql语句发送给数据库服务器,执行预编译(预编译:其实就是去解析这个SQL语句中的关键字,变成MySQL可以执行的命令)
在预编译后,输入的参数就会被当做纯文本来解析。
总结: - 在安全性方面,PreparedStatement比Statement好的多,没有安全问题
- 在效率方面,执行单次sql的时候Statement 比PreparedStatement 好一些,因为Statement 在执行sql 的时候只会与数据库通信一次,而PreparedStatement要通信两次
五、批处理
for 循环逐条插入
statement 批处理
PreparedStatement 批处理
标签:语句,PreparedStatement,Java,进阶,数据库,JDBC,Statement,sql 来源: https://www.cnblogs.com/likangnianxinbaiwan/p/16315175.html