JDBC:简单使用

3 篇文章 0 订阅

1.JDBC:

将sql语句发送到数据库服务器端执行的技术.
封装了java连接数据库的方法.
是sun公司定义的连接数据库技术的规范,是接口.

2.JDBC技术开发步骤:

a).引入jar包
b).创建连接
1).加载数据库驱动器
Class.forName("com.mysql.jdbc.Driver");
2).用驱动器创建连接对象
String url = "jdbc:mysql:///test";//连接的数据库软件名和数据库名
//"jdbc:mysql://localhost:3306/test" 详细写法   localhost:数据库服务器IP  3306:数据库使用的端口
String sqlName = "root";//连接数据库的用户名
String sqlPwd = "root";//连接数据库的密码

Connection conn = DriverManager.getConnection([url],[sqlName],[sqlPwd]);

3).创建执行sql语句的Statement对象
Statement stmt = conn.createStatement();

4).执行sql语句
int effectRow = stmt.executeUpdate(sql);//执行更新操作,返回影响的行数

ResultSet rs = stmt.executeQuery(sql);//执行查询操作,返回结果集

遍历结果集对象:
while(rs.next()){
rs.getObject("列名");
//Object...可以是其他类型,列是什么类型Object就可以写该类型
}

5).关闭连接
rs.close();
stmt.close();
conn.close();

//方法里会出现异常,要抛出

3.Driver 驱动类

在创建数据库连接的之前的初始化工作.

//mysql也解决了旧驱动与新驱动的兼容性问题.
//旧驱动 org.gjt.mm.mysql.Driver
//gjt:早期的mysql没有提供驱动,而是由gjt组织提供的.
==> public class Driver extends com.mysql.jdbc.Driver{}

4. interface Connection 连接接口

是程序与数据库连接的接口.
//提供的方法
|-- void close();  关闭连接
|-- Statement createStatement()  创建执行sql的Statement对象
|-- PreparedStatement preparedStatement() 创建可以预编译sql语句
 可防止sql语句注入
|-- void setAutoCommit(boolean autoCommit) 设置事物提交的方式,若是true,自动提交,否则,手动提交
|-- void rollback() 回滚事务
|-- void commit() 提交事务

5. interface Statement 执行sql语句的对象接口

可以将sql语句放松到数据库端执行.
|-- void close() 关闭连接
|-- int executeUpdate(sql) 执行更新的sql语句(包括insert/update/delete/create...)
|-- ResultSet executeQuery(sql) 执行查询的sql语句。返回查询结果集对象
|-- boolean execute(sql) 可以执行任意的sql语句,若返回是false,则表示是更新操作;若返回是true,则是查询操作

6. interface ResultSet 结果集接口

封装查询的结果集.
|-- boolean next() 向下读取一行;默认执行结果集的第0行
若有结果,就返回true,否则返回false
|-- Object getObject(int columnIndex) 根据查询结果集的列索引获取值
 //索引从1开始计算
|-- Object getObject(String columnLabel) 根据列名称获取值

//获取结果集的get方法,后面可以是任意基本数据类型,看具体需要.
//get方法要配合next()方法使用,才能确保获取到所有的结果集数据.

7. PreparedStatement 对象

|-- interface Statement 执行sql语句的对象接口
|-- interface PreparedStatement 可预编译sql语句的对象接口
//在sql语句利用占位符代替字符串的连接,防止sql注入,更安全.

String sql = "SELECT * FROM student WHERE id=?"
PreparedStatement pstmt = conn.preparedStatement(sql);//预编译sql语句
pstmt.setObject(int index,Object value);//设置sql语句中占位符对应的值
//set后面的类型看value的类型
//有多少个占位符,就要有多少个值
//index为占位符的位置,从1开始算
//value为占位符对应的值
pstmt.execute();//括号内不需要写sql语句,不需要在传参
//pstmt的方法的返回值与stmt一样

*sql语句可这样写:
StringBuffer sb = new StringBuffer();
sb.append(" select * ");
sb.append(" FROM student");
sb.append(" WHERE 1=1 ");
sb.append(" AND stuName=?");  // 占位符
sb.append(" AND pwd=?");

*sql注入:
String pwd = "' or 1=1 -- ";  // sql注入

//String sql_login = "SELECT * FROM student WHERE stuName='' AND pwd='"+pwd+"';
||sql非法注入,改变了整条sql语句的结果,
vv 导致出现严重的数据安全隐患
//String sql_login = "SELECT * FROM student WHERE stuName='' AND pwd='' or 1=1;

//本来是要stuName和pwd都要符合的才有结果集,但sql非法注入后,就数据库中的数据都符合了.


*若有不足或错误,请多多指教,谢谢!*


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值