jdbc连接数据库的步骤
- 获取驱动
- 创建连接对象
- 编写sql语句
- 执行sql
- 获取结果
- 关闭资源
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("查询结果表的字段名"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库