JDBC 如何判断一张表是否存在

      今天用到数据库库的知识,想用java代码的动态创建一张表结构。在创建表结构之前呢,我们首先要确定这张表在数据库中 是不存在的。因为大家都知道同一个数据库中的表名是不能重复的。

      1 。用比较笨的方法,也是比较简单的方法。利用错误来判断表是否存在。

代码:              

package com.vaolan.util.db;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.log4j.Logger;

import com.vaolan.util.file.ReadConfigFile;
/**
 * 创建商品表的
 * @author xiaoming
 *
 */
public class CreatProductTable {
	protected Logger logger;
	protected ReadConfigFile jdbcConfig;
	protected Connection conn;
	protected Statement st;
	protected ResultSet rs;
	public CreatProductTable(){
		init();
	}
	public void init (){
		jdbcConfig = new ReadConfigFile("jdbc.properties");
	}
	
	/**
	 * 判断表结构是否存在
	 * @param tableName  所判断的表名
	 * @return
	 */
	public boolean validateTableExist(String tableName){
		//定义一个变量标示
		  boolean flag = true ;
		  //一个查询该表所有的语句。
		  String sql = "SELECT COUNT(*) FROM "+ tableName ;
		  //获取连接
		  conn = ConnectFactory.getConnection();
		  try{
			 st = conn.createStatement();
			 rs = st.executeQuery(sql);
			 flag =  false;
		  }catch(Exception e){
			  //该表不存在,则 会跳入catch中
			  e.printStackTrace();
		  }finally{
			  //关闭所有连接
			  CloseConnect.closeAll(conn, st, null, null);
		  }
		  return flag;
	 }
}
获取连接一步课查看 上一篇博客。

测试:

public static void main(String[] args) {
		CreatProductTable c = new CreatProductTable();
		boolean flag = c.validateTableExist("renern");
		System.out.println(flag);
	}

若结果为:false 说明 此方法正常,则说明 表已经存在。

                 true 说明 此方法进入catch中,方法异常,则说明表不存在,可以创建

           

      2. 使用DatabaseMetaData类;

           在这个类中有一个防范,getTables();

          ResultSet rt = DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type);

          参数含义:

          catalog :用来寻找表名的目录名称。对于JDBC-ODBC数据库和许多其它的数据库,它可被设置为null。
          schema:要包括的数据库schema。许多数据库并不支持schema,而对于其它的数据库,它为数据库所有者的用户名称。 
      tablemask:描述你要获取的表的名称的一个掩码。若你想获取所有的表名,将它设为通配符%。
          types[]  :描述你奥获取的表的种类的一个字符串数组。数据库中通常包括一些用于内部管理的表,而这些表对用户来说是毫无用处的。若被设为null,你将得到所有的表。若使该数组只包括一个元素,且将该元素设为字符串“TABLES”,你将得到用户所感兴趣的那些表。 (简单地说就是表的类型)包括:"TABLE"、"VIEW"、"SYSTEM TABLE"、"GLOBAL TEMPORARY"、"LOCAL TEMPORARY"、"ALIAS" 和 "SYNONYM"

代码:

public boolean validateTableExist(String tableName){
		boolean flag = false;
		try {
			conn = ConnectFactory.getConnection();
			DatabaseMetaData meta = conn.getMetaData();
			String type [] = {"TABLE"};
			rs = meta.getTables(null, null, tableName, type);
			flag = rs.next();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return flag;
	 }

结果:true  表存在;false 表不存在


了解更多:DatabaseMetaData

 http://canfly2010.iteye.com/blog/520557

http://hi.baidu.com/qqljsevpepbhilq/item/60d94ad0d11feb3a48e1ddd9

        



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,假设你已经有了一个数据库,并且在数据库中有一张,用于存储用户信息,其中有一列是手机号码。 下面是一个使用 Java 来判断手机号码是否已经存在的例子: ``` import java.sql.*; public class CheckPhoneNumberExistence { public static void main(String[] args) { // 填写数据库的相关信息 String url = "jdbc:mysql://localhost:3306/database_name"; String username = "username"; String password = "password"; // 要判断的手机号码 String phoneNumber = "13800138000"; try (Connection connection = DriverManager.getConnection(url, username, password)) { // 构造 SQL 查询语句,查询该手机号码是否存在 String sql = "SELECT COUNT(*) FROM users WHERE phone_number = ?"; try (PreparedStatement statement = connection.prepareStatement(sql)) { statement.setString(1, phoneNumber); try (ResultSet resultSet = statement.executeQuery()) { if (resultSet.next()) { // 获取查询结果中的第一列 int count = resultSet.getInt(1); if (count > 0) { System.out.println("手机号码已存在"); } else { System.out.println("手机号码不存在"); } } } } } catch (SQLException e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们使用了 JDBC 来连接数据库,然后使用 prepared statement 来执行 SQL 查询,最后使用 result set 来获取查询结果。 需要注意的是,上面的代码仅供参考,你需要根据自己的实际情况来调整相关参数,例如数据库的 URL、用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值