欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDBC连接Mysql数据库及增删改查的操作

程序员文章站 2022-06-04 11:06:14
...

标题

    废话不多说,直接上代码

import java.sql.;
import java.util.
;

public class jdbcConnection {
private String url;
private String userName;
private String passWord;

    public jdbcConnection(String url,String username,String password){
        this.url=url;
        this.userName=username;
        this.passWord=password;
    }

/**
 * 获取数据库连接对象
 * @return
 */
public Connection getConnection(){
       this.loadingDriver();
       try{
        Connection con=DriverManager.getConnection(this.url,this.userName,this.passWord);
        return con;
       }catch (SQLException s){
           System.out.println("连接数据库失败");
           s.printStackTrace();
       }
       return null;
   }

/**
 * 执行select查询
 * 将结果存下来
 * @param con
 * @param sql
 * @return
 */
   public List<Map<String,Object>> executeQuery(Connection con,String sql){
       try{
       Statement statement=con.createStatement();
       ResultSet res=statement.executeQuery(sql);
       ResultSetMetaData resData = res.getMetaData();
       //表中字段数目
       int num = resData.getColumnCount();
       List<Map<String,Object>> dataList=new ArrayList<Map<String,Object>>();
       while (res.next()){
       Map<String,Object> rowData = new HashMap<String, Object>();
       for(int i=1;i<=num;i++){
           rowData.put(resData.getColumnName(i), res.getObject(i));
       }
           dataList.add(rowData);
       }
       res.close();
       statement.close();
       con.close();
       return dataList;
       }catch (Exception e){
           e.printStackTrace();
           System.out.println("执行sql出现错误");
       }

       return null;
   }

/**
 * 批量更新
 */
public int updateBatch(Connection con,String sql,Object[] args){
    try{
       int num=this.getParamNum(sql);
       PreparedStatement ps= con.prepareStatement(sql);
       int i=1;
        for(Object param:args){
            //没有加多类型转换
           if(param.getClass().toString().equals("Integer")){
               ps.setInt(i,Integer.parseInt(param.toString()));
           }else {
               ps.setString(i,param.toString());
           }
           i++;
        }
       int res= ps.executeUpdate();
        return res;
    }catch (SQLException e){
        e.printStackTrace();
        System.out.println("执行sql出错");
    }
   return 0;
}
private int getParamNum(String sql){
    int num=0;
    char[] ch=sql.toCharArray();
    for(int i=0;i<ch.length;i++){
        if(ch[i]=='?'){
            num++;
        }
    }
    return num;
}
/**
 * 遍历输出select查询的结果
 * @param dataList
 */
public void forItem(List<Map<String,Object>> dataList){
       for(Map<String,Object> data:dataList ){
           Iterator<Map.Entry<String,Object>>  iterator= data.entrySet().iterator();
           try{
           while(iterator.hasNext()){
           /*  Map.Entry<String,Object> map=iterator.next();*/
               for (Map.Entry<String,Object> map : data.entrySet()) {
                   System.out.println("字段:"+map.getKey());
                   System.out.println("值:"+map.getValue());
                   System.out.println();
                   iterator.next();}
           }
           }catch (NullPointerException e){
               System.out.println("数组越界");
           }
       }
   }

/**
 * 加载数据库驱动
 * 数据库驱动加载这块我说明一下  采用String Driver="com.mysql.jdbc.driver" 时驱动一直加载不上
 * 我也不明白是怎么回事。
 */
private void loadingDriver(){
      try {
          Driver driver = new com.mysql.jdbc.Driver();
          DriverManager.registerDriver(driver);
      } catch (SQLException e) {
          System.out.println("加载数据库驱动失败");
          e.printStackTrace();
      }
  }
  }

标题

    主函数的调用:
  public static void  main(String[] args) {
  String url = "jdbc:mysql:// IP地址或者域名 : 端口号 / 数据库名称 ?characterEncoding=utf8&useSSL=false";
  String userName="数据库用户名";
  String password="数据库密码";
  //构造函数直接入参
  jdbcConnection jdbccon=new jdbcConnection(url,userName,password);
  //取得mysql连接对象
  Connection connection=jdbccon.getConnection();
  //用statement的exectQuery方法执行sql,将结果存放下来
  List<Map<String,Object>> dataList=jdbccon.executeQuery(connection,"select * from user");
  //将存的结果遍历
  jdbccon.forItem(dataList);
  //这块的方法类似于spring的 jdbcTemplate
  //想了解的同学可以去看一下
   Object[] arg={"456789",1};
   int x=jdbccon.updateBatch(connection,"update user set user_password=? where user_id=?",arg);
   if(x>0){
       System.out.println("执行成功");
   }
  }