• JDBC连接MySQL数据库


    /*
     * 这部分代码是测试连通数据库的
     * 我在数据库中建立了一个student的数据库 并且赋予了一个全部权限的test用户,test用户的密码也是test
     * 在做好上面的工作的基础上再去进行下面代码的运行测试
    */
    
    package link_test;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    
    public class Connect {
    	
    	public static Connection getConnection(String driverClassName,
    			String dbURL, String userName, String password)
    			throws ClassNotFoundException,SQLException {
    		Connection con=null;
    		
    		//加载连接数据库的驱动类
    		Class.forName(driverClassName);
    		
    		//使用用户名 密码连接数据库
    		con = DriverManager.getConnection(dbURL, userName, password);
    		return con;//返回Connection类型的con
    	}
    	
    	
    	public static Connection getMysqlConnection(String dricerClassName,
    			String serverHost, String serverPort, String dbName, String 
    			userName, String password ) throws ClassNotFoundException,
    			SQLException{
    		//如果没有提供这些链接参数 则使用默认值
    		if(dricerClassName == null){
    			dricerClassName = "com.mysql.jdbc.Driver";
    		}
    		if(serverHost == null){
    			serverHost = "127.0.0.1";
    		}
    		if(serverPort == null){
    			serverPort = "3306";
    		}
    		
    		//构建访问MySQL数据库的URL
    		String dbURL = "jdbc:mysql://"+serverHost+":"+serverPort+"/"
    		+dbName;
    		
    		return getConnection(dricerClassName, dbURL, userName, password);
    	}
    	
    	public static void main(String[] args) throws ClassNotFoundException,
    		SQLException {
    		// TODO 自动生成的方法存根
    		
    		String mySQLDriver = "com.mysql.jdbc.Driver";//这一行有个地方写错了 导致了异常
    		String dbName="student";//数据库的名字叫student
    		String userName="test";//用户名
    		String password="test";//对应用户名的密码
    
    		Connection con=Connect.getMysqlConnection(
    				mySQLDriver, null, null, dbName, userName, password);
                    //获取连接
    		System.out.println("连接MySQL数据库成功!");
    		con.close();//连接关闭
    		System.out.println("成功关闭与数据库的连接");
    		
    		/*
    		 * 演示第二种连接方式
    		 */
    		String url="jdbc:mysql://127.0.0.1:3306/"+dbName;
    		con = Connect.getConnection(mySQLDriver, url, userName, password);
    		
    		System.out.println("数据库连接成功");
    		con.close();
    		System.out.println("数据库已经断开连接");
    	}
    	
    }
    

    2.获取 数据库和表的元数据

    package getData;
    
    import java.sql.DatabaseMetaData;
    import java.sql.SQLException;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.Statement;
    import com.mysql.jdbc.Connection;
    
    public class getData {
    	
    	/*
    	 * 获取数据库的元数据
    	 * 需要con与数据库的连接
    	 */
    	public static void showDatabaseMetadata(Connection con){
    		try{
    			//得到数据库的元数据
    			DatabaseMetaData md=con.getMetaData();
    			System.out.println("数据库"+md.getURL()+"的元数据如下:");
    			
    			//显示元数据信息
    			System.out.println("驱动:"+md.getDriverName());
    			System.out.println("驱动版本号:"+md.getDriverVersion());
    	        System.out.println("登陆用户名:"+md.getUserName());
    	        System.out.println("数据库产品名:"+md.getDatabaseProductName());
    	        System.out.println("数据库产品版本号:"+md.getDatabaseProductVersion());
    	        System.out.println("支持的SQL关键字:");
    	        System.out.println(md.getSQLKeywords());
    	        
    	        System.out.println("操作数字的函数:");
    	        System.out.println(md.getNumericFunctions());
    	        
    	        System.out.println("操作字符串的函数:");
    	        System.out.println(md.getStringFunctions());
    	        
    	        System.out.println("系统函数:");
    	        System.out.println(md.getSystemFunctions());
    	        
    	        System.out.println("时间和日期函数:");
    	        System.out.println(md.getTimeDateFunctions());
    	        
    		}catch(SQLException e){
    			e.printStackTrace();
    		}
    	}
    	/*
    	 * 显示数据表的元数据信息  主要是列信息
    	 * con是与数据库的连接
    	 * tableName是数据表名
    	 */
    	
    	public static void showTableMetadata(Connection con, 
    			String tableName){
    		
    		String sql = "select *from "+tableName;
    		Statement sm=null;
    		try{
    			//获取表的所有数据
    			sm=con.createStatement();
    			ResultSet rs = sm.executeQuery(sql);
    			
    			//得到结果集的元数据
    			ResultSetMetaData md = rs.getMetaData();
    			
    			System.out.println("数据表"+tableName+"数据元素如下:");
    			
    			//表的列数
    			int columnCount = md.getColumnCount();
    			System.out.println("column count:"+columnCount);
    			System.out.println();
    			
    			StringBuffer sb=new StringBuffer("");
    			sb.append("sn	name		").append("type			");
    			sb.append("scale	").append("isNullable");
    			System.out.println(sb);
    			
    			sb.delete(0, sb.length());
    			
    			//输出列的属性信息
    			for(int i=1; i<=columnCount; i++){
    				sb.append(i).append("	");
    				sb.append(md.getColumnName(i)).append("		");
    				sb.append(md.getColumnTypeName(i)).append("			");
    				sb.append(md.getScale(i)).append("	");
    				sb.append(md.isNullable(i));
    				System.out.println(sb);
    				sb.delete(0, sb.length());
    			}
    			rs.close(); //rs关闭
    			
    		}catch(SQLException e){
    			e.printStackTrace();
    		}finally{
    			if(sm != null){
    				try{
    					sm.close();
    				}catch(SQLException e1){
    					e1.printStackTrace();
    				}
    			}
    		}
    	}
    	
    	public static void main(String[] args) throws ClassNotFoundException,
    		SQLException {
    		// TODO 自动生成的方法存根
            String dbName = "student";
            String tableName = "student_basic";
            String userName = "test";
            String password = "test";
            
            Connection con = null;
            
            try{
            	//获取数据库连接
            	con = (Connection) Connect.getMysqlConnection(null, null, null, 
            			dbName, userName, password);
            	getData.showDatabaseMetadata(con);
            	System.out.println();
            	
            	//显示数据表的元数据
            	getData.showTableMetadata(con, tableName);
            	
            }catch(ClassNotFoundException e1){
            	throw e1;
            	
            }catch(SQLException e2){
            	throw e2;
            	
            }finally{
            	//关闭数据库连接
            	if(con != null){
            		try{
            			con.close();
            		}catch(SQLException e1){
            			e1.printStackTrace();
            		}
            	}
            }
    	}
    }
    

     3. 进行数据库表数据的查询、修改、插入

    package getData;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    
    public class operateData {
        /*
         * 查询数据库
         * sm表示与数据库连接的statement
         * 返回一个ResultSet的结果集
         */
    	public static ResultSet queryDB(Statement sm, String sql){
    		ResultSet rs=null;
    		try{
    			rs=sm.executeQuery(sql);//首先获得表的所有数据
    		}catch(SQLException e){
    			e.printStackTrace();
    		}
    		return rs;
    	}
    	
    	
    	/*
    	 * 修改数据库
    	 * con表示数据库连接
    	 * sql表示 SQL语句
    	 * 返回修改影响的行数,为0表示各行数据都没有被改变
    	 */
    	public static int updateDB(Connection con, String sql){
    		Statement sm=null;
    		int affectRow=0;
    		
    		try{
    			sm=con.createStatement();//首先获得表的所有数据
    			affectRow = sm.executeUpdate(sql);
    		}catch(SQLException e){
    			e.printStackTrace();
    			affectRow = Statement.EXECUTE_FAILED;
    		}finally{
    			//关闭Statement
    			closeStatement(sm);//在下面会定义这个函数
    		}
    		return affectRow;
    	}
    	
    	/*
    	 * 显示一个ResultSet的结果集
    	 * 在显示之前必须保证它所在的Statement是活着的
    	 */
    	public static void showResultSet(ResultSet rs){
    		if(rs == null) return;
    		try{
    			ResultSetMetaData md=rs.getMetaData();
    			//获得该ResultSet中的列数
    			int columnCount=md.getColumnCount();
    			//如果结果集的指针没有位于第一条记录的前面
    			//则将结果集的指针指向第一条记录的前面
    			if(!rs.isBeforeFirst()){
    				rs.isBeforeFirst();
    			}
    			//从前往后移动结果集的指针,处理每条记录
    			while(rs.next()){
    				//每条记录都包含columnCount个列
    				for(int i=1; i<columnCount; i++){
    					//由于不知道该列的类型 所以采用getObject方法获取
    					System.out.print(rs.getObject(i)+"	");
    				} 
    				System.out.print(rs.getObject(columnCount)+"
    ");
    			}
    			rs.beforeFirst();//指针归位
    		}catch(SQLException e){
    			e.printStackTrace();
    		}
    	}
    	
    	/*
    	 * 关闭Statement
    	 * sm
    	 */
    	public static void closeStatement(Statement sm){
    		if(sm!=null){
    			try{
    				sm.close();
    			}catch(SQLException e1){
    				e1.printStackTrace();
    			}
    		}
    	}
    	
    	/*
    	 * 关闭连接
    	 * con
    	 */
    	public static void closeConnection(Connection con){
    		if(con!=null){
    			try{
    				con.close();
    			}catch(SQLException e1){
    				e1.printStackTrace();
    			}
    		}
    	}
    	
    	
    	public static void main(String[] args) throws ClassNotFoundException,
    		SQLException{
    		
    		String dbName="student";
    		String userName="test";
    		String password="test";
    		String querySQL="select *from student_basic";
    		String updateSQL="update student_basic set score=82 "
    				+ "where name='marry'";
    		String insertSQL="insert into student_basic(name, age, score)"
    				+ "values('Amy', 17, 86)";
    		String deleteSQL="delete from student_basic where name='liming'";
    		
    		Connection con=null;
    		Statement sm=null;
    		
    		try{
    			con = Connect.getMysqlConnection(null, null, null, dbName, 
    					userName, password);
    			sm=con.createStatement();
    			//将表读取出来
    			ResultSet rs=operateData.queryDB(sm, querySQL);
    			System.out.println("表修改前的数据:");
    			operateData.showResultSet(rs);
    			//修改
    			operateData.updateDB(con, updateSQL);
    			operateData.updateDB(con, insertSQL);
    			operateData.updateDB(con, deleteSQL);
    			
    			System.out.println("修改表之后的数据:");
    			
    			//再进行一次查询 输出表数据
    			rs = operateData.queryDB(sm, querySQL);
    			operateData.showResultSet(rs);
    			System.out.println();
    			
    		}catch(ClassNotFoundException e1){
    			throw e1;
    		}catch(SQLException e2){
    			throw e2;
    		}finally{
    			//关闭数据库连接
    			closeStatement(sm);
    			closeConnection(con);
    		}
    	}
    }
    

     4. 批处理

    package getData;
    
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    
    /*
     * 执行一批SQL语句
     */
    public class Batch {
    	/*
    	 * 判断数据库是否支持批处理
    	 * con
    	 */
    	public static boolean supportBatch(Connection con){
    		try{
    			//得到数据库的元数据
    			DatabaseMetaData md=con.getMetaData();
    			return md.supportsBatchUpdates();
    		}catch(SQLException e){
    			e.printStackTrace();
    		}
    		return false;
    	}
    	
    
    /*
     * 执行一批SQL语句
     * con表示与数据库的连接
     * 待执行的SQL数组
     */
    
    	public static int[] goBatch(Connection con, String[] sqls){
    		if(sqls == null)
    			return null;
    		Statement sm=null;
    		try{
    			sm = con.createStatement();
    			//将所有的SQL语句添加到Statement中
    			for(int i=0; i<sqls.length; i++){
    				sm.addBatch(sqls[i]);
    			}
    			//一次执行多条SQL语句
    			return sm.executeBatch();
    		}catch(SQLException e){
    			e.printStackTrace();
    		}finally{
    			operateData.closeStatement(sm);
    		}
    		return null;
    	}
    	
    	
    	//main函数
    	public static void main(String[] args) throws ClassNotFoundException,
    		SQLException{
    		String dbName = "student";
    		String userName = "test";
    		String password = "test";
    		String[] sqls=new String[3]; //3条语句
    		sqls[0]="update student_basic set score=100 where name='Tim'";
    		sqls[1]="insert into student_basic(name, age, score)values('Yang',17,60)";
    		sqls[2]="delete from student_basic where name='Li'";
    		
    		Connection con=null;
    		try{
    			//首先获得数据库连接 通过Connect.java的函数连接
    			con = Connect.getMysqlConnection(null, null, null, 
    					dbName, userName, password);
    			//判断是否支持批处理
    			boolean ok=Batch.supportBatch(con);
    			System.out.println("支持批处理吗?"+ok);
    			
    			if(ok){
    				//执行一批SQL语句
    				int[] result = Batch.goBatch(con, sqls);
    				//分析执行的结果
    				
    				for(int i=0; i<sqls.length; i++){
    					if(result[i] >= 0){
    						System.out.println("语句"+sqls[i]+"执行成功,影响了"+result[i]+"行数据");
    					}else if(result[i]==Statement.SUCCESS_NO_INFO){
    						System.out.println("语句"+sqls[i]+"执行成功,影响行数未知");
    					}else if(result[i]==Statement.EXECUTE_FAILED){
    						System.out.println("语句"+sqls[i]+"执行失败");
    					}
    				}
    			}
    			
    		}catch(ClassNotFoundException e1){
    			throw e1;
    		}catch(SQLException e2){
    			throw e2;
    		}finally{
    			//关闭数据库
    			operateData.closeConnection(con);
    		}
    	}
    
    }
    
  • 相关阅读:
    网站安全配置Nginx防止网站被攻击
    JAVA程序打包方法-挺好
    Kettle6.1连接MongoDB报错
    基于Rancher搭建Kubernetes
    Tomcat性能调优实战
    const int * 和 int * const 傻傻分不清楚
    洛谷P1028数的计算
    【转】sizeof()用法总结
    百练4103:踩方格(DFS)
    百练2815:城堡问题(DFS)
  • 原文地址:https://www.cnblogs.com/yspworld/p/4806616.html
Copyright © 2020-2023  润新知