JDBC操作数据库

JDBC连接MySql,数据操作:
 * 1、加载Mysql数据驱动(非必须步骤)  Class.forName("com.mysql.jdbc.Driver");
 * 2、创建数据库连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/erp", "数据库用户名", "数据库密码");
 * 3、写sql语句:String sq = "";
 * 4、创建执行sql的Statemen对象: Statement st = conn.createStatement();
 * 5、执行sql:st.execute***(sql);
 *  a、查询:ResultSet rs = st.executeQuery(sql);
 *          while(rs.next()){}
 *  b、更新,删除,插入: int count = st.executeUpdate(sql);返回值是表示数据库操作成功的条数

 * 6、数据库关闭:conn.close();


 static Statement st;
    public static void main(String[] args) {
        //先要获取连接,即连接到数据库
        Connection conn = getConnection();

        //insert(conn);//插入数据
        query(conn);//查询数据
        //update(conn);//更新数据
        //delete(conn);//删除数据

    }

    //查询
    private static void query(Connection conn) {
        Statement st;
        try {
            String sql = "select * from t_user";     // 查询数据的sql语句
            st = (Statement) conn.createStatement();    //创建用于执行静态sql语句的Statement对象,st属局部变量

            ResultSet rs = st.executeQuery(sql);    //执行sql查询语句,返回查询数据的结果集
            System.out.println("最后的查询结果为:");
            while (rs.next()) { // 判断是否还有下一个数据

                // 根据字段名获取相应的值
                int id = rs.getInt("id");
                int age = rs.getInt("age");
                String name = rs.getString("name");
                String password = rs.getString("password");
                String sex = rs.getString("sex");

                //输出查到的记录的各个字段的值
                System.out.println(id + " " + age + " " + name + " " + password + " " + sex);

            }
            conn.close();   //关闭数据库连接

        } catch (Exception e) {
            System.out.println("查询数据失败");
        }
    }

    //插入
    private static void insert(Connection conn){
        try {
            String sql = "insert into t_user(id,age,name,password,sex) values(1,10,'zhhangsan','111111','man')";

            st =  conn.createStatement();//创建用于执行sql语句的Statement对象

            int count = st.executeUpdate(sql);//执行sql语句,返回的是更新数据的条数
            System.out.println("往数据库中插入了 " + count + "条数据");
        }catch (Exception e){
            System.out.println(e.getMessage());
        }

    }

    //删除
    private static void delete(Connection conn){
        try {
            //sql语句
            String sql = "delete from t_user where id = 1";
            //生成执行sql的Statement对象
            st = conn.createStatement();
            //执行sql语句
            int count = st.executeUpdate(sql);

            System.out.println("删除了 " + count + " 条数据");

        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }

    //修改
    private static void update(Connection conn){
        try {
            //写sql
            String sql = "update t_user set password='222222' where id=1";
            //生成Statement对象
            st = conn.createStatement();
            //执行sql
            int count = st.executeUpdate(sql);
            System.out.println("更新了 " + count + " 条数据");
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }

    //数据库连接
    private static Connection getConnection() {
        Connection conn = null;  //创建用于连接数据库的Connection对象
        try {
            Class.forName("com.mysql.jdbc.Driver");// 加载Mysql数据驱动,非必须

            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/erp", "root", "root");// 创建数据连接

        } catch (Exception e) {
            System.out.println("数据库连接失败" + e.getMessage());
        }
        return conn;
    }


解释

1、为什么说Class.forName是非必须的

在java中只有类被使用的时候才会被加载(加载:读取字节码,执行static块)

        而Class.forName的作用呢就是加载对应名称的类

所以,在这里Class.forName这里是是保证了在执行DriverManager.getConnection时,对应的com.mysql.jdbc.Driver已经在JVM中了

在JDBC4.0之后,DriverManager会自动去读取jdbc.Driver中的信息,同时getConnection会自动调用server provider(服务器供应商)去获取信息

即,说明了只要你的JDBC包含了驱动信息,是可以不用Class.forName这个方法

那么在什么情况会需要这个呢?

a、jdk1.6以下的版本

b、JDBC4.0以下的版本


PS:在研究使用idea+mave工具,顺便带上依赖包的:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值