MySQL笔记7-Java数据库连接(JDBC)

    科技2022-07-15  123

    Java数据库连接(JDBC) JDBC:Java DataBase Connectivity 使用Java进行数据库连接的技术 JDBC API:java.sql.* 里面规定了与各种数据库服务器操作的标准接口,另外需要一个相应数据库的驱动jar包

    JDBC编程 1、添加数据库驱动jar包支持 2、连接数据库 username、password、connectionUrl 不同数据库服务器的URL格式不同

    示例代码:

    package my; import java.sql.Connection; import java.sql.DriverManager; public class Test { public static void testConnect() throws Exception{ //注册MySQL驱动(可以省略这一步) Class.forName("com.mysql.jdbc.Driver"); //连接MySQL服务器 String username="root"; String password="123456"; String connectionUrl="jdbc:mysql://127.0.0.1:3306/school?usesUnicode=true&characterEncoding=UTF-8"; Connection conn=DriverManager.getConnection(connectionUrl,username,password); System.out.println("连接成功!"); conn.close(); System.out.println("关闭连接!"); } public static void main(String[] args) { try { testConnect(); } catch (Exception e) { e.printStackTrace(); } } }

    在定义地址时 jdbc:msql:表示协议,用来指定要连接的服务器类型(oracle/MySQL/SQL Server) 128.0.0.1表示地址 3306表示端口号 school表示数据库名 usesUnicode=true&characterEncoding=UTF-8表示做网络传输时使用的字符集编码 DriverManager.getConnection表示获取连接,该函数的三个参数分别是(地址,用户名,密码) conn.close()表示关闭数据库连接

    语法分析 1、java.sql.*下规定了标准接口,而MySQL驱动里则是各个接口的实现 2、MySQL驱动的内部封装了与服务器的交互协议 3、Class.forName(“com.mysql.jdbc.Driver”); 这一行用于显式注册MySQL驱动,但可以省略

    JDBC查询数据 示例代码:

    package my; import java.beans.Statement; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.ResultSet; public class Test { public static void testQuery() throws Exception{ //注册MySQL驱动的语句可有可无 //但是将来有些运行环境下不支持驱动的自动加载,例如Java Web的环境里必须手动注册MySQL驱动 Class.forName("com.mysql.jdbc.Driver"); //连接MySQL服务器 String username="root"; String password="123456"; String connectionUrl="jdbc:mysql://127.0.0.1:3306/af_school?userUnicode=true&characterEncoding=UTF-8"; Connection conn=DriverManager.getConnection(connectionUrl,username,password); System.out.println("连接成功"); // //数据库查询,Statement语句 ResultSet结果集 java.sql.Statement stmt=conn.createStatement(); //执行一个查询executeQuery(),返回一个结果集对象ResultSet ResultSet rs=stmt.executeQuery("SELECT*FROM student"); //如果有数据,rs.next()返回true while(rs.next()) { //取出这一行记录 int id=rs.getInt("id"); String name=rs.getString("name"); String phone=rs.getString("phone"); Date birthday=rs.getDate("birthday"); System.out.println(id+"\t"+name+"\t"+phone); } conn.close(); System.out.println("关闭连接!"); } public static void main(String[] args) { try { testQuery(); }catch(Exception e) { e.printStackTrace(); } } }

    JDBC插入数据 处理自增主键时需注意: 1、插入数据时,不写该字段 2、执行时指定 RETURN_GENERATED_KEYS 3、取出返回的自增主键

    SQL语句的构造 经过前面的示例,可以发现jdbc的操作并不复杂,基本步骤: 1、注册MySQL驱动

    Class.forName("com.mysql.jdbc.Driver");

    2、连接数据库(例)

    String username="root"; String password="123456"; String connectionUrl="jdbc:mysql://127.0.0.1:3306/school?useUnicode=true?characterEncoding=UTF-8"; Connection conn=DriverManager.getConnection(connectionUrl,username,password);

    3、准备一个sql语句(例)

    String sql="INSERT INTO student(`id`,`name`,`birthday`)"+"VALUES('20200001','z张三','2000-9-13')";

    4、执行sql语句

    Statement stmt=conn.creatStatement(); stmt.execute(sql);

    5、关闭MySQL连接

    conn.close();

    在准备SQL语句时容易出错,使用工具类来构造SQL语句可以减少出错的几率

    预处理查询 使用PreparedStatement接口可以处理预处理查询

    普通查询处理步骤 1、MySQL接收到SQL请求 2、解析SQL请求(解析分为结构和数据两部分) 3、执行查询 4、返回结果

    预处理查询处理步骤 1、MySQL接受到预处理的SQL(结构) 2、解析SQL请求 3、服务器收到参数的值(数据) 4、执行查询 5、返回结果

    在连续执行多个结构相同、参数不同的查询时,使用预处理技术更有性能优势!

    预处理代码结构:

    //构造一个预处理查询 String sql=... //先把sql构造发送给服务器 PreparedStatement ptmt=... while(...){ //设置数据,把数据传给服务器 ptmt.set(1,...) ptmt.set(2,...) ptmt.execute() }

    示例代码:

    package my; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class Test { public static void testQuery()throws Exception{ //1、注册驱动器 Class.forName("com.mysql.jdbc.Driver"); //2、创建MySQL连接 String username="root"; String password="123456"; String connectionUrl="jdbc:mysql://127.0.0.1:3306/af_school?useUnicode=true&characterEncoding=UTF8"; Connection conn=DriverManager.getConnection(connectionUrl,username,password); System.out.println("连接成功!"); //3、创建sql语句 //(1、构造一个SQL,参数值用?号代替,称为占位符 String sql="INSERT INTO student(`id`,`name`,`birthday`)VALUES(?,?,?)"; //(2、创建PreparedStatement对象(与MySQL产生一次交互),获取预处理对象 PreparedStatement ptmt=conn.prepareStatement(sql); //(3、设置参数值 ptmt.setInt(1, 20183001); ptmt.setString(2, "小新"); ptmt.setString(3, "1993-3-10"); //4、、执行sql语句 //(4、执行查询 ptmt.execute(); //5、关闭连接 conn.close(); System.out.println("关闭连接!"); } public static void main(String[] args) { try { testQuery(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
    Processed: 0.023, SQL: 8