-
JDBC入门
JDBC是Java应用程序能够访问数据库的一种机制,为Java应用程序提供数据库管理接口
Java访问数据库的流程
- 加载驱动,建立连接:Driver/Drivermanager
- 发送sql语句:Ssttment/PrepareStatment
- 处理数据:ResultSet
- 关闭连接:Connection.clos
2.插入数据的实现
3.修改及删除的实现及util的封装
单例模式:通过构造方法私有化来实现,没个类只允许创建一个实例化对象
4.查询的实现
返回结果集ResultSet
next()方法得到结果集的一行
getInt()方法根据列名得到Int数据列
getString(int)方法根据索引得到一行的一列(从1开始)
getString(Strig)方法根据列名得到一列
5.sql注入
‘ OR ‘1’=’1’ 1=1是一个永恒成立的条件 使用OR拼接
恶意sql语句 用户输入的数据直接完成了sql的拼接
6.PrepareStatement
安全性更高,可读性更好
使用PreparedStatement 解决sql注入的问题 语句预编译并存储在
PreparedStatement对象中 可以多次高效地执行语句
执行的是带参数的sql语句 提供一系列set方法给参数赋值
set***(sql中的索引号,值)
预编译:sql语句,数据库系统会对sql语句进行预编译,存入缓存
7.资源释放问题
反编译插件:http://jd.benow.ca/jd-eclipse/update
不同数据库驱动的close是不一样的
有的数据库也一同调用了statement/resultSet的close方法
数据库连接池:conn.close():连接并没有关闭
最好从小到大依次关闭resultSet preparestatment connection
8.JDBC小结
细节:statement和preparetement的区别
关闭连接顺序
最后贴一段自己手写的原生JDBC代码:
package util;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
public class DBUtil {
/**
* 单例模式,通过构造方法私有化实现
* 1.自身属性
* 2.连接属性
* 3.4个参数
* 4.私有构造参数
* 5.公有实例方法
* 6.得到连接
* 7.关闭连接
*/
private static DBUtil dbUtil = new DBUtil();
private static Connection conn = null;
private final String driver = "com.mysql.jdbc.Driver";
private final String url = "jdbc:mysql://localhost:3306/test&useUnicode=true&characterEncoding=UTF8&useSSL=true";
private final String user = "root";
private final String password = "123456";
private DBUtil() {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static DBUtil getInstance() {
return dbUtil;
}
public Connection getConnection() {
try {
conn = (Connection)DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public void closeConnection() {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}