JDBC入门简介

JDBC入门:
JDBC(Java Data Base Connectivity),java数据库连接。

准备:
开发工具:eclipse
数据库: MySQL
jar包:mysql-connector-java-5.1.22-bin.jar

JDBC helloworld,编写流程

  • 0 导入jar包(驱动)
  • 1 注册驱动
  • 2 获得链接
  • 3 获得语句执行者
  • 4 执行sql语句
  • 5 处理结果
  • 6 释放资源

Jvav 代码:

package com.my.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class MyJdbcTest {

	public static void main(String[] args) throws Exception {
		// 1 注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		// 2 获得链接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1234");
		// 3 获得语句执行者
		Statement st = conn.createStatement();
		// 4 执行sql语句
		ResultSet rs = st.executeQuery("select * from users");
		// 5 处理结果
		while (rs.next()) {
			String id = rs.getString("id");
			String name = rs.getString("name");
			int age = rs.getInt("age");
			System.out.println(id + " # " + name + " # " + age);
		}
		// 6 释放资源
		rs.close();
		st.close();
		conn.close();

	}

}

结果:
这里写图片描述

JDBC API详解

  • 1 注册驱动

  • 接口:java.sql.Driver ,每个驱动程序类必须实现的接口

  • 工具类:java.sql.DriverManager ,驱动管理类

  • 提供一个static方法:registerDriver(Driver driver) ,注册驱动

  • 最终代码:Class.forName(“com.mysql.jdbc.Driver”);

  • 2 获得链接

    • 接口:java.sql.Connection,与特定数据库的连接
      • 获得链接:DriverManger.getConnection(url,user,password)
      • user --> 数据库的用户名
      • password --> 用户名对应的密码
      • mysql url -->
        jdbc:mysql://localhost:3306/mydb
  • 方法 :

    • 获得预处理对象:prepareStatement(String sql)
    • 执行数据库存储过程:prepareCall(String sql)
  • 3 获得语句执行者

    • 接口:java.sql.Statement 获得方式:createStatement()
    • 方法:
      执行DQL(数据查询语言)语句 :ResultSet executeQuery(sql)
      ,返回值表示结果集,将所有的查询数据都存放到该对象

    执行DML(数据操作语句)语句 :int executeUpdate(sql) ,
    返回值表示响应的行数
    执行sql语句:boolean execute(sql) 如果返回true,表示执行DQL;如果返回false,表示执行的DML 返回结果为true时,通过getResultSet获得结果集

  • 4 处理结果

    • 接口:java.sql.ResultSet
    • 获得方式:Statement.executeQuery(sql) 详解
      1.默认情况结果集指向头
      2.当执行结果的next()方法,游标将向下移动一行
      3.通过getXxx方法获得需要的数据
      方法:
      getXxx(字段名称),通过指定的字段名称,获得当前记录的字段的值。 getXxx(字段索引),索引从1开始。通过指定的索引,获得指定索引的字段的值。
      4.next() 如果指向的记录,返回true,如果指向头或尾,返回false

如果出现中文乱码,在获得链接时,在url中追加参数:?useUnicode=true&characterEncoding=UTF-8
例如:DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8”, “root”, “1234”);

  • sql注入
    页面传递的数据,作为了sql语句的一部分。被数据库进行编译。
    • 预处理对象
      接口:java.sql.PreparedStatement
      获得方式:Connection.preparedStatement(sql) ,提前提供sql语句将实际参数使用?替换预先编译sql语句,在使用实际参数替换回?,实际参数就不会作为sql语句被编译,只作为具体的参数

JDBC 的增上改查:

package com.my.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import org.junit.Test;

public class CRUDTest {

	@Test
	public void save() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1234");
		Statement st = conn.createStatement();
		int r = st.executeUpdate("insert into users(id,name,age) values('u004','Joe','15')");
		System.out.println(r);
		st.close();
		conn.close();

	}
	
	@Test
	public void update() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1234");
		Statement st = conn.createStatement();
		int r = st.executeUpdate("update users set age = '21' where id = 'u004' ");
		System.out.println(r);
		st.close();
		conn.close();
		
	}
	
	@Test
	public void delete() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1234");
		Statement st = conn.createStatement();
		int r = st.executeUpdate("delete from users where id = 'u004'"); 
		System.out.println(r);
		st.close();
		conn.close();
	}
	
	@Test
	public void findById() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1234");
		Statement st = conn.createStatement();
		ResultSet rs = st.executeQuery("select * from users where id = 'u004'");
		//处理结果  -- 通过id查询,没有结果,只有一条记录
		if(rs.next()){
			String id = rs.getString("id");
			String name = rs.getString("name");
			int age = rs.getInt("age");
			System.out.println(id + " # " + name + " # " + age);
		} else {
			System.out.println("没有结果");
		}
		rs.close();
		st.close();
		conn.close();

	}
	
}

JdbcUtils
将driver, url,username,password基本四项移到配置文件

jdbcinfo.properties:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8
username=root
password=1234

JdbcUtils demo;

package com.my.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

public class JdbcUtils {

	private static Connection conn;

	static {
		try {
			// jdbc 基本4项 : driver url user password
			ResourceBundle bundle = ResourceBundle.getBundle("jdbcinfo"); // 文件基本名称
			String driver = bundle.getString("driver");
			String url = bundle.getString("url");
			String user = bundle.getString("username");
			String password = bundle.getString("password");
			// 1 注册驱动
			Class.forName(driver);
			// 2 获得链接
			conn = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			throw new RuntimeException(e.getMessage(), e);
		}
	}

	public static Connection getConnection() {
		return conn;
	}

	public static void closeResource(Connection conn, Statement st, ResultSet rs) {
		try {
			if (rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			throw new RuntimeException(e.getMessage(), e);
		} finally {
			try {
				if (st != null) {
					st.close();
				}
			} catch (SQLException e) {
				throw new RuntimeException(e.getMessage(), e);
			} finally {
				try {
					if (conn != null) {
						conn.close();
					}
				} catch (SQLException e) {
					throw new RuntimeException(e.getMessage(), e);
				}
			}
		}

	}

}

Coding Diary

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值