为了账号安全,请及时绑定邮箱和手机立即绑定

JDBC的连接mySql的基本知识

标签:
MySQL

  这只是我自己的随笔博客~,用于偶尔回忆知识,可能存在一些错误,如有错误,欢迎指正~

首先对于JDBC连接MySQL,要了解基本的框架结构

https://img1.sycdn.imooc.com//5b8bfe250001182506050488.jpg

画的比较烂,大约就是这样的结构

然后看一下具体实现的 代码:;

?

123456789101112131415161718192021222324252627282930313233343536373839public class DBUtil {    private String user = "root";    private String password = "root";    private String url = "jdbc:mysql://localhost:3306/mydb6";    private static DBUtil dbUtil;    Connection connection = null;     // 单例:构造方法私有化    private DBUtil() {     }     public synchronized static DBUtil getInstance() {        if (dbUtil == null) {            dbUtil = new DBUtil();        }        return dbUtil;    }     /**     * 创建数据库连接     */    public Connection getConnection() {        if (connection == null) {            try {                // 注册驱动                Class.forName("com.mysql.jdbc.Driver");                // 获取连接                connection = DriverManager.getConnection(url, user, password);            } catch (ClassNotFoundException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }        return connection;    }<br>}

  上面这个是通过单例模式  建立了DBUtil这样一个类。通过这个类可以干什么呢?可以实现----数据库的连接!

没错,Connection接口的作用就是连接数据库-
与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。

怎样才能得到这个连接呢?--想要建立这个连接,你需要注册一个驱动---嗯~就是这个代码   Class.forName("com.mysql.jdbc.Driver");  

它是通过反射的机制来获得的,不了解反射?嗯~那你记住就完了 哈哈哈

connection = DriverManager.getConnection(url, user, password);这一句话的是用来获取连接的 ,这三个参数分别是   数据的地址,jdbc:mysql://IP地址:端口号/数据库的名称

嗯~然年再将一下如何通过jdbc向数据库写入数据

复制代码

public int insertStuByStatement() {
        String sql1 = "insert into stu(sname,sage) values('aaa',1)";
        String sql2 = "insert into stu(sname,sage) values('bbb',1)";
        String sql3 = "insert into stu(sname,sage) values('ccc',1)";
        Connection connection = getConnection();// 获得数据库的连接
        Statement stmt = null;        try {
            stmt = (Statement) connection.createStatement();
            connection.setAutoCommit(false);
            stmt.addBatch(sql1);//批量添加sql语句
            stmt.addBatch(sql2);//批量添加sql语句
            stmt.addBatch(sql3);//批量添加sql语句            //一次性执行            stmt.executeBatch();
            connection.commit();
            System.out.println("批处理成功");
        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();
        } finally {            try {                if (stmt != null) {
                    stmt.close();
                }
            } catch (Exception e2) {

            }
        }        return i;
    }

复制代码

这里使用的statement 来实现的,写出你要操作的 sql语句。(提一下,一般这些操作都是放在DBUtil类中的额 ,这个方法我也是放在DBUtil的)。

第二步:根据上面的定义的方法获取数据库。

下面就是获取一个Statement 对象,然后通过这个对象的stmt.executeBatch();就可以在数据库中执行刚才就的语句了,这样就做到了静态插入数据。

那动态插入数据是怎样的呢 ?-----那就是用到了另一个能够实现语句的对象PreparedStatement

直接上代码吧 

复制代码

public int insertStu(String sname,int sage){
        String sql = "insert into stu(sname,sage) values(?,?)";
        Connection connection = getConnection();//获得数据库的连接
        PreparedStatement ps = null;        int i = 0;        try {
            ps  = (PreparedStatement) connection.prepareStatement(sql);
            ps.setString(1, sname);
            ps.setInt(2, sage);
            
            i=ps.executeUpdate();
        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();
        }finally {            try {                if (ps!=null) {
                ps.close();
                }
            } catch (Exception e2) {
            
            }
        }        return i;
    }

复制代码

定义的插入方法有了两个参数的数值

与statement的区别在哪呢?--一个是sql字符串语句的区别,多了“?”,作用是---看下面这两行代码

 ps.setString(1, sname);
 ps.setInt(2, sage);
 ps.set****(a,b)有两个参数,sql语句中也有两个?,所以参数a,代表的是sql语句的第几个“?”,如果参数是1,则说明sql语句中第一个“?”的位置替换为参数b,
 如果 同理如果参数是2,则说明sql语句中第一个“?”的位置替换为参数b.这样就做到了动态的插入数据,我们只要在调用插入方法的时候传入想要插入的数据就好了,不用每次都写新的sql语句。
 对于 i=ps.executeUpdate();语句,它返回的这次你的数据库操作后有有几条数据有影响.这种方法对于插入,当然是i=1了

但是对于产出和修改的就不是一定了,删除修改我直接贴代码了就不再做讲解

复制代码

//修改
public int updateStu(int sage,String sname){
        String sql = "updae stu set sage = ? where sname = ?";
        Connection connection = getConnection();
        PreparedStatement ps =null;        int i  = 0;        try {
            ps = (PreparedStatement) connection.prepareStatement(sql);
            ps.setInt(1, sage);
            ps.setString(2, sname);
            
            i  = ps.executeUpdate();
        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();
        }finally {            try {                if (ps!=null) {
                ps.close();
                }
            } catch (Exception e2) {
            
            }
        }        return i;
    }    //删除
        public int deleteStu(String sname,int sage) {
            String sql = "delete from stu where sname=? and sage = ?";
            Connection conn = getConnection();//获得数据库连接
            PreparedStatement ps = null;            int i = 0;            try {
                ps = (PreparedStatement) conn.prepareStatement(sql);
                ps.setString(1, sname);
                ps.setInt(2,sage );
                
                i = ps.executeUpdate();
            } catch (SQLException e) {                // TODO Auto-generated catch block                e.printStackTrace();
            }finally {                try {                    if(ps != null)
                        ps.close();
                }catch (Exception e) {                    // TODO: handle exception                }
            }            return i;
            
        }

复制代码

 

数据库最重要的是什么---查询数据,相对于增删改--查可能稍微繁琐一点
代码如下:

复制代码

/**
     * 查询所有学生
     * @return
     */
    public ArrayList<Stu> queryStu(){
        String sql = "select * from stu ";// select *  或的字段的顺序和数据库中的是一致
        Connection conn = getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        ArrayList<Stu> stus = new ArrayList<Stu>();//此集合用于存储每一个学生对象
        try {
            ps = (PreparedStatement) conn.prepareStatement(sql);
            rs = ps.executeQuery();            //遍历rs
            while(rs.next()) {//true表示有下一条数据
                int id = rs.getInt("id");
                String sname = rs.getString("sname");                int sage = rs.getInt("sage");                //创建stu对象
                Stu stu = new Stu(id, sname, sage);                //收集对象                stus.add(stu);
            }
        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();
        }finally {            try {                if(rs != null)
                    rs.close();                if(ps != null)
                    ps.close();
            }catch (Exception e) {                // TODO: handle exception            }
        }        
        return stus;
    }

复制代码

讲一下重点的地方     ResultSet rs = null;  这个对象存储的一个查询的结果集合。select * from stu这个返回的 应该是查询的学生表中每个学生的所有数据,

所以rs就可以储存这样的一个集合,然后通过遍历得到其中的数据,将数据赋值给一个学生对对象,将对象加入到集合中,就得到可表中所有的数据~

 

这次讲的主要是基础部分,等下次继续探讨JDBC联合其他的一些操作~


?

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

原文出处:https://www.cnblogs.com/blogsyun/p/9575818.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消