JDBC
连接数据库步骤
- 加载驱动:Class.forName(driverClassName)
- 获取连接:DriverManager.getConnection(url,username,password)
String driverClassName="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/mydb";
String username="root";
String password="root";
try {
Class.forName(driverClassName);//加载驱动
Connection connection=DriverManager.getConnection(url, username, password);//获取连接
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
Statement接口
Statement主要用于执行不带参数的简单sql
1. 创建Statement:con.createStatement()
2. 调用executeUpdate(String sql),进行增、删、改
3. 调用executeQuery(String sql),进行查询
PreparedStatement接口(常用)
PreparedStatement继承自Statement,主要用于执行动态sql,强大之处在于可以防止sql攻击、提高代码可读性和可维护性、提高效率。
1. 创建PreparedStatement:con.prepareStatement(sql模板)
2. 给参数赋值: prepareStatement.setXxx(x,x)
3. 调用executeUpdate()或者executeQuery(),他们都无参数
ResultSet接口
用于存放查询结果集,具有指向当前数据行的指针,开始位置在第一条记录前,next()方法可以使指针向下移,使用get(int)获取当前行指定列值。
ResultSet rs=statement.executeQuery(sql);
while (rs.next()) {
String id=rs.getInt(1);//获取第一列值
String username=rs.getString(2);
String password=rs.getString(3);
System.out.println(id+","+username+","+password);
}
批处理
- 打开批处理
MySql的批处理,需要通过参数打开:rewriteBatchedStatements=true - 添加批:addBatch()
- 执行批:executeBatch()
事务
- 事务有四大特性:原子性、一致性、隔离性、持久性
- 在jdbc中,通过Connection完成,同一个事务属于同一个Connection对象
- 事务一般格式:
try{
con.setAutoCommit(false);//开启事务
...
...
con.commit();//提交事务
}
catch(Exeception e){
con.rollback();//出现异常,事务回滚
}
数据库连接池
Connection创建工作交给连接池,需要时向连接池取,不需要时close()归还,常用c3p0连接池。
1. 池类是:ComboPooledDataSource:ComboPooledDataSource dataSource =new ComboPooledDataSource();
2. 导入c3p0的两个jar包:c3p0-0.9.5-pre10.jar和mchange-commons-java-0.2.8.jar
3. src下创建c3p0-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="user">root</property>
<property name="password">root</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
</default-config>
<named-config name="mysql">
<property name="user">root</property>
<property name="password">root</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
</named-config>
</c3p0-config>