zoukankan      html  css  js  c++  java
  • Java操作数据库实现"增删改查"

    本文主要讲解JDBC操作数据库    主要实现对MySql数据库的"增删改查"

    综合概述:

    JDBC的常用类和接口

    一   DriverManager类

    DriverManage类用来管理数据库中的所有驱动程序,是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动之间建立连接,DriverManager类中的方法都是静态方法,下列是DriverManager的常用方法:

    getConnection(String URL,String user,String PassWord) 指定3个参数,分别是连接地址,用户名 和密码 类连接数据库
    setLoginTimeout()                                     获取驱动程序视图登陆到某一数据库可以等待的最长时间,以秒为单位,
    Println(String message)                               将一条信息打印到当前JDBC日志流中

    二  Connection 接口

    COnnection 接口代表与特定的数据库的连接,要对数据库中的数据进行操作,首先要获取数据库连接,Connection实就像在应用程序与数据库之间开通了一条通道.可以通过DriverManager类的getConnection()方法获取Connection的实例.Connection接口的常用方法如下:

    createStatement()  创建Statement对象
    
    PrepareStatement()  创建预处理对象PrepareStatement
    
    isReadOnly()        查看当前Connection对象的读取模式是否是只读形式
    
    SetReadOnly()       设置当前Connection对象的读写模式,默认是非只读模式
    
    close()            立即释放此Connection对象的数据库和JDBC资源,而不是自动释放

    三   Statement   接口

    Statement接口用于创建向数据库中传递SQL语句的对象, 常用方法如下:

    execute(String sql)      执行静态的SELECT语句 可能返回多个数据集
    executeQuery(String sql) 执行给定的Sql语句  返回单个ResultSet对象
    clearBatch()             清空此Statement对象的当前SQL命令列表
    executeUpdate()          执行指定的SQL语句 该语句可以为INSERT  UPDATE DELETE语句
    close()                  释放Statement实例占用的数据库和JDBC资源

    四  PreparedStatement 接口

    PreparedStatement接口继承Statement,用于执行动态的SQL语句 ,通过PreparedStatement实例执行的SQL语句,将被编译并保存到PreparedStatement实例中,从而可以重复的执行该SQL语句 . preparedStatement接口的常用方法:

    execute( )        在此PreparedStatement对象执行SQL语句,该语句可以是任何类型的SQL语句
    executeQuery( )   在此preparedStatement对象中执行Sql查询语句,返回为查询数据集的对象
    executeUpdate()   在此preparedStatement对象执行Sql语句,该SQL语句必须是一个INSERT UPDATE DELETE语句,或者是没有返回值得DLL语句
    setbyte(int Pindex byte by) 将参数Pindex位置上设置为给定的byte参数by
    setString(int Pindex String str)将参数Pindex位置上设置为给定的String参数值str
    setDouble(int pindex Double dou)将参数Pindex位置上设置为给定的Double参数值dou
    setInt(int Pindex int i) 将参数Pindex位置上设置为给定的int参数值i
    setObject(int PIndex Ocject obj)将参数Pindex位置上设置为给定的Object参数值Obj

    五 ResultSet 接口

    ResultSet接口类似于一个临时的数据表,用来暂时存放数据库查询操作获取到的数据集  它的常用方法如下:

    getint()  以int形式获取当前行指定的列
    getFloat()  以Float形式获取当前行指定的列
    getDate()   以Date形式获取当前行指定的列
    getBoolean() 以Boolean形式获取当前行指定的列
    getString()   以String形式获取当前行指定的列
    getObject()   以Object形式获取当前行指定的列
    next( )         将指针向下移一行
    updateInt()   用int值更新指定列
    updateFloat()用float值更新指定列
    updateLong()  用指定的long值更新指定的列
    updateString()用指定的"String"值更新指定列
    updateObejct() 用object值更新指定的列
    updatenull()  将指定的列值修改为null
    updateDate()  用指定的Date值更新指定的列
    updateDouble() 用指定的DOuble值更新指定的列

     通过JDBC操作数据库

    如果需要访问数据库,就必须加载数据库驱动,这个驱动只是在程序第一次运行的时候加载一次,下面将我们的连接Mysql数据库的连接器下载:链接:http://pan.baidu.com/s/1dE42McT 密码:emqo

    1):新建一个项目,创建lib文件夹

     

    2)把刚才下载的驱动放到这个文件里

    3)点项目右键选择Build  Path 点Configure Build Path

     

    选择Libraries   然后Add JARs  把lib文件下的驱动放进去.

    下面就可以编写代码了;

    首先创建一个DBHerpel类:代码如下:

    package com.gr.DBHerpel;
    
    import java.sql.*; //导包
    
    /** 
     * ClassName: DBHerpel
     * @Description: TODO 数据库辅助类
     * @author 情绪i
     */
    public class DBHerpel {
    
        private static Connection Conn; // 数据库连接对象
    
        // 数据库连接地址
        private static String URL = "jdbc:mysql://localhost:3306/myschool?characterEncoding=utf8&useSSL=true";
    
        // 数据库的用户名
        private static String UserName = "root";
        // 数据库的密码
        private static String Password = "1234";
    
        /**
         * * @Description: TODO 获取访问数据库的Connection对象
         * @param @return
         * @return Connection 连接数据的对象
         * @author 情绪i
         */
        public static Connection getConnection() {
    
            try {
    
                Class.forName("com.mysql.jdbc.Driver"); // 加载驱动
    
                System.out.println("加载驱动成功!!!");
            } catch (ClassNotFoundException e) {
                // TODO: handle exception
                e.printStackTrace();
            }
    
            try {
    
                //通过DriverManager类的getConenction方法指定三个参数,连接数据库
                Conn = DriverManager.getConnection(URL, UserName, Password);
                System.out.println("连接数据库成功!!!");
    
                //返回连接对象
                return Conn;
    
            } catch (SQLException e) {
                // TODO: handle exception
                e.printStackTrace();
                return null;
            }
        }
    
    }

    这里连接的是我MySchool的数据库   数据库的表结构如下:

    数据表里有user pwd 两个字段;下面通过一个案例实现查询:

    "查"

    代码如下:

    package com.gr.visitServer;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    import com.gr.DBHerpel.DBHerpel;
    
    public class VisitMySql {
    
        // 连接对象
        private Connection conn;
        // 传递sql语句
        private Statement stt;
        // 结果集
        private ResultSet set;
    
        // 查询
        public void Select() {
            try {
                // 获取连接
                conn = DBHerpel.getConnection();
                if (conn == null)
                    return;
                // 定义sql语句
                String Sql = "select * from login";
                // 执行sql语句
                stt = conn.createStatement();
                // 返回结果集
                set = stt.executeQuery(Sql);
                // 获取数据
                while (set.next()) {
    
                    System.out.println("用户名:" + set.getString(1) + "	密码:"
                            + set.getString(2));
    
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
    
                // 释放资源
                try {
                    set.close();
                    conn.close();
                } catch (Exception e2) {
                    // TODO: handle exception
                }
    
            }
        }
    
    }

    然后新建一个包Test编写Test类代码如下:

    package com.gr.Test;
    
    import com.gr.visitServer.VisitMySql;
    
    public class Test {
        public static void main(String[] args){
            
            //实例化对象
            VisitMySql vs = new VisitMySql();
           //调用查询方法
            vs.Select();
           
            
            
            
        }
    
    }

    上面的代码是查询数据库Login表里的用户的账号和密码,用Connection接口的createStatement()方法获得Statement对象传递Sql语句,用它的ExecuteQuery()方法获取单个ResultSet对象.

    下面向数据库添加数据:

    "增"

    在VisitMySql类中添加Add方法:代码如下:

    // 使用Statement接口的executeUpdate()方法向数据库添加数据
        public void Add(){
            
            try {
                //获取连接
                conn = DBHerpel.getConnection();
                if(conn==null)
                return;
                //获取用户输入的账号和密码
                Scanner input = new Scanner(System.in);
                System.out.print("请输入用户名:");
                int user = input.nextInt();
                System.out.print("请输入密码:");
                String pwd = input.next();
                //定义sql语句
                String sql = "insert into login values("+user+" , '"+pwd+"');";
                //获取Statement对象
                stt = conn.createStatement();
                //执行sql语句
                stt.executeUpdate(sql);
                
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                //释放资源
                try {
                    
                    conn.close();
                    
                } catch (Exception e2) {}
                
            }
            
            
        }

    同样也是获取Connection接口的createStatement()方法获取Statement的对象,用Statement对象的executeUpdate()方法来执行INSERT语句,最后在Test类调用Add()方法

    下面使用PreparedStatement接口中的executeUpdate()方法来执行INSERT语句,

    // 使用PreparedStatement接口的executeUpdate()方法向数据库添加一条数据
        public void Add2() {
    
            try {
                // 获取连接
                conn = DBHerpel.getConnection();
                if (conn == null)
                    return;
    
                // 获取用户输入
                System.out.print("请输入用户名:");
                Scanner input = new Scanner(System.in);
                int user = input.nextInt();
                System.out.print("请输入密码:");
                String pwd = input.next();
    
                // 定义sql语句
                String AddSQL = "INSERT INTO login VALUES (?,?);";
    
                // 创建一个Statement对象
                PreparedStatement ps = conn.prepareStatement(AddSQL);
                
                //向sql语句的第一个问号添加数据
                ps.setInt(1, user);
                //向sql语句的第二个问号添加数据
                ps.setString(2,pwd);
                // 执行sql语句
                ps.executeUpdate();
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    conn.close();
    
                } catch (Exception e2) {
                    // TODO: handle exception
                }
    
            }
        }

    最后在Test类测试Add2()方法,,这里Sql语句中用两个问号代表要添加的用户名和密码,根据上面PreparedStatement接口的常用方法,setint()  setString()  方法来指定添加的数据.

    "删"

    删除数据也是很常用的技术,同样可以使用Statement接口中的executeUpdate()方法来实现  代码如下:

    //使用Statement接口的executeUpdate()方法实现从数据库删除数据
        public void Delete(){
            try {
                
                //获取连接
                conn = DBHerpel.getConnection();
                if(conn==null)
                return;
                
                //提示用户输入要删除的用户
                System.out.print("请输入删除的用户:");
                Scanner input = new Scanner(System.in);
                int user = input.nextInt();
                
                //定义sql语句
                String deleteSql = "DELETE FROM login WHERE user="+user+";";
                //获取Statement对象
                stt = conn.createStatement();
                //执行sql语句
                stt.executeUpdate(deleteSql);
                
                
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                //释放资源
                try {
                    conn.close();
                    
                } catch (Exception e2) {}
                
            }
        }
        

    "改"

    对数据的修改也是日常代码中常见的技术.  可以使用Statement接口中executeUpdate()方法来实现,也可以用PreparedStatement接口的executeUpdate()方法来实现 具体代码如下:

    //使用PreparedStatement接口中的executeUpdate()方法实现修改数据
        public void Update(){
            
            try {
                //获取连接
                conn = DBHerpel.getConnection();
                if(conn==null)
                    return;
                
                //用户输入要修改的账户
                System.out.print("请输入用户名:");
                Scanner input = new Scanner(System.in);
                int user = input.nextInt();
           //提示用户输入新的密码 System.out.print(
    "请输入新的密码:"); String NewPwd = input.next(); //定义Sql语句 String UpdateSql = "UPDATE login SET pwd = '"+NewPwd+"' WHERE user = "+user+";"; //创建Statement对象 PreparedStatement ps = conn.prepareStatement(UpdateSql); //执行sql语句 ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); }finally{ //释放资源 try { conn.close(); } catch (Exception e2) {} } }

    以上是对Mysql数据库的"增删改查"功能的具体实现,   

  • 相关阅读:
    MySQL字段数据全部查出【只保留中文、英文、数字、空格的词表】
    MySQL查看当前运行的事务和执行的账户
    【转】【MySQL报错】ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 39.
    【转】mysqldump的锁表的问题
    mysql 通过echo的方式写入数据库 中文乱码解决方案
    Python3.5爬取豆瓣电视剧数据并且同步到mysql中
    Python3.5爬取cbooo.cn数据并且同步到mysql中
    【转&参考】MySQL利用frm和ibd文件进行数据恢复
    [算法]从一道题引出variable-precision SWAR算法
    [转]nginx负载均衡的五种算法
  • 原文地址:https://www.cnblogs.com/zkdayup/p/7759946.html
Copyright © 2011-2022 走看看