本质:
好处:
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");//由于导入的jar包是8.0之后的版本
//获取连接对象
String url="jdbc:mysql://127.0.0.1:3306/bank_175?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8";
String username="root";
String password="123456";
Connection conn= DriverManager.getConnection(url,username,password);
//定义sql语句
String sql="update account_175 set balance=500.0 where account_number='A_101' ";
//获取执行sql对象---这里会变更
Statement stmt=conn.createStatement();
//执行sql
int count=stmt.executeUpdate(sql);
//处理结果,cnt=受影响的行数;
System.out.println("受影响的行:"+count);
//释放资源
stmt.close();
conn.close();
驱动管理类的作用:
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");//由于导入的jar包是8.0之后的版本
但是对于MYSQL 5
之后的驱动包,可以省略注册驱动的步骤。自动加载jar包中如下的驱动类:
然后你发现和上述代码中的字符串一模一样()
static Connection | getConnection(String url,String user,String password)
user
和password
没啥好说的,即自己数据库用户账密(一般用的都是root)。所以主要就是url。
url
,我们在计网中学过,它叫统一资源定位符。在这里,url
是连接数据库的路径。
- 语法:
jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2...
- 示例:
jdbc:mysql://127.0.0.1:3306
- 细节:
jdbc:mysql://
表明是JDBC
的mysql
的协议。- 如果连接的是本机的
mysql
服务器,并且mysql
服务器默认端口是3306(或许你自己改了,一般没改就是这个捏),那么可以简写成jdbc:mysql:///数据库名称?参数键值对1&参数键值对2...
- 配置
useSSL=false
参数,禁用安全连接方式,解决警告提示。
数据库连接对象的作用:
//普通执行SQL对象
Statement createStatement()
//预编译SQL的执行对象:防止SQL注入
PreparedStatement prepareStatement(sql)
//执行存储过程的对象
CallableStatement prepareCall(sql)
MYSQL
的事务管理:
#mysql default下默认自动提交事务
#开启事务
begin;start transaction;
#提交事务
commit;
#回滚事务
rollback;
JDBC
的事务管理:
//开启事务--true:自动提交事务;false:手动提交事务,即开启事务
setAutoCommit(boolean autoCommit);
setAutoCommit(false);//开启事务!
//提交事务
commit();
//回滚事务
rollback();
Statement
的作用:执行SQL语句。
int executeUpdate(sql);//执行DML、DDL语句
//return: 1.DML语句影响行数 2.DDL语句执行后,执行成功【也可能】返回0
ResultSet executeQuery(sql);//执行DQL语句
//return:ResultSet结果集对象
结果集对象的作用:
ResultSet stmt.executeQuery(sql);//执行DQL语句,返回ResultSet对象
//【获取查询结果】
boolean next();
//将光标从当前行向前移动一行,判断当前行是否为有效行。
//return:
// 1.true:有效行、当前行有数据
// 2.false:无效行、当前行没有数据
//【获取数据】
xxx getXxx(params);
//xxx:数据类型,eg: int getInt(1),String getString("name")
//params:第几列,可选择int or String来选择
// int:列的编号,从1开始
// String:列的名称
//【使用方法】
while(re.next()){
rs.getXxx();
}
这里可以将每一行的数据载入ArrayList。
通过定义一个类:装载所有的schema捏。
PreparedStatement作用:
SQL注入:通过操作输入事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。
//【获取PreparedStatement对象】
//SQL语句中的参数值使用'?'占位符来替代
String sql="select * from user where username = ? and password =?";
//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt=conn.prepareStatement(sql);
//【设置参数值】
//PreparedStatement对象:setXxx(param1,param2):给?赋值
//Xxx:数据类型,eg:setInt(...)
//params:
// param1:?的位置编号,从1开始
// param2:?的值
//【执行SQL】
executeUpdate();
executeQuery();
//开启预编译功能--加入url后面
useSeverPrepStmts=true
鹅鹅鹅,下面这个可能不需要捏。
加入MYSQL的日志my.ini
(重启完成)
log-out=FILE
general-log=1
general_log_file="D:\mysql.log"
slow-query-log=1
slow-query-log-file="D:\mysql_slow.log"
long_query_time=2
数据库连接池:是个容器,负责分配、管理数据库连接(Connection
)。
好处
标准接口:DataSource
//功能:获取连接
Connection getConnection();
常见的数据库连接池:
- DBCP
- C3P0
- Druid(One of Best)
捣鼓半天,成功了。
urce`
//功能:获取连接
Connection getConnection();
常见的数据库连接池:
- DBCP
- C3P0
- Druid(One of Best)
捣鼓半天,成功了。