java执行mysql语句“show database”可以返回结果集?

wasdasdfqwer 2014-05-20 12:06:27
原始需求:修改数据库所有表中 如果有某个字段(name) 则修改这个字段的长度。
思路:1.得到所有表;
2.得到表的字段,如果有某个字段(name) 修改字段长度;
3.执行如下sql语句。

String tableName = "user";
String fieldName = "name";
String sql = "alter table "+tableName+" modify column "+fieldName+" varchar(500)";
PreparedStatement preStatement = con.prepareStatement(sql);

我的问题:1,2个步骤是否可行; 或者直接通过sql语句就能搞定。
...全文
528 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wasdasdfqwer 2014-05-20
  • 打赏
  • 举报
回复
吃饭去了吗
wasdasdfqwer 2014-05-20
  • 打赏
  • 举报
回复
当然我也在网上搜了一下,有类似的需求的,但是没有一个具体的可行的方案
attilax 2014-05-20
  • 打赏
  • 举报
回复
可行的,,操作metadata,得到表的信息。。。
wasdasdfqwer 2014-05-20
  • 打赏
  • 举报
回复
自己尝试了下,已经解决。代码如下:还可以继续封装下。


import java.sql.*;

public class TestMysqlJDBC {

	public static void main(String[] args) {
		
		//修改 数据库dbName里面 所有 字段fieldNameToUpdate 的长度为500
		String dbName = "testDb";//要操作的数据库名
		String fieldNameToUpdate = "guid";//要修改的字段名
		
		
		String url = "jdbc:mysql://localhost:3306/testDb";
		String userName = "user1";
		String password = "1234";
		Connection con = null;
		try {
			// 加载驱动器类
			Class.forName("com.mysql.jdbc.Driver");
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			con = DriverManager.getConnection(url, userName, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 接着就可以操作MySql数据库了
		
		try {
			 Statement stmt=con.createStatement(); 
			   ResultSet rs=stmt.executeQuery("show tables");
			   //返回查询的结果
			   while(rs.next())
			   {
				   String tableName = rs.getString(1);
				   String sql_tabColumns = "SHOW COLUMNS FROM "+tableName+" FROM "+dbName;
				   PreparedStatement preStatement = con.prepareStatement(sql_tabColumns);
				   ResultSet rs2 = preStatement.executeQuery();
				   while(rs2.next())
				   {
					  String fieldName =  rs2.getString(1);
					  if(fieldNameToUpdate.equals(fieldName)){
						  //相应的表有 对应的字段 则修改
						  updateTableField(con, tableName, fieldName);
						  System.out.println("修改表"+tableName+"字段"+fieldName);
					  }
				   }
					preStatement.close();
				   
				   System.out.println(tableName);
			   }
			   rs.close();
			   stmt.close();
			   con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private static void updateTableField(Connection con, String tableName,
			String fieldName) throws SQLException {
		String sql = "alter table "+tableName+" modify column "+fieldName+" varchar(500)";
		PreparedStatement preStatement = con.prepareStatement(sql);
		preStatement.executeUpdate();
		preStatement.close();
	}

}

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧