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("查询结果表的字段名");
}

浙公网安备 33010602011771号