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 @   生活的样子就该是那样  阅读(3651)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示