jdbc连接数据库的步骤

  1. 获取驱动
  2. 创建连接对象
  3. 编写sql语句
  4. 执行sql
  5. 获取结果
  6. 关闭资源
	class jdbcConnection{
		//1. 加载驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		//2. 创建连接对象
		connection = DriverManager.getConnection("jdbc:mysql//localhost:3306/db?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false\
  &serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true","root","root");
  		//3.编写sql
 		String sql ="select * from ceshi";
		//4.执行sql使用PreparedStatement对象
		PreparedStatement pstmt = conn.prepareStatement(sql);
		//可以进行设置参数 防止sql注入
		//5.获取结果
		ResultSet rs = pstmt.execteQuery();
		while(rs.next()){
		int id = rs.getInt("id");
		String name = rs.getString("name");
		}
		//6.关闭资源
		rs.close();
		pstmt.close();
		conn.close();
	}
//若需要插入数据(删除数据和修改数据操作几乎不变)
String sql = "insert into ceshi(name,age) values(?,?)";
PrepareStatement ps = conn.prepareStatement(sql);
ps.setString(1,"张三");
ps.setInt(2,12);
//执行sql
int count  = ps.executeUpdate();
System.out.println(count);
ps.close();
conn.close();

jdbc扩展之数据库元数据

1.介绍:

使用DatabaseMetaData接口提取不同类型的元数据。DatabaseMetaData是一个接口,提供了多种方法来获取有关数据库的综合信息

2.DatabaseMetaData的接口

获取DatabaseMetaData方式:

DatabaseMetaData databaseMetaData = connection.getMetaData();

connection是连接JdbcConnection的一个实例

3.表元数据

通过DatabaseMetaData对象的ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String types[])方法,可以获取表的信息。

catalog:目录名称,一般为数据库名,不指定就是全部数据库
schema:,一般都为空,模式名称模式
tablename:表名模式;必须与存储在数据库中的表名匹配,可以进行模糊查询
type:表的类型(TABLE||VIEW)类型–表类型列表,必须来自getTableTypes返回的表类型列表;null返回所有类型

//示例
ResultSet rs = databaseMetaData.getTables("数据库名",null,"表名(若是所有表写%)",new String[]{"TABLE"});
while(!rs.next())
{
/*每个表说明都有以下列:

TABLE_CAT String=>表目录(可能为空)

TABLE_SCHEM String=>表架构(可能为空)

TABLE_NAME String=>表名

TABLE_TYPE String=>表类型。典型类型有“表”、“视图”、“系统表”、“全局临时”、“本地临时”、“别名”、“同义词”。

备注字符串=>表上的解释性注释

TYPE_CAT String=>类型目录(可能为空)

TYPE_SCHEM String=>类型架构(可能为空)

TYPE_NAME String=>类型名称(可以为null)

SELF_REFERENCING_COL_NAME String=>类型化表的指定“标识符”列的名称(可以为空)

REF_GENERATION String=>指定如何创建自引用列名称中的值。值为“系统”、“用户”、“派生”。(可以为空)
*/
//示例:
String tableCat = rs.getString("TABLE_CAT");

}

4.列元数据

通过DatabaseMetaData对象的ResultSet getColumns(String catalog, String schemaPattern,String tableNamePattern, String columnNamePattern)方法,可以获取字段的信息。

catalog:目录名称,一般为数据库名,不指定就是全部数据库
schemaPattern:,一般都为空,模式名称模式
tableNamePattern:表名,表名模式;必须与存储在数据库中的表名匹配,可以进行模糊查询
columnNamePattern:列名模式;必须与存储在数据库中的列名匹配,可以进行模糊查询,为null即展示所有字段

//示例:
DatabaseMetaData databaseMetaData = connection.getMetaData();
ResultSet columns = databaseMetaData.getColumns("数据库名", null, "表名", null);
while(!columns.next()){
/*
TABLE_CAT String=>表目录(可能为空)

TABLE_SCHEM String=>表架构(可能为空)

TABLE_NAME String=>表名

COLUMN_NAME String=>列名

DATA_TYPE int=>来自java的SQL类型。sql。类型

TYPE_NAME String=>依赖于数据源的类型名,对于UDT,类型名是完全限定的

COLUMN_SIZE int=>列大小。

未使用BUFFER_长度。

DECIMAL_DIGITS int=>小数位数。对于十进制数字不适用的数据类型,返回Null。

NUM_PREC_RADIX int=>基数(通常为10或2)

允许NULLABLE int=>为NULL。

columnNoNulls-可能不允许空值

columnNullable-绝对允许空值

columnNullableUnknown-nullability未知

备注字符串=>描述列的备注(可以为空)

COLUMN_DEF String=>列的默认值,当值包含在单引号中时,应将其解释为字符串(可能为null)

SQL_DATA_TYPE int=>未使用

SQL_DATETIME_SUB int=>未使用

CHAR_OCTET_LENGTH int=>对于CHAR类型,列中的最大字节数

序号位置int=>表中列的索引(从1开始)

IS_NULLABLE String=>ISO规则用于确定列的可空性。

YES---如果列可以包含空值
NO---如果列不能包含空值

empty string---如果列的可空性未知

SCOPE_CATALOG String=>作为引用属性范围的表的目录(如果DATA\u TYPE不是REF,则为null)

SCOPE_SCHEMA String=>作为引用属性范围的表的架构(如果数据类型不是REF,则为null)

SCOPE_TABLE String=>这是引用属性范围的表名(如果数据类型不是REF,则为null)

SOURCE_DATA_TYPE short=>不同类型的源类型或用户生成的引用类型,来自java的SQL类型。sql。类型(如果DATA_TYPE不是DISTINCT或用户生成的REF,则为null)

IS_AUTOINCREMENT String=>指示此列是否自动递增

YES---如果列自动递增

NO---如果列不是自动递增的

empty string---如果无法确定列是否自动递增

IS_GENERATEDCOLUMN String=>指示这是否是生成的列

YES---如果这是生成的列

NO---如果这不是生成的列

empty string---如果无法确定这是否是生成的列
*/
String tableName = columns.getString("TABLE_NAME");
}

根据建表语句获取相应的信息

//根据建表信息获取相应的信息并封装
String sql = "show full columns from '表名'";
ResultSet rs = null;
Statement statement = null;
statement = connection.createStatement();
rs = statement.executeQuery(sql);
while(rs.next()){
String columnName = rs.getString("查询结果表的字段名");
}
posted @ 2022-07-05 13:37  生活的样子就该是那样  阅读(3675)  评论(0)    收藏  举报