JDBC思维导图
JDBC
1、JDBC概念
Java数据库连接(Java Database Connectivity),实际上jdbc是java中的一套和数据库交互的API(Application Program Interface 应用程序编程接口)。
2、为什么使用JDBC
因为Java程序员需要连接多种数据库(Orcale、Mysql、DB2),为了避免每一个数据库都学习一套新的api,sun公司提出了一个jdbc接口,各个数据库厂商根据此接口写实现类(驱动),这样Java程序员只需要掌握JDBC接口中的一套方法,就可以访问任何数据库。
3、如何使用JDBC
- 创建maven工程
- 下载mysql相关jar包
- 登录maven. aliyun. com
- 搜索mysql,找到mysql-connector-java-5.1.6.jar版本
- 复制,粘贴到maven工程下的pom.xml里
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency>
- JDBC访问数据库步骤
- 注册驱动: Class.forName(“com.mysql.jdbc.Driver”);
- 获取数据库连接对象: Connection conn = DriverManager.getConnection(url,user , password);
url=jdbc:mysql://localhost:3306/db user=root password123456 - 创建sql执行对象: Statement stat = conn.createStatement();
- 执行sql
- execute(sql) 执行DDL
该方法可以执行任意sql,但推荐执行DDL;
返回值为boolean,true–>有结果集 false–>没有结果集
成功或失败通过是否有异常来判断; - executeUpdate(sql) 执行DML
返回值为int,代表生效行数。 - executeQuery(sql) 执行DQL
返回值为ResultSet,里面装了查询的结果;
next() 判断有无下一条数据,有则返回true且游标下移,没有则返回false。
ResultSet获取数据的两种方式:
方式一:通过字段名获取 getString(“name”);
方式二:通过查询到结果数据的位置获取(位置从1开始) getString(2) - 数据库类型和Java类型对比
int – getInt
varchar – getString
float/double – getFloat/getDouble
datetime/timestamp – getDate
- execute(sql) 执行DDL
- 关闭资源: stat.close(); conn.close();
4、封装并优化JDBC访问数据库
DBUnits类:获取JDBC连接
public class DBUnits {
private static String driver;
private static String url;
private static String root;
private static String password;
static{
// 创建读取配置文件的对象
Properties prop = new Properties();
// 获取文件输入流
InputStream is = PropertiesDemo.class.getClassLoader().getResourceAsStream("jdbc.properties");
try {
// 把文件加载到对象中
prop.load(is);
// 读取连接数据库的信息
driver = prop.getProperty("driver");
url = prop.getProperty("url");
root = prop.getProperty("root");
password = prop.getProperty("password");
} catch (IOException e) {
e.printStackTrace();
}
}
// 封装获取连接对象的代码
public static Connection getConn() throws Exception{
// 1.注册驱动
Class.forName(driver);
// 2.获取连接对象
Connection conn = DriverManager.getConnection(url, root, password);
return conn;
}
// 关闭资源
public static void close(ResultSet rs,Statement stat,Connection conn){
try {
// 避免空指针异常
if(rs!=null){
rs.close();
}
if(stat!=null){
stat.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
JDBCUnitsTest类
public class JDBCUnitsTest {
@Test
public void insert(){
// 把各种资源声明在try catch外面,为了在finally里面关闭
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try {
// 获取连接对象
conn = DBUnits.getConn();
// 创建sql执行对象
stat = conn.createStatement();
// 执行sql
String sql = "insert into jdbc1 values(4,'刘备')";
stat.executeUpdate(sql);
System.out.println("插入成功!");
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭资源
DBUnits.close(rs, stat, conn);
}
}
@Test
public void select(){
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try {
conn = DBUnits.getConn();
stat = conn.createStatement();
rs = stat.executeQuery("select *from jdbc");
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id+": "+name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUnits.close(rs, stat, conn);
}
}
@Test
public void update(){
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try {
conn = DBUnits.getConn();
stat = conn.createStatement();
stat.executeUpdate("Update jdbc set name='李' where id=3");
System.out.println("修改成功!");
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUnits.close(rs, stat, conn);
}
}
@Test
public void delete(){
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try {
conn = DBUnits.getConn();
stat = conn.createStatement();
stat.executeUpdate("delete from jdbc where id=2");
System.out.println("删除成功!");
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUnits.close(rs, stat, conn);
}
}
public static void main(String[] args) {
}
}
5、解决jdbc乱码问题
在url后面添加
jdbc:mysql://localhost:3306/db3?useUnicode=true&characterEncoding=UTF-8