JDBC : JAVA DataBase Connectivity - java数据库连接,是一套由java代码编写的开发数据库应用程序的标准。是用于Java应用程序连接各种数据库的标准方法。
JDBC连接数据库的步骤
1.加载驱动
语法:Class.forName(“classname”); 功能:获取字符串参数指定的类,并初始化该类。例如加载mysql的驱动语句是:
Class.forName(“com.mysql.jdbc.Driver”);
2.创建连接
//2.1.数据库的连接地址
String url=“jdbc:mysql://localhost:3306/student?characterEncoding=utf-8”;
//2.2.数据库的用户名
String userName=“root”;
//2.3.数据库密码
String password=“336029”;
//2.4建立连接
conn=DriverManager.getConnection(url, userName, password);
3. 创建执行对象
//sql语句
String id=“1”;
String sql=“delete from stu where stuid=”+id;
st=conn.createStatement();
4.执行并返回执行结果
result=st.executeUpdate(sql);
5. 关闭连接
st.close(); //销毁执行对象
conn.close(); //关闭连接通道
/**
* 1.DriverManager:管理一组jdbc驱动服务,负责创建connection对象
* 2.connection对象:连接对象,负责和数据库进行连接,只有连接成功后才能对数据库进行相应的操作,但是在连前,我需要知道数据库的连接地址、用户名和密码
* 3.Statement:执行对象,由connection进行创建,负责把SQL语句发送给数据库服务器。 需要拼接SQL语句,不安全,容易引起SQL注入
*/
public class TestJdbc {
public static void main(String[] args) {
//创建连接对象
Connection conn=null;
//定义一个执行对象
Statement st=null;
//创建一个变量接收数据库服务器返回的结果
int result=0;
try {
//第一步:加载驱动
Class.forName("com.mysql.jdbc.Driver");
//第二步:建立连接
//1.数据库的连接地址
String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
//2.数据库的用户名
String userName="root";
//3.数据库密码
String password="336029";
//建立连接
conn=DriverManager.getConnection(url, userName, password);
//System.out.println(conn);
//第三步:创建执行对象
//sql语句
String id="1";
String sql="delete from stu where stuid="+id;
st=conn.createStatement();
//第四步:执行并返回执行结果
result=st.executeUpdate(sql);
} catch (Exception e) {
e.printStackTrace();
}finally{
//第五步:关闭连接
try {
st.close(); //销毁执行对象
conn.close(); //关闭连接通道
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(result>0) {
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}
}
预编译执行对象
/**
* PreparedStatement:预编译执行对象,它是Statement对象的子接口
* 把sql语句预编译并存储到PreparedStatement对象中
* 它允许该sql语句有占位符,创建完成后对占位符进行赋值,占位符的坐标从1开始
*/
public class DeleteStudent {
public static void main(String[] args) {
//连接对象
Connection conn=null;
//创建连接对象
PreparedStatement pst=null;
//创建变量接受结果
int result=0;
//1.加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
//2.建立连接
String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
String userName="root";
String password="336029";
conn=DriverManager.getConnection(url, userName, password);
//3.创建执行对象
//sql
String sql="delete from stu where stuid=?";
//创建执行对象
pst=conn.prepareStatement(sql);
//赋值
pst.setInt(1, 2);
//4.执行并返回信息
result=pst.executeUpdate();
//5.关闭连接
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
pst.close();//销毁执行对象
conn.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
if(result>0) {
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}
}
ResultSet:结果集对象
/*
* ResultSet:结果集对象,查询结果返回
*/
public class SelectStudent {
public static void main(String[] args) {
select();
}
public static void select() {
//连接对象
Connection conn=null;
//执行对象
PreparedStatement pst=null;
//定义结果集对象
ResultSet rs=null;
//定义一个集合去接收结果集中的值
List<Student> list = new ArrayList<Student>();
try {
//第一步 加载驱动
Class.forName("com.mysql.jdbc.Driver");
//第二步 建立连接
//1.数据库的连接地址
String url="jdbc:mysql://localhost:3306/student?characterEncoding=utf-8";
//2.数据库用户名
String user="root";
//3.数据库密码
String password="336029";
//建立连接
conn=DriverManager.getConnection(url, user, password);
//第三步 创建执行对象
//sql
String sql="select * from stu";
pst=conn.prepareStatement(sql);
//第四步 执行并返回结果
rs=pst.executeQuery();
while(rs.next()) { //rs包含所有数据,next()表示向下走一行
Student stu = new Student();
stu.setStuid(rs.getInt("stuid"));
stu.setStuname(rs.getString("stuname"));
stu.setAge(rs.getInt("age"));
stu.setAddress(rs.getString("address"));
//向集合中添加数据
list.add(stu);
}
//遍历集合
for(Student stu1:list) {
System.out.println(stu1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//第五步 关闭资源
try {
rs.close();
pst.close();
conn.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}
数据库连接池:
数据库连接池的优点:
- 资源重用
- 更快的系统反应速度
- 新的资源分配手段
- 统一的连接管理,避免数据库连接泄露
c3p0的使用步骤
1.导入c3p0的jar包
2.创建数据源类(DataSource),负责初始化连接池,并提供数据库连接获取方法
3.定义ComboPooledDataSource变量
4.设置连接池参数(建议使用配置文件设定参数)
5.获取数据库连接
c3p0的配置文件信息:
<?xml version="1.0" encoding="UTF-8"?><default-config>
<!-- 基本配置 -->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/bigdata2</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123456</property>
<!-- 每次增量,当需要创建Connection对象时,一次创建几个 -->
<property name="acquireIncrement">3</property>
<!-- 当创建池对象后,池中应该有几个Connection对象 -->
<property name="initialPoolSize">10</property>
<!-- 池中最少Connection个数,如果少于这个值,就会创建Connection -->
<property name="minPoolSize">2</property>
<!-- 池中最大连接个数 -->
<property name="maxPoolSize">10</property>
</default-config>
<!-- 命名配置,new ComboPooledDataSource("mysql-config")时,使用的就是这个配置 -->
<named-config name="mysql-config">
<property name="jdbcUrl">jdbc:mysql://localhost:3306/bigdata2</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">2</property>
<property name="maxPoolSize">10</property>
</named-config>