java0015——JDBC读取数据库的内容

一. SQL语句基础

  • 查询语句 select from
  • DML语句 insert into 、updata、delete from/插入、删除、修改数据/
  • DCl语句 grant 、revoke
  • DDL 语句 create 、 drop 、 alter /创建、删除,修改/
  • 事件控制语句 commit、rollback、savapoint
    具体的请看上一张
    二. 经典用法
    1 常用类与接口
  • **DriverManager **
    用于管理JDBC驱动的服务类,主要功能是获取Connection对象
    该类包括r如下方法
public static synchronized  Connectionv getConnecting
(String url, String user String pass) throwsSQLEXception   

synchronized — Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。来自---------- https://baike.baidu.com/item/synchronized

  • Connection
    代表数据库连接的对象, 每个Connection代表一个物理连接回话,要想访问数据库,就要连接数据库, 该口的常用方法有
Statement creatStatement()throws SQLException; // 返回一个Statement 对象
PreparedStatement 	prepareStatement0(String sql)  throws SQLException
//返回预编译好的Statement 对象(将SQL语句提交到数据库进行预编译 )
CallableStatement	prepareCall(String  sql )	throws	SQLException //用于调用存储过程
Savapoint setSavepoint()  //创建一个保存点
Savapoint setSavepoint(String name)  //指定一个名字来创建一个保存点
void setTransactionIsolation(int level) // 设置事务的隔离级别
void rollback(); //回滚事务
void rollback(Savepoint savepoint)//将事务回滚到指定的保存点,
void setAutoCommit(boolean autoCommit)  关闭自动提交,打开事务
void commit () //提交事务
  • **Statement **
    用于执行SQL语句的工具接口,既可以执行 DDL、DCL语句,也可以执行DML ,SQL查询语句,一下是他的常用方法。
ResultSet excuteQuery(String sql )throws SQLException
 //该方法用于执行查询语句,并返回查询结果对应的ResultSet对象,==只能执行查询语句==
 int executeUpdate(String sql ) throws SQLExcetion  //该方法用于执行DML语句,
 //并返回受影响的程度,也可以执行DDL,执行DDL返回0
 boolean execute(String sql) throws SQLException  该方法用于执行任何SQL语句,
 //如果执行后的第一个对象为Result对象则返回true,如果是受影响的行数或没有任何结果,返回false

PreparedStatement
Statement的子接口,它允许数据库预编译SQl语句,以后每次只改变SQl命令的参数,
避免数据库每次都要编译SQl语句,因此性能更好,相对于Statement而言,无需重新传入SQL语句,因为他已经预编了SQL语句他比Statement多了如下方法

void  setXxx(int parameterIndex,Xxx value) //该方法指定传入的参数不同,需要使用不同的方法,
传入的值根据索引穿给SQL语句中的指定位置的参数
  • Result
    结果集对象,该对象包含查询结果的对象,Result可以通过索引或者列名获取列数据
    常用方法:
void close () throws SQLException 释放ResultSet对象
boolean absolute(int low) //将结果集的记入指针进行移动到第low行,如果row是负数,则移动到倒数第low
//行,如果移动后的记入指针指向一条有效的记录,则返回true
boolean beforeaFirst();//将Result的记录指针地位到首行之前; (起初是状态位于第一行之前)
void first();//Result的记录指针定位到首行,如果移动后的指针指向有效数据,则返回true
boolean previous();//Result的记录指针定位到上一行,如果移动后的指针指向有效数据,则返回true
boolean next();//Result的记录指针定位到下一行,如果移动后的指针指向有效数据,则返回true
boolean last();//Result的记录指针定位到最后,如果移动后的指针指向有效数据,则返回true
void afterLast();//Result的记录指针定位到最后一行之后
  1. JDBC 编程步骤
  • 加载驱动-----Class.forName(driverClass)
    (以MySQL为例)Class.forName("com.mysql.jdbc.Driver');
    (Oracle 驱动)Class.forName("oracle.jdbc.driver.OracleDriver");
  • 连接数据库DriverManager.getConnection(String url,String User ,String pass)
    其中url的规则为:jdbc : subprotocol : other stuff
    mysql jdbc : mysql ://hostname:port /databasename
    Oracle jdbc :Oracle :thin:@hostname:port:databasename
  • 通过Connection 对象创建Statement 对象
    1、 createStatement() //创建基本的Statement
    2、prepareStatement(String sql) 根据传入的sql语句预编译Statement对象
    3、prepareCall(String sql)根据传入的sql语句创建CallableStatement对象
  • 使用Statement执行sql语句
    excute 执行任何sql语句,单数比较麻烦
    2、excuteUpdate 主要执行DML和DDL语句。
    3、executeQuery 只执行查询语句 ,返回ResultSet对象结果
  • 操作结果集
    1、移动记入指针的方法
    2、getXxx获取记录指针指向的行,特定的列值,使用列索引作为参数是更好
  • 回收数据库资源
    关闭ResultSet 、Statement、Connection等资源
    读取数据库的实例
package ConnectMySql;

import java.sql.*;

public class ConnMySql {
    public static void main(String[] args) {

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("成功加载MySQL驱动");
        } catch (ClassNotFoundException e) {
            System.out.println("找不到MySQL驱动");
            e.printStackTrace();
        }
        String url="jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=GMT";
        String user="root";
        String password="123456";
        Connection conn = null;
        Statement stat = null;
        try {
            conn = DriverManager.getConnection(url,user,password);
            stat = conn.createStatement();
            System.out.println("成功连接到数据库了");
        } catch (SQLException e) {
            System.out.println("连接数据库失败");
            e.printStackTrace();
        }
        ResultSet res = null;
        try {
            res = stat.executeQuery("SELECT *from firstdemo");
            System.out.println("可以操作数据库");
            while (res.next()) {
                System.out.println(res.getInt(1)
                        + "\t" + res.getString(2)
                        + "\t" + res.getString(2));
            }
        } catch (SQLException e) {
            System.out.println("不能操作数据库");
            e.printStackTrace();
        }
        try {
            if (res != null) {
                    res.close();
                }
            if (stat != null) {
                stat.close();
            }
            if (conn != null) {
                conn.close();
            }
            System.out.println("正常关闭");
        } catch (SQLException e) {
            System.out.println("关闭失败");
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41448891/article/details/82873070