赞
踩
目录
- /* 使用图形化工具操作数据库:步骤:1、连接数据库
- 1.1、启动mysql:
- 管理员身份运行cmd:net start【stop】 mysql 密码:123123
- 1.2、图形化界面连接数据库
- JDBC:Java DataBase Connectivity java语言操作数据库
- JDBC本质:官方(sun公司)定义的操作所有的关系型数据库的规则(接口);各个数据库厂商去实现这套接口,提供数据库驱动jar包。
- 我们可以使用这套接口编程,真正执行代码的是驱动jar包中的实现类
- 快速入门:【注意:mysql8驱动版本必须设置时区和设置驱动为com.mysql.cj.jdbc.Driver】
- 步骤:1、导入驱动jar包
- 1.1、赋值jar包到项目的libs目录下
- 1.2、Add As Library
- 2、注册驱动
- 3、获取连接对象,Connection
- String url="jdbc:mysql://localhost:3306/数据库名" +
- "?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT";//设置编码方式为UTF-8 设置数据库时间标准为东八区
- Unicode;Encode:编码 timezone:时区 userssl:关闭证书验证【下有补充】
- 4、定义sql语句
- 5、获取执行对象,Statement
- 6、执行sql,接受返回结果
- 7、处理结果
- 8、释放资源
- */
- /*详解创建的各个对象:
- 1*、DriverManager接口:驱动管理对象
- 功能:1、注册驱动 【.5之后的驱动jar包可以省略】
- static void registerDriver(Driver driver) 向DriverManager 注册给定驱动程序。
- 写代码的话用 例子:Class.forName("com.mysql.cj.jdbc.Driver");
- 通过查看源码发现:在com.mysql.cj.jdbc.Driver类中存在静态代码块
- static {
- try {
- DriverManager.registerDriver(new Driver());
- } catch (SQLException var1) {
- throw new RuntimeException("Can't register driver!");
- }
- }
- 2、获取数据库连接
- static Connection getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接。
- 参数:url:指定连接的路径,
- 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称 //.5jar版本
- 例子:"jdbc:mysql://localhost:3306/db1"
- 细节:如果连接的是本机的mysql服务器,并且mysql服务默认为3306;则url可以写为:jdbc:mysql://数据库名称
- user:用户名,
- passwd:密码
-
- 2*、Connection接口:数据库连接对象
- 功能:1、获取执行sql的对象
- Statement createStatement()
- PreparedStatement prepareStatement(String sql)
- 2、管理事务
- 开启事务
- void setAutoCommit(boolean autoCommit) 调用该方法设置参数为false,即开启事务
- 提交事务
- void commit()
- 回滚事务
- void rollback()
-
- 3*、Statement:执行sql的对象 java.sql
- 功能:1、执行sql
- boolean execute(String sql) 可以执行任意sql【了解】
- int executeUpdate(String sql 执行DML语句【返回影响行数】、DDL语句【返回0】
- 返回值:数据库中影响的行数 返回值>0 执行成功
- ResultSet executeQuery(String sql) 执行DDL语句
-
- 4*、ResultSet:结果集对象
- 功能:封装查询结果
- boolean next():游标向下移动一行;判断当前行是否是最后一行末尾【是否有数据;true--有数据】
- xxx getXxx(参数):获取数据 其中,Xxx是数据类型
- 参数:1、int:代表列的编号,从1开始
- 2、String:代表列的名称
- 注意:使用步骤:
- 1、游标向下移动一行
- 2、判断是否有数据
- 3、获取数据
-
- 5*、PreparedStatement:执行动态sql的对象 Statement的子类
-
- 补充:
- SSL协议提供服务主要:
- 1)认证用户服务器,确保数据发送到正确的服务器; .
- 2)加密数据,防止数据传输途中被窃取使用;
- 3)维护数据完整性,验证数据在传输过程中是否丢失;
- 当前支持SSL协议两层:
- SSL记录协议(SSL Record Protocol):建立靠传输协议(TCP)高层协议提供数据封装、压缩、加密等基本功能支持
- SSL握手协议(SSL Handshake Protocol):建立SSL记录协议用于实际数据传输始前通讯双进行身份认证、协商加密算法、 交换加密密钥等。
-
- */
- /*PreparedStatement和Statement:
- 关系:PreparedStatement继承自Statement,都是接口
- 区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高???
- 详解:
- 1、PreparedStatement:表示预编译的 SQL 语句的对象。
- 接口:public interface PreparedStatement extends Statement之间的继承关系
- SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
- 注:用于设置 IN 参数值的设置方法(setShort、setString 等等)必须指定与输入参数的已定义 SQL 类型兼容的类型。例如,如果 IN 参数具有 SQL 类型 INTEGER,那么应该使用 setInt 方法,问号的位置也是应该注意的,因为第一个问好的位置为1,第二个问号的位置为2.以此类推。
- 如果需要任意参数类型转换,使用 setObject 方法时应该将目标 SQL 类型作为其参数。
- 在以下设置参数的示例中,con 表示一个活动连接:
- PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SALARY = ? WHERE ID = ?");
- pstmt.setBigDecimal(1, 1533.00)
- pstmt.setInt(2, 1102)
- pstmt.execute()//注意提交时这里不能再有sql语句,不同于Statment */
- //使用PrepareStatement
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class PreparedStatementTest {
- public static void main(String[] args) {
- test_autoCommit();
- }
- public static void test_autoCommit()
- {
- String driver="oracle.jdbc.driver.OracleDriver";
- String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
- String user="admin";
- String password="admin";
- Connection conn=null;
- PreparedStatement ps=null;
- try {
- //1、注册驱动
- Class.forName(driver);
- //2、获取连接
- conn= DriverManager.getConnection(url, user, password);
- //System.out.println(conn);
- //3、创建prepareStatement对象
- String sql="insert into lover values(?,?,?)";
- ps=conn.prepareStatement(sql);
- //4、执行sql语句
- ps.setInt(1,21);//代表设置给第一个?号位置的值为Int类型的21
- ps.setString(2,"suwu150");//代表设置给第二个?号位置的值为String类型的suwu150
- java.util.Date utilDate=new java.util.Date();//进行类型转换,由util类型的date转化为sql类型的
- ps.setDate(3, new java.sql.Date(utilDate.getTime()));
- //ps.execute();//执行
- System.out.println(ps.execute());//执行表输出返回的结果,结果为false,因为没有返回的结果集
- //5、处理结果集
- } catch (Exception e) {
- e.printStackTrace();
- }
- finally{
- //6、关闭资源
- try {
- if(ps!=null)ps.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- try {
- if(conn!=null)conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
- //使用Statement
- public class Jdbc05 {
- public static void main(String[] args) {
- Connection conn=null;
- Statement stmt=null;
- ResultSet rs=null;
- try {//1
- Class.forName("com.mysql.cj.jdbc.Driver");
- //2 、获取连接对象
- String url="jdbc:mysql://localhost:3306/db1"+
- "?useUniocde=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT";
- conn = DriverManager.getConnection(url, "root", "123123");
- //3 定义sql
- String sql="select * from student";
- //4 获取执行sql对象
- stmt = conn.createStatement();
- //5 执行sql 创建结果集对象
- rs = stmt.executeQuery(sql);
- int count=rs.getMetaData().getColumnCount();//通过结果集元数据,得到列数
- //6 处理结果
- //6.1 让游标向下移动一行
- while(rs.next()){//循环判断游标是否是最后一行末尾 //和迭代器相似
- //6.2 获取数据
- for (int i = 1; i <= count; i++) {//光标从1开始
- System.out.print(rs.getString(i));
- if(i<count) System.out.print(",");
- }
- System.out.println();
- }
- //7 释放资源
- } catch (ClassNotFoundException | SQLException e) {
- e.printStackTrace();
- }finally{
- if(rs!=null){
- try {
- stmt.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if(stmt!=null){
- try {
- stmt.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if(conn!=null){
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
-
- }
- }
1、编写jdbc.properties文件
- //jdbc.properties
- url=jdbc:mysql://localhost:3306/db1?useDemode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT
- user=root
- password=123123
- driver=com.mysql.cj.jdbc.Driver
2、编写工具类
- /*
- *获取连接需求:不想传递参数(麻烦),还要保证工具类的通用性。
- * 解决方案:配置文件
- * jdbc.properties
- * url=
- * user=
- * password=
- * 文件的读取只需读取一次。使用静态代码块完成
- * */
- public class JDBCUtils {
- private static String url;//静态变量才能被静态代码块和静态方法访问
- private static String user;
- private static String password;
- private static String driver;
-
- static{
- //读取配置文件,获取值
- //1 Properties集合类
- Properties pro=new Properties();
- try {
- /* 2 加载文件 */
- //获取配置文件路径的方式 ClassLoader 类加载器
- ClassLoader classLoader = JDBCUtils.class.getClassLoader();
- URL res = classLoader.getResource("jdbc.properties");//获取统一资源定位符 定位文件路径
- String path = res.getPath();//获取字符串路径
- System.out.println(path);///E:/IdeaProjects/java_lianxi/out/production/java_lianxi/jdbc.properties
- // pro.load(new FileReader("src/jdbc.properties"));
- pro.load(new FileReader(path));
- //3 获取属性
- url=pro.getProperty("url");
- System.out.println(url);
- user=pro.getProperty("user");
- password=pro.getProperty("password");
- driver=pro.getProperty("driver");
- //4 注册驱动
- Class.forName(driver);
- } catch (IOException | ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- //获取连接方法
- public static Connection getConnection() throws SQLException {
- return DriverManager.getConnection(url,user,password);
- }
-
- //释放资源方法
- public static void close(Statement stmt, Connection conn){
- if(stmt!=null){
- try {
- stmt.close();
- } catch (SQLException throwables) {
- throwables.printStackTrace();
- }
- }
- if(conn!=null){
- try {
- conn.close();
- } catch (SQLException throwables) {
- throwables.printStackTrace();
- }
- }
- }
- //释放资源重载方法
- public static void close(ResultSet rs,Statement stmt, Connection conn){
- if(rs!=null){
- try {
- rs.close();
- } catch (SQLException throwables) {
- throwables.printStackTrace();
- }
- }
- if(stmt!=null){
- try {
- stmt.close();
- } catch (SQLException throwables) {
- throwables.printStackTrace();
- }
- }
- if(conn!=null){
- try {
- conn.close();
- } catch (SQLException throwables) {
- throwables.printStackTrace();
- }
- }
- }
- }
3、编写封装数据的Javabean
- //(id,name,age,sex,address,math,english)
- //对应封装student表数据的JavaBean
- public class Stu {
- private int id;
- private String name;
- private int age;
- private String sex;
- private String address;
- private int math;
- private int english;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- public String getSex() {
- return sex;
- }
-
- public void setSex(String sex) {
- this.sex = sex;
- }
-
- public String getAddress() {
- return address;
- }
-
- public void setAddress(String address) {
- this.address = address;
- }
-
- public int getMath() {
- return math;
- }
-
- public void setMath(int math) {
- this.math = math;
- }
-
- public int getEnglish() {
- return english;
- }
-
- public void setEnglish(int english) {
- this.english = english;
- }
-
- @Override
- public String toString() {
- return "Stu{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", age=" + age +
- ", sex='" + sex + '\'' +
- ", address='" + address + '\'' +
- ", math=" + math +
- ", english=" + english +
- '}';
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。