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非法注入后,就数据库中的数据都符合了.
*若有不足或错误,请多多指教,谢谢!*