1、JDBC
JDBC(Java Database Connectivity),它是连接数据库与Java应用程序的桥梁。
Java连接数据库的方式:
1)JDBC-ODBC桥:可以访问所有ODBC可以访问的数据库,慢
2)JDBC驱动:快,但访问不同的数据库需要下载专用的JDBC驱动
步骤:
1)加载驱动
2)创建数据库连接
3)发送SQL请求
4)获得数据库返回结果
2、JDBC常用类和接口
注意:这些接口和类都属于java.sql包。
a、DriverManager类
作用:驱动管理,一般使用该类获得连接。
注意:其中的方法都是静态方法。
方法:
//获取数据库连接
getConnection(String url,String user,String password)
1)url:数据库服务器的地址,写法如下:
例1:jdbc:mysql://172.17.32.11:3306/test3
例2:jdbc:mysql://localhost:3306/test2?characterEncoding=utf-8
2)user:账号,“root”
3)password:密码,""
返回值为Connection类型。
b、Connection接口
作用:JDBC连接,通过其来连通数据库。
方法:
1)createStatement()
返回值类型为Statement,该类型可以执行SQL。
2)prepareStatement()
返回值类型为PreparedStatement(预处理对象),该类型可以执行SQL。
3)close()
对于资源类型的对象,使用完需要释放。
c、Statement接口
特点:需要写一个静态的SQL语句。
方法:
1)execute()
场景:在不知道是什么语句(增、删、改、查)的情况下,使用该方法执行SQL。
2)executeQuery()
场景:只支持select语句。
返回值类型为ResultSet接口类型。
3)executeUpdate()
场景:支持insert、update、delete语句。
返回值类型为int型,指的是影响的行。
d、PreparedStatement接口
特点:可以在SQL语句中添加?(动态的SQL语句)。比如:select * from table1 where name=? and age=?。即可以先不用知道具体的值是什么,可以先把SQL语句的格式确定。
方法:
1)set***()
作用:用来填充占位符?
参数:两个,第一个表示第几个占位符,第二个是值。比如:setString(1,“zhangsan”),setInt(2,18)。
e、ResultSet接口
作用:主要用来保存查询结果集。
方法:
1)next()
作用:获取集合中的下一个元素。
2)getInt(int colIndex)|int getInt(String colLabel)
作用:获取当前元素指定的列,比如:select name,age from student中结果集有两列,想获得name的值,可以使用getString(1)|getString(“name”);想获得age,可以使用getInt(2)|getInt(“age”)。
3)close()
作用:释放资源。
3、增加
例1:
conn = DriverManager.getConnection(url, user, password);
// 3.执行插入,静态SQL
Statement st = conn.createStatement();
String sql = “insert into classinfo values(7,‘class111’,40)”;
// 4.获得返回值
int result = st.executeUpdate(sql);
System.out.println(result);
例2:
conn = DriverManager.getConnection(url, user, password);
// 3.执行插入,动态SQL
String sql = “insert into classinfo values(?,?,?)”;
PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
// 替换占位符
ps.setInt(1,9);
ps.setString(2, “class2222”);
ps.setInt(3, 42);
// 执行语句
int result = ps.executeUpdate();
System.out.println(result);
4、删除
同上。
5、修改
同上。
6、查询
例:
conn = DriverManager.getConnection(url, user, password);
// 3.执行插入,静态SQL
Statement st = conn.createStatement();
String sql = “select * from classinfo”;
// 4.获得返回值
ResultSet result = st.executeQuery(sql);
while(result.next()){
//获得对应的字段
int id = result.getInt(1); //id
String name = result.getString(2); //name
int number = result.getInt(3); //number
System.out.println(“id:”+ id + “,name:”+ name + “,number:”+number);
}
7、事务
// 事务提交
try {
//1.将自动提交事务关闭,默认自动提交
conn.setAutoCommit(false);//设置不自动提交
//2.执行事务
add(conn);
//3.手动提交事务
conn.commit();
} catch (Exception e) {
// 4.回滚
conn.rollback();
// TODO Auto-generated catch block
e.printStackTrace();
}
1、三层架构
三层:表示层、业务逻辑层、数据库访问层
表示层:为用户提供交互操作界面
业务逻辑层:负责关键业务的处理和数据传递
数据库访问层:实现数据库访问
2、面向接口编程
项目设计阶段:po(实体类)、dao(都是接口)、services(接口)
项目开发阶段:daoImpl(dao的实现类)、servicesImpl(实现类)、view
3、数据库连接池c3p0
作用:先创建一批连接,后面使用时直接从这一批中获取一部分,使用完再放回去。
意义:节省大量创建连接的时间。
优点:使访问数据库速度更快。
步骤:
1)导入c3p0的jar包
2)创建数据源类(DataSource),负责初始化连接池,并提供数据库连接获取方法
3)定义ComboPooledDataSource变量
4)设置连接池参数(建议使用配置文件设定参数)
5)获取数据库连接
类名:JdbcUtils,配置文件:c3p0-config.xml