博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC连接MySQL数据库
阅读量:4966 次
发布时间:2019-06-12

本文共 7870 字,大约阅读时间需要 26 分钟。

/* * 这部分代码是测试连通数据库的 * 我在数据库中建立了一个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\tname\t\t").append("type\t\t\t");			sb.append("scale\t").append("isNullable");			System.out.println(sb);						sb.delete(0, sb.length());						//输出列的属性信息			for(int i=1; i<=columnCount; i++){				sb.append(i).append("\t");				sb.append(md.getColumnName(i)).append("\t\t");				sb.append(md.getColumnTypeName(i)).append("\t\t\t");				sb.append(md.getScale(i)).append("\t");				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

 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
= 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); } }}

 

转载于:https://www.cnblogs.com/yspworld/p/4806616.html

你可能感兴趣的文章
Windows server 2008 R2中安装MySQL !
查看>>
Intellij Idea新建web项目(转)
查看>>
raspberry 安装apache2,使其支持ssl ,并创建自签名证书
查看>>
Trie树:应用于统计和排序
查看>>
C语言结构体和函数
查看>>
PHP 删除目录及目录下文件
查看>>
[BZOJ3449] [Usaco2014 Feb]Secret Code
查看>>
XHTML与HTML区别
查看>>
软考-程序设计语言基础(编译原理)
查看>>
2016峰会:项目管理与高级项目管理(广州站)
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>
linux 命令之top
查看>>
有关远程设置的问题
查看>>
BZOJ 1800: [Ahoi2009]fly 飞行棋
查看>>
2019,2月份第三个星期,js小突破了一波,笔记
查看>>
洛谷 [P3033] 牛的障碍
查看>>
jquery 对HTML标签的克隆、删除
查看>>
用C写的俄罗斯方块游戏 By: hoodlum1980 编程论坛
查看>>
世界上最方便的SharePoint移动客户端--Rshare
查看>>
MongoDB要点
查看>>