目录
一、数据库驱动
定义了一套Java操作数据库的规范(接口),称之为JDBC(Java Database connect)
二、对象说明
代码
public class JdbcFirstDemo { public static void main(String[] args) throws Exception { //要连接的数据库URL String url = "jdbc:mysql://localhost:3306/jdbcStudy? useUnicode=true&characterEncoding=utf8&useSSL=true"; //连接的数据库时使用的用户名 String username = "root"; //连接的数据库时使用的密码 String password = "123456"; //1.加载驱动 //DriverManager.registerDriver(new com.mysql.jdbc.Driver());不推荐使用 这种方式来加载驱动 Class.forName("com.mysql.jdbc.Driver");//推荐使用这种方式来加载驱动 //2.获取与数据库的链接 Connection conn = DriverManager.getConnection(url, username, password); //3.获取用于向数据库发送sql语句的statement Statement st = conn.createStatement(); String sql = "select id,name,password,email,birthday from users"; //4.向数据库发sql,并获取代表结果集的resultset ResultSet rs = st.executeQuery(sql); //5.取出结果集的数据 while(rs.next()){ System.out.println("id=" + rs.getObject("id")); System.out.println("name=" + rs.getObject("name")); System.out.println("password=" + rs.getObject("password")); System.out.println("email=" + rs.getObject("email")); System.out.println("birthday=" + rs.getObject("birthday")); } //6.关闭链接,释放资源 rs.close(); st.close(); conn.close(); } }
1、DriverManager类:
用于加载驱动,并创建与数据库的链接//这种方式不推荐使用,会创建两次对象 DriverManager.registerDriver(new Driver()); //推荐加载驱动方式 Class.forName("com.mysql.jdbc.Driver"); //创建与数据库的连接 Connection conn=DriverManager.getConnection(url, user, password); //代表数据库对象,可以设置自动提交、事务提交、事务回滚。
2、url:
用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库3、 Connection类
用于代表数据库的链接,客户端与数据库所有交互都是通过connection对象完成的
- createStatement():创建向数据库发送sql的statement对象。
- prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
- setAutoCommit(boolean autoCommit):设置事务是否自动提交。
- commit() :在链接上提交事务。
- rollback() :在此链接上回滚事务。
4、Statement类:执行sql的对象
- executeQuery(String sql) :用于向数据发送查询语句。
- executeUpdate(String sql):用于向数据库发送insert、update或delete语句
- execute(String sql):用于向数据库发送任意sql语句
- addBatch(String sql) :把多条sql语句放到一个批处理中。
- executeBatch():向数据库发送一批sql语句执行。
5、ResultSet类:查询的结果集
- 获取任意类型的数据
getObject(int index)
getObject(string columnName)- 获取指定类型的数据,例如:
getString(int index)
getString(String columnName)- 遍历、指针
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。6、释放资源
1、SQL注入是什么?怎么防止?
SQL注入通过巧妙的技巧来拼接字符串,造成SQL短路,从而获取数据库数据
使用PreparedStatement对象,执行的时候参数会用引号包起来,并把参数中的引号作为转义字符,从而避免了参数也作为条件的一部分2、数据库连接池:
编写连接池需实现java.sql.DataSource接口。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现
c3p0:
private static ComboPooledDataSource ds = null; ds = new ComboPooledDataSource("MySQL");
dbcp:
//加载dbcpconfig.properties配置文件 InputStream in=JdbcUtils_DBCP.class.getClassLoader() .getResourceAsStream("dbcpconfig.properties"); Properties prop = new Properties(); prop.load(in); //创建数据源 ds = BasicDataSourceFactory.createDataSource(prop);
druid:阿里巴巴
c3p0与dbcp区别:
- dbcp没有自动回收空闲连接的功能
- c3p0有自动回收空闲连接功能
负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
1. 最小连接数:是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有
大量的数据库连接资源被浪费.
2. 最大连接数:是连接池能申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将
被加入到等待队列中,这会影响以后的数据库操作
3. 如果最小连接数与最大连接数相差很大:那么最先连接请求将会获利,之后超过最小连接数量的连接
请求等价于建立一个新的数据库连接.不过,这些大于最小连接数的数据库连接在使用完不会马上被
释放,他将被放到连接池中等待重复使用或是空间超时后被释放.