快速入门
//注册驱动
Class.forName("com.mysql.jdbc.Driver");//org.gjt.mm.mysql.Driver
//获取链接
String url="jdbc:mysql://127.0.0.1:3306/student";
String username="root";
String password="123456";
Connection conn = DriverManager.getConnection(url, username, password);
//定义SQL语句
String sql= "update userinfo set username=1 where id=1";
Statement st = conn.createStatement();
//执行sql
int i = st.executeUpdate(sql);//受影响行数
//处理结果
System.out.println(i);
st.close();
conn.close();
}
DriverManager
作用:建立驱动,获取数据库连接
建立驱动 :DriverManager.registerDriver建立驱动
,在Driver底层代码中已经建立,所以我们只需要利用Class.forName("com.mysql.jdbc.Driver");
MySQL5 以后的驱动包不需要获取驱动,在jar包中定义了.Driver的驱动类
获取数据库连接 :DriverManager.getConnection(url, username, password);
- url:连接路径 jdbc:mysql://ip地址:端口号/数据库名称?参数键值对&参数键值对
- username:用户名
- password:密码
细节:
- 连接本机Mysql服务器,并且默认端口号为3306,可以简写为jdbc:mysql:///数据库名。
- 配置useSSL=false 参数,禁用安全连接方式,解决警告提示。
Connection
作用:获取执行SQL的的对象,管理事务
获取执行SQL的的对象 :
- 普通执行SQL对象:
createStatement()
- 预编译的SQL执行SQL对象(防止SQL注入):
PrepareStatement(sql)
- 执行存储过程中的对象:
prepareCall(sql)
管理事务 :
MySQL中事务管理:
- start;(begin) //开启事务
- commit; //提交事务
- rollback; //回滚事务
- (mysql默认自动提交事务)
JDBC中事务管理:
- setAutoCommit(boolean autoCommit) true为自动提交false 手动提交//开启事务
- commit(); //提交事务
- rollback(); //回滚事务
try {
//开启事务
conn.setAutoCommit(false);
int i1 = st.executeUpdate(sql1);//受影响行数
//处理结果
System.out.println(i1);
int i2 = st.executeUpdate(sql2);//受影响行数
//处理结果
System.out.println(i2);
//提交事务
conn.commit();
} catch (SQLException e) {
//出现异常,事务回滚
conn.rollback();
}
Statement
作用:执行SQL语句
执行SQL语句 :
- executeUpdate(sql)执行DML,DDL语句
返回值:(1)DML语句影响的行数(2)DDL执行成功后也可能返回0 - executeQuery(sql)执行DQL语句
返回值:ResultSet结果集对象
ResultSet
作用:执行SQL语句
执行SQL语句 :
执行:executeQuery(sql)
执行DQL语句,返回ResultSet对象
获取查询结果:
- next();将光标向前移动一行并判断是否为有效行(返回Boolean值)
- getXxx();getInt,getString;(参数可以是int:列数,String:列名)
使用:
while(rs.next()){
//获取数据
//列数
int a=rs.getInt(1);
String b=rs.getString(2);
String c=rs.getString(3);
/*
列名
int a=rs.getInt("a");
String b=rs.getString("b");
String c=rs.getString("c");
*/
}
PreparedStatement
作用:预防SQL注入问题
SQL注入 :是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
使用方法 :
- 获取PreparedStatement对象
//SQL语句中参数值使用?占位符代替
String sql="select * from userinfo where username = ? and password = ?";
//通过Connection对象获取,并传入sql语句
PreparedStatement ps=conn.prepareStatement(sql);
- 设置参数值
ps.setXxx(参数1,参数2);
//参数1:?的位置(从1开始)
//参数2:?的值
- 执行SQL
executeUpdate();//executeQuery();不需要传递sql
数据库连接池
什么是数据库连接池:
当一个用户要使用数据库时,需要建立connection连接,用完即释放,十分浪费;我们可以建立一个容器,放一堆connection,用户用完再放回去,这个容器就叫数据库连接池。
定义:
- 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
- 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
- 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗
好处: - 资源重用
- 提升系统响应速度
- 避免资源连接遗漏
使用:
//导入jar包
//https://mvnrepository.com/artifact/com.alibaba/druid/1.1.12
//定义配置文件
//加载配置
Properties pro=new Properties();
//使用File导入编辑文本
pro.load(new FileInputStream("src/druid.properties"));
//获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
//获取数据库连接Connection
Connection connection = dataSource.getConnection();
System.out.println(connection);
/*Statement st = connection.createStatement();
String sql="select * from account";
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
int id = rs.getInt(1);
String user=rs.getString(2);
String pass=rs.getString(3);
System.out.println(id+user+pass);
}*/
//配置文件,在src下建立Resource BUndle文件
/**driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///student
username=root
password=123456
#初始化连接数量
initialSize=5
#最大连接数
maxActive=10
#最大等待时间
maxWait=3000
*/