MySQL(二)JDBC

JDBC思维导图
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
    • 关闭资源: 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

猜你喜欢

转载自blog.csdn.net/awen6666/article/details/103619249