MySQL JDBC
JDBC
1 概念:Java DataBase Connectivitiy Java数据库连接,Java语言操作数据库
本质:官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动ar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
2 快速入门
步骤:
1 导入驱动jar包
1 复制mysql-connector-java-5.1.20-bin.jar到项目的libs目录下
2 右键 add as library
2 注册驱动
3 获取数据库连接对象 Connection
4 定义sql
5 获取执行sql语句的对象 Statement
6 执行sql,接收返回结果
7 处理结果
8 释放资源
package itcast;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class jdbc_demo1 {
public static void main(String[] args) throws Exception
{
//1. 导入驱动jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库的连接对象,第二个参数是用户名,第三个参数是密码
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","001224");
//4.定义sql语句
String sql="update account set account=500 where id=1";
//5.获取执行sql的对象 Statement
Statement stmt=conn.createStatement();
//6.执行sql
int count=stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
stmt.close();
conn.close();
}
}
3 详解各个对象:
1 DriverManager:驱动管理对象
功能:
1 注册驱动
2 获取数据库连接
static Connection getConnection(String url,String user,String password)
参数:
url:指定连接的路径
语法: jdbc:mysql://ip地址(域名):端口号/数据库名称
jdbc:mysql://localhost:3306/db3
细节:如果连接的是本机mysql服务器,并且mysql服务器默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
user:用户名
password:密码
2 Connection:数据库连接对象
功能
1 获取执行sql的对象
1 Statement createStatement()
PreparedStatement prepareStatement(String sql)
2 管理事务
开启事务 setAutoCommit(boolean autocommit) 调用该方法设置参数 为false,即开启事务
提交事务 Commit()
回滚事务 rollback()
3 Statement:执行sql的对象
1 执行sql
1 boolean execute(String sql):可以执行任意的sql
2 int executeUpdate(String sql): 执行DML(insert,update,delete)语句
DDL(create,alter,drop)语句
* 返回值:影响的行数,可以通过影响的行数判断DML语句是否执行成功,返回值>0执行成功,反之,则失败
3 ResultSet executeQuery(String sql):执行DQL(select)语句
2 练习
1 account表添加一条记录
2 account表修改一条记录
3 account表删除一条记录
package itcast;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class jdbc_demo2 {
public static void main(String[] args)
{
Statement stmt=null;
Connection conn=null;
//1. 注册驱动
try {
Class.forName("com.mysql.jdbc.Driver");
//2.定义sql
String sql="insert into account values(null,'wangwu',3000)";
//3.获取Connection对象
try {
conn=DriverManager.getConnection("jdbc:mysql:///db3", "root", "001224");
//4.获取执行sql的对象 Statement
stmt=conn.createStatement();
//5.执行sql
int count=stmt.executeUpdate(sql);
//6.处理结果
System.out.println(count);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//7.释放资源
//stmt.close();
//避免空指针异常
if(stmt!=null)
{
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null)
{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
4 Resultset:结果集对象,封装查询的结果
boolean next() 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是,则返回true
getXxx() 获取数据
Xxx: 代表数据类型 如:int getInt() String getString()
参数:
1 int:列的编号从1开始 如:getString(1)
2 String:列的名称 如:getDdouble("balance")

注意:
使用步骤:
1 游标向下移动一行
2 判断是否有数据
3 获取数据
5 PreparedStatement:执行sql的对象
1. SQL注入问题:在拼接sql时,由一些sql的特殊关键关键字参与字符串的拼接。会造成安全性问题
1. 输入用户随便,输入密码:a' or 'a'='a'
2. sql: select * from user where username='fdfdfs' and password=a'or a'a'='a'
2. 解决sql注入问题:使用PreparedStatement对象来解决
3. 预编译的SQL:参数使用?作为占位符
4. 步骤:
1.导入驱动jar包
2.注册驱动
3.获取数据库连接对象Connection
4.定义sql
注意:sql的参数使用?作为占位符。
如:select * from user where username=? and password=?;
5.获取执行sql语句的对象PreparedStatement Connection.prepareStatement(String sql)
6.给?赋值:
方法:setXxx(参数1,参数2)
参数1:问号的位置编号,从1开始
参数2: ?的值
6.执行sql,接受返回结果,不需要传递sql语句
7.处理结果
8.释放资源
5.注意:后期都会使用PreparedStatement来完成增删改查的所有操作
1. 可以防止sql注入
2. 效率更高
抽取JDBC工具类:JDBCUtils
目的:简化书写
分析:
1 抽取注册驱动
2 抽取一个方法获取连接对象
需求:不想传递参数,还要保证工具类的通用性
解决:配置文件
jdbc.properties
url=
user=
password=
3 抽取一个方法释放资源

浙公网安备 33010602011771号