JDBC(一)

时间:2022-02-28 22:50:36

/*
1、java.sql.DriverManager类中的方法:
(1)static void registerDriver(Driver driver)
注册驱动
jar包中的com.mysql.cj.jdbc.Driver类 throws SQLException,实现了java.sql.Driver接口
(2)public static Connection getConnection(String url,String user,String password) throws SQLException
建立一个连接到给定的数据库的网址
2、java.sql.Connection接口中的方法:
 Statement createStatement() throws SQLException
 创建一个用于向数据库发送SQL语句的Statement对象
3、java.sql.Statement接口中的方法
(1)int executeUpdate(String sql) throws SQLException
专门执行DML语句(insert,delete,update),返回值是影响数据库中的记录的条数
(2)ResultSet executeQuery(String sql) throws SQLException
专门执行select语句,返回一个 ResultSet对象。
4、java.sql ResultSet接口中的方法:
(1)boolean next() throws SQLException,从当前位置移动光标向下一行记录
(2)String getString(int i),在ResultSet对象的当前行检索指定的列,强制作为String并返回,int i从1开始
(3)String getString(String name),在ResultSet对象的当前行检索指定的列,强制作为String并返回
此外,还有getInt,getDouble……从而以特定的类型取出,同样可以用下标或者字段名为参数。
*/
import java.sql.*;
public class JDBCTest01{
    public static void main(String[] args){
        Connection conn = null;
        Statement st = null;
        try{
            //1、注册驱动
            //方法1
            //DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
            //方法2,更常用
            //在com.mysql.cj.jdbc.Driver.java中,有静态语句块代码如下
            /*    
            static {
                try {
                    java.sql.DriverManager.registerDriver(new Driver());
                } catch (SQLException E) {
                    throw new RuntimeException("Can‘t register driver!");
                }
            }
            */
            //可见,静态语句块中已经注册了驱动,因此静态语句块执行即可,反射中的类加载可通过forName实现
            Class.forName("com.mysql.cj.jdbc.Driver");//类加载即可,不需要返回值
            //抛出ClassNotFoundException

            //2、获取连接
            /*
            url:统一资源定位符,网络中某个资源的绝对路径。包括:协议、ip、端口、资源名
            ping www.baidu.com 得到http://61.135.169.121
            访问http://61.135.169.121/index.html就到了百度首页
                http://  通信协议
                61.135.169.121 服务器ip地址
                80 服务器上软件的端口
                index.html服务器上的某个资源名
            jdbc:mysql://ip地址:端口号/数据库名
                jdbc:mysql://  通信协议
            ip:关于localhost、127.0.0.1 和 本机IP
                localhost等于127.0.0.1,不过localhost是域名,127.0.0.1是IP地址
                localhost和127.0.0.1不需要联网,都是本机访问
                本机IP192.168.1.103是本机对外放开访问的IP地址,这个网址就是与物理网卡绑定的IP地址,本机或外部访问,需要关闭防火墙。
            */
            /*
            数据库安装时默认为英语,0:00时区,Windows系统中,XP的时区是GMT,而Win7的时区是UTC,mysql返回的时间会比实际时间要早8小时。
            解决方案:配置JDBC连接参数。在url连接字符串后面加上?serverTimezone=GMT+8
            UTC,世界均衡时间;    GMT,格林尼治时间
            北京时间(东八区),GMT 8,url中表示为:serverTimezone=GMT+8
            */
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode?serverTimezone=GMT+8","root","ang928914");
            
            //3、获取数据库操作对象
            st = conn.createStatement();
            //4、执行SQL
            //SQL语句中加不加分号都可以
            //添加数据
            String sql = "insert into dept1(deptno,dname,loc) values (50,‘人事部‘,‘北京‘)";
            //更改数据
            //String sql = "update dept1 set dname = ‘销售部‘ where deptno = 50";
            //删除数据
            //String sql = "delete from dept1 where deptno = 50";
            int count = st.executeUpdate(sql);
            System.out.println(count==1?"保存成功":"保存失败");
            //5、处理查询结果集

        }catch (SQLException s){
            s.printStackTrace();
        }catch(ClassNotFoundException s){
            s.printStackTrace();
        }finally{
            //6、释放资源,为了保证一定释放,在finally中关闭资源
            //从小到大依次关闭,分别对其try...catch...,要把Connection、Statement挪到外面
            try{
                if(st != null)
                    st.close();
            }catch(SQLException s){
                s.printStackTrace();
            }
            try{
                if(conn != null)
                    conn.close();
            }catch(SQLException s){
                s.printStackTrace();
            }
        }
    }
}
/**/
import java.sql.*;
public class JDBCTest02{
    public static void main(String[] args){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            //1、注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2、获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode?serverTimezone=GMT+8","root","123");
            //3、获取数据库操作对象
            st = conn.createStatement();
            //4、执行SQL
            rs = st.executeQuery("select empno as ‘a‘,ename as ‘b‘,sal as ‘c‘ from emp");
            //5、处理查询结果集
            while(rs.next()){
                //System.out.print(rs.getString(1)   "-->"   rs.getString(2)   "-->"   rs.getString(3));
                System.out.print(rs.getString("a")   "-->"   rs.getString("b")   "-->"   rs.getString("c"));//最终查询结果的列名称
                System.out.println();
            }
        }catch (SQLException s){
            s.printStackTrace();
        }catch(ClassNotFoundException s){
            s.printStackTrace();
        }finally{
            //6、释放资源
            try{
                if(rs != null)
                    rs.close();
            }catch(SQLException s){
                s.printStackTrace();
            }
            try{
                if(st != null)
                    st.close();
            }catch(SQLException s){
                s.printStackTrace();
            }
            try{
                if(conn != null)
                    conn.close();
            }catch(SQLException s){
                s.printStackTrace();
            }
        }
    }
}